feat: add v1 Golang Vulncheck Analyzer - #8678
Open
cvas22 wants to merge 8 commits into
Open
Conversation
Adds a new experimental analyzer that runs the Go team's `govulncheck`
against Go modules and reports the vulnerabilities it finds, sourced from
the curated Go vulnerability database.
Unlike the CPE-matching Golang Mod Analyzer, govulncheck performs call-graph
reachability analysis in source mode (`govulncheck -json ./...`), so it
reports primarily the vulnerabilities actually reachable from the scanned
code - substantially reducing false positives/negatives for Go.
Design:
- Source mode only, keyed off `go.mod` (reuses existing module detection);
binary mode is intentionally out of scope for v1.
- Native `-json` (OSV) output; streaming parser joins `osv` advisories with
`finding` records and selects the most precise (reachable) finding.
- De-duplicates against other data sources via OSV aliases: reuses an
existing NVD vulnerability when a CVE alias matches, otherwise synthesizes
one under the GO-YYYY-NNNN id.
- Reports against the vulnerable module as a synthetic pkg:golang dependency.
Disabled by default; requires `go` and `govulncheck` to be installed.
New:
- GolangVulncheckAnalyzer, GovulncheckProcessor
- GovulncheckJsonParser, GovulncheckResult
- Settings keys analyzer.golang.vulncheck.{enabled,path}
- Vulnerability.Source.GOVULNCHECK
Config wiring: CLI (--enableGolangVulncheck, --govulncheck), Ant
(golangVulncheckEnabled, pathToGovulncheck), Maven (golangVulncheckEnabled,
pathToGovulncheck).
Tests: unit tests for the parser and analyzer; an integration test that runs
real govulncheck end-to-end (self-skips when the tool is absent).
Docs: analyzer page, analyzers index, CLI/Ant/Maven configuration, and bash
completion updated.
feat: add experimental Golang Vulncheck Analyzer (dependency-check#8470)
Collaborator
|
Won't merge until CI errors are corrected: |
…flag CliParser.hasOption(String) returns a nullable Boolean (null when the option is absent). The --enableGolangVulncheck wiring passed it through a `? true : null` ternary, which unboxed the null in the condition and threw a NullPointerException in App.populateSettings (failing AppTest and the CI Build and Test job on all JDKs). Pass the nullable Boolean straight to setBooleanIfNotNull, matching the other enable-flag options (e.g. Nexus): absent -> null -> setting is left at its default; present -> true -> analyzer enabled.
fix(cli): avoid NPE from nullable hasOption() for govulncheck enable …
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an experimental v1 Go “vulncheck” analyzer integration that runs the Go team’s govulncheck in source mode, parses its streaming -json output, and maps findings into Dependency-Check dependencies/vulnerabilities with de-duplication via CVE aliases. This expands Dependency-Check’s Go support beyond CPE/NVD matching by using reachability-aware results from the curated Go vulnerability DB.
Changes:
- Introduces
GolangVulncheckAnalyzerand supporting parsing/processing (GovulncheckJsonParser,GovulncheckProcessor,GovulncheckResult) plus a newVulnerability.Source.GOVULNCHECK. - Wires configuration for CLI/Ant/Maven (enable flag +
govulncheckpath) and defaults it to disabled. - Adds unit tests for parsing/analyzer behavior and an integration test that self-skips if tooling is unavailable; updates docs and bash completion.
Reviewed changes
Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| utils/src/main/java/org/owasp/dependencycheck/utils/Settings.java | Adds settings keys for enabling vulncheck analyzer and configuring govulncheck path. |
| src/site/markdown/analyzers/index.md | Lists the new Golang Vulncheck Analyzer in the analyzer index. |
| src/site/markdown/analyzers/golang-vulncheck.md | Adds documentation page describing behavior, requirements, and configuration keys. |
| maven/src/site/markdown/configuration.md | Documents Maven plugin parameters for enabling vulncheck and setting govulncheck path. |
| maven/src/main/java/org/owasp/dependencycheck/maven/BaseDependencyCheckMojo.java | Adds Maven plugin parameters and populates corresponding settings keys. |
| core/src/test/resources/golang/vulncheck/main.go | Adds Go test module source used by integration testing. |
| core/src/test/resources/golang/vulncheck/go.sum | Adds Go test module go.sum for integration testing. |
| core/src/test/resources/golang/vulncheck/go.mod | Adds Go test module go.mod for integration testing. |
| core/src/test/resources/golang/govulncheck.json | Adds sample govulncheck -json output for parser unit tests. |
| core/src/test/java/org/owasp/dependencycheck/data/golang/GovulncheckJsonParserTest.java | Unit tests for streaming JSON parser behavior and de-duplication/precision selection. |
| core/src/test/java/org/owasp/dependencycheck/analyzer/GolangVulncheckAnalyzerTest.java | Unit tests for analyzer name/phase and file acceptance behavior. |
| core/src/test/java/org/owasp/dependencycheck/analyzer/GolangVulncheckAnalyzerIT.java | End-to-end integration test running real govulncheck with self-skip when absent. |
| core/src/main/resources/META-INF/services/org.owasp.dependencycheck.analyzer.Analyzer | Registers the new analyzer via SPI. |
| core/src/main/resources/dependencycheck.properties | Adds default config entry setting vulncheck analyzer disabled by default. |
| core/src/main/java/org/owasp/dependencycheck/processing/GovulncheckProcessor.java | Converts parsed govulncheck results into synthetic Go module dependencies and vulnerabilities. |
| core/src/main/java/org/owasp/dependencycheck/dependency/Vulnerability.java | Adds GOVULNCHECK as a vulnerability source. |
| core/src/main/java/org/owasp/dependencycheck/data/golang/GovulncheckResult.java | Defines result model joining OSV advisory metadata with the most precise finding. |
| core/src/main/java/org/owasp/dependencycheck/data/golang/GovulncheckJsonParser.java | Implements framed streaming parsing of concatenated JSON messages from govulncheck -json. |
| core/src/main/java/org/owasp/dependencycheck/analyzer/GolangVulncheckAnalyzer.java | Implements analyzer that runs govulncheck, validates availability, and processes output. |
| cli/src/site/markdown/arguments.md | Documents new CLI switches --enableGolangVulncheck and --govulncheck. |
| cli/src/main/resources/completion-for-dependency-check.sh | Adds bash completion entries for the new CLI flags. |
| cli/src/main/java/org/owasp/dependencycheck/CliParser.java | Adds new CLI argument constants and option definitions for govulncheck and enable flag. |
| cli/src/main/java/org/owasp/dependencycheck/App.java | Wires CLI args into settings for enabling analyzer and setting govulncheck path. |
| ant/src/site/markdown/configuration.md | Documents Ant task attributes for enabling vulncheck and setting govulncheck path. |
| ant/src/main/java/org/owasp/dependencycheck/taskdefs/Check.java | Adds Ant task fields/setters and populates settings for enable flag + govulncheck path. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+164
to
+166
| } catch (DatabaseException ex) { | ||
| LOGGER.debug("Unable to look up alias {} for govulncheck advisory {}", alias, result.getId()); | ||
| } |
Comment on lines
+173
to
+175
| } catch (AnalysisException ae) { | ||
| final String msg = String.format("Exception from govulncheck process: %s. Disabling %s", ae.getCause(), ANALYZER_NAME); | ||
| throw new InitializationException(msg, ae); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of Change
Adds a new v1 analyzer that runs the Go team's govulncheck against Go modules and reports the vulnerabilities it finds, sourced from the curated Go vulnerability database.
Unlike the CPE-matching Golang Mod Analyzer, govulncheck performs call-graph reachability analysis in source mode (govulncheck -json ./...), so it reports primarily the vulnerabilities actually reachable from the scanned code - substantially reducing false positives/negatives for Go.
Design:
Source mode only, keyed off go.mod (reuses existing module detection); binary mode is intentionally out of scope for v1.
Native -json (OSV) output; streaming parser joins osv advisories with finding records and selects the most precise (reachable) finding.
De-duplicates against other data sources via OSV aliases: reuses an existing NVD vulnerability when a CVE alias matches, otherwise synthesizes one under the GO-YYYY-NNNN id.
Reports against the vulnerable module as a synthetic pkg:golang dependency.
Disabled by default; requires go and govulncheck to be installed.
New:
GolangVulncheckAnalyzer, GovulncheckProcessor
GovulncheckJsonParser, GovulncheckResult
Settings keys analyzer.golang.vulncheck.{enabled,path}
Vulnerability.Source.GOVULNCHECK
Config wiring: CLI (--enableGolangVulncheck, --govulncheck), Ant (golangVulncheckEnabled, pathToGovulncheck), Maven (golangVulncheckEnabled, pathToGovulncheck).
Tests: unit tests for the parser and analyzer; an integration test that runs real govulncheck end-to-end (self-skips when the tool is absent).
Docs: analyzer page, analyzers index, CLI/Ant/Maven configuration, and bash completion updated.
Related issues
attempts to address #8470
Have test cases been added to cover the new functionality?
yes