← All recipes
Moderne licensed

Find and fix vulnerable Go dependencies

Recipe IDorg.openrewrite.golang.dependencies.DependencyVulnerabilityCheck
Artifactorg.openrewrite.recipe:rewrite-java-security

This software composition analysis (SCA) tool detects and upgrades Go module dependencies with publicly disclosed vulnerabilities. This recipe both generates a report of vulnerable dependencies and upgrades go.mod to newer versions with fixes. This recipe by default only upgrades to the latest **patch** version. If a minor or major upgrade is required to reach the fixed version, this can be controlled using the maximumUpgradeDelta option. Vulnerability information comes from the GitHub Security Advisory Database, which aggregates vulnerability data from several public databases, including the National Vulnerability Database maintained by the United States government. When a go.sum file is present it is regenerated to match the upgraded go.mod by running go mod download, which requires the go toolchain to be installed. If the toolchain is unavailable the go.mod change is still applied and the go.sum is flagged so it can be brought back in sync with go mod tidy. Because the module graph is not re-resolved, upgrades that introduce new indirect requirements may still need a follow-up go mod tidy. ## Customizing Vulnerability Data This recipe can be customized by extending DependencyVulnerabilityCheckBase and overriding the vulnerability data sources: - **baselineVulnerabilities(ExecutionContext ctx)**: Provides the default set of known vulnerabilities. The base implementation loads vulnerability data from the GitHub Security Advisory Database CSV file using ResourceUtils.parseResourceAsCsv(). Override this method to replace the entire vulnerability dataset with your own curated list. - **supplementalVulnerabilities(ExecutionContext ctx)**: Allows adding custom vulnerability data beyond the baseline. The base implementation returns an empty list. Override this method to add organization-specific vulnerabilities, internal security advisories, or vulnerabilities from additional sources while retaining the baseline GitHub Advisory Database. Both methods return List<Vulnerability> objects. Vulnerability data can be loaded from CSV files using ResourceUtils.parseResourceAsCsv(path, Vulnerability.class, consumer) or constructed programmatically.

Single recipeProprietary

Usage

This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.

mod run . --recipe org.openrewrite.golang.dependencies.DependencyVulnerabilityCheck

If the recipe isn’t available locally, install it with:

mod config recipes jar install org.openrewrite.recipe:rewrite-java-security:3.36.0

Options

NameTypeDescription
addMarkersBooleanReport each remaining vulnerability as search result markers on the go.mod file. When enabled you can see which modules are still vulnerable in the search results and diff view. By default these markers are omitted and vulnerabilities are only surfaced in the data table.
overrideTransitiveBooleanWhen enabled transitive (indirect) dependencies with vulnerabilities will have their versions overridden. By default only direct dependencies have their version numbers upgraded.
e.g. false
maximumUpgradeDeltaUpgradeDeltaThe maximum difference to allow when suggesting a dependency version upgrade. Use none to only report vulnerabilities without making any changes. Patch version upgrades are the default and safest option, as patch releases assert full backwards compatibility with no breaking changes. Minor version upgrades can introduce new features but do not _typically_ include breaking changes. Major version upgrades will typically require code changes above and beyond this recipe.
e.g. patch
minimumSeverityStringOnly report and fix vulnerabilities with a severity level equal to or higher than the specified minimum. Vulnerabilities are classified as low, moderate, high, or critical based on their potential impact. Default is low, which includes all severity levels.
e.g. moderate
cvePatternStringOnly report and fix vulnerabilities matching this regular expression pattern. This allows filtering to specific CVEs or CVE ranges. For example, CVE-2023-.* will only check for CVEs from 2023, CVE-(2022|2023)-.* will check for CVEs from 2022 or 2023, CVE-2021-44228|CVE-2022-23305 will check for those specific CVEs. If not specified, all CVEs will be checked (subject to other filters).
e.g. CVE-2023-.*

Data tables

Structured output this recipe can produce.

  • Vulnerability reportA vulnerability report that includes detailed information about the affected artifact and the corresponding CVEs.org.openrewrite.golang.dependencies.table.VulnerabilityReport
  • Source files that had resultsSource files that were modified by the recipe run.org.openrewrite.table.SourcesFileResults
  • Source files that had search resultsSearch results that were found during the recipe run.org.openrewrite.table.SearchResults
  • Source files that errored on a recipeThe details of all errors produced by a recipe run.org.openrewrite.table.SourcesFileErrors
  • Recipe performanceStatistics used in analyzing the performance of recipes.org.openrewrite.table.RecipeRunStats