Moderne OnlyThis recipe is proprietary to Moderne and runs on the Moderne platform or CLI — it isn’t part of the open-source catalog. Available with a Moderne subscription.
Use VulnCheck Exploit Intelligence to fix vulnerabilities
Recipe ID
io.moderne.vulncheck.FixVulnCheckVulnerabilitiesArtifact
io.moderne.recipe:rewrite-vulncheckOptions
Examples
xml
| Parameter | Value |
|---|---|
| apiToken | vulncheck_93a74420e799d42d3c74b947dc7c729a873034543bc5bf20391278d9b2e94d80 |
| scope | null |
| overrideTransitive | null |
| maximumUpgradeDelta | null |
| exploitMaturity | null |
- xml
- Diff
Before
<project>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
</project>
After
<project>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
</dependencies>
</project>
--- pom.xml
+++ pom.xml
@@ -9,1 +9,1 @@
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2.1</version>
+ <version>3.2.2</version>
</dependency>
Usage
Run this recipe
You will need to have configured the Moderne CLI on your machine before you can run the following command.
shell
mod run . --recipe FixVulnCheckVulnerabilities --recipe-option "apiToken=A_TOKEN_GENERATED_FROM_VULNCHECK" --recipe-option "scope=compile" --recipe-option "overrideTransitive=false" --recipe-option "maximumUpgradeDelta=patch" --recipe-option "exploitMaturity=weaponized"
If the recipe is not available locally, then you can install it using:
mod config recipes jar install io.moderne.recipe:rewrite-vulncheck:0.7.2
Data tables
Maven metadata failures
org.openrewrite.maven.table.MavenMetadataFailuresAttempts to resolve maven metadata that failed.
| Column | Description |
|---|---|
| Group id | The groupId of the artifact for which the metadata download failed. |
| Artifact id | The artifactId of the artifact for which the metadata download failed. |
| Version | The version of the artifact for which the metadata download failed. |
| Maven repository | The URL of the Maven repository that the metadata download failed on. |
| Snapshots | Does the repository support snapshots. |
| Releases | Does the repository support releases. |
| Failure | The reason the metadata download failed. |
Vulnerability report
org.openrewrite.java.dependencies.table.VulnerabilityReportA vulnerability report that includes detailed information about the affected artifact and the corresponding CVEs.
| Column | Description |
|---|---|
| Project | The name of the project / module taking the dependency. Relevant in repositories with multiple modules. |
| CVE | The CVE number. |
| Group | The first part of a dependency coordinate com.google.guava:guava:VERSION. |
| Artifact | The second part of a dependency coordinate com.google.guava:guava:VERSION. |
| Version | The resolved version. |
| Fixed in version | The minimum version that is no longer vulnerable. |
| Last affected version | The last version which was vulnerable. |
| Version within delta | The difference between the version in use and the fixed version is within the configured maximum version delta. The recipe attempted to upgrade the version in use to a fixed version. |
| Summary | The summary of the CVE. |
| Base score | The calculated base score. |
| Depth | Zero for direct dependencies. |
| CWEs | Common Weakness Enumeration (CWE) identifiers; semicolon separated. |
| EPSS | EPSS probability score (0.0 to 1.0), or null if no EPSS data available. |
Vulnerability report with exploit intelligence
io.moderne.vulncheck.table.VulnerabilityReportWithExploitsA vulnerability report that includes detailed information about the affected artifact and the corresponding CVEs and enriched by VulnCheck exploit data.
| Column | Description |
|---|---|
| Project | The name of the project / module taking the dependency. Relevant in repositories with multiple modules. |
| CVE | The CVE number. |
| Group | The first part of a dependency coordinate com.google.guava:guava:VERSION. |
| Artifact | The second part of a dependency coordinate com.google.guava:guava:VERSION. |
| Version | The resolved version. |
| Fixed in version | The minimum version that is no longer vulnerable. |
| Fixable with version update only | Whether the vulnerability is likely to be fixed by increasing the dependency version only, with no code modifications required. This is a heuristic which assumes that the dependency is accurately versioned according to [semver](https://semver.org/). |
| Summary | The summary of the CVE. |
| Base score | The calculated base score. |
| Depth | Zero for direct dependencies. |
| CWEs | Common Weakness Enumeration (CWE) identifiers; semicolon separated. |
| Exploit maturity | The maturity of the exploit. |
| Reported exploit | Whether the vulnerability has been exploited. |
| Reported exploited by threat actors | Whether the vulnerability has been exploited by threat actors. |
| Reported exploited by ransomware | Whether the vulnerability has been exploited by ransomware. |
| Reported exploited by botnets | Whether the vulnerability has been exploited by botnets. |
Source files that had results
org.openrewrite.table.SourcesFileResultsSource files that were modified by the recipe run.
| Column | Description |
|---|---|
| Source path before the run | The source path of the file before the run. null when a source file was created during the run. |
| Source path after the run | A recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run. |
| Parent of the recipe that made changes | In a hierarchical recipe, the parent of the recipe that made a change. Empty if this is the root of a hierarchy or if the recipe is not hierarchical at all. |
| Recipe that made changes | The specific recipe that made a change. |
| Estimated time saving | An estimated effort that a developer to fix manually instead of using this recipe, in unit of seconds. |
| Cycle | The recipe cycle in which the change was made. |
Source files that had search results
org.openrewrite.table.SearchResultsSearch results that were found during the recipe run.
| Column | Description |
|---|---|
| Source path of search result before the run | The source path of the file with the search result markers present. |
| Source path of search result after run the run | A recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run. |
| Result | The trimmed printed tree of the LST element that the marker is attached to. |
| Description | The content of the description of the marker. |
| Recipe that added the search marker | The specific recipe that added the Search marker. |
Source files that errored on a recipe
org.openrewrite.table.SourcesFileErrorsThe details of all errors produced by a recipe run.
| Column | Description |
|---|---|
| Source path | The file that failed to parse. |
| Recipe that made changes | The specific recipe that made a change. |
| Stack trace | The stack trace of the failure. |
Recipe performance
org.openrewrite.table.RecipeRunStatsStatistics used in analyzing the performance of recipes.
| Column | Description |
|---|---|
| The recipe | The recipe whose stats are being measured both individually and cumulatively. |
| Source file count | The number of source files the recipe ran over. |
| Source file changed count | The number of source files which were changed in the recipe run. Includes files created, deleted, and edited. |
| Cumulative scanning time (ns) | The total time spent across the scanning phase of this recipe. |
| Max scanning time (ns) | The max time scanning any one source file. |
| Cumulative edit time (ns) | The total time spent across the editing phase of this recipe. |
| Max edit time (ns) | The max time editing any one source file. |