From e5ffdea483ea28c52e608074ab2832f4e00693be Mon Sep 17 00:00:00 2001
From: Leon van Zantvoort <303196+zantvoort@users.noreply.github.com>
Date: Thu, 22 Oct 2026 17:44:16 +0100
Subject: [PATCH] Gate CI on known vulnerabilities in the shipped dependency
graph
OWASP Dependency-Check runs over compile and runtime scope in its own CI
job, failing at CVSS 7; test and provided scope are the application's
dependencies and stay out. The job skips where no NVD API key is
available. Stale test-scope driver and Jackson pins move to current
patches, and the website's build chain gets overrides for its critical
transitive advisories.
Fixes #242
---
.github/workflows/ci.yml | 40 +++++++
pom.xml | 23 ++++
storm-jackson2/pom.xml | 4 +-
storm-jackson3/pom.xml | 4 +-
storm-mysql/pom.xml | 2 +-
storm-postgresql/pom.xml | 2 +-
website/package-lock.json | 235 ++++++++++++++++++++++++--------------
website/package.json | 6 +
8 files changed, 223 insertions(+), 93 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9f08aa254..dd7b2f214 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -79,6 +79,46 @@ jobs:
flags: unittests
fail_ci_if_error: true
+ # Known-vulnerability gate over the dependency graph Storm ships (compile and runtime scope): OWASP
+ # Dependency-Check against the NVD, failing on a High or Critical advisory. Test and provided scope are the
+ # application's own dependencies and stay out of it. The NVD API key is a repository secret; Dependabot runs and
+ # forks receive no secrets, so the scan is skipped there and reported as such.
+ dependency-check:
+ runs-on: ubuntu-latest
+ timeout-minutes: 40
+ env:
+ NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v7
+
+ - name: Set up JDK 21
+ if: env.NVD_API_KEY != ''
+ uses: actions/setup-java@v6
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+ # The Maven cache holds the NVD data the plugin keeps under ~/.m2 as well, so a run only pulls the
+ # advisories published since the last one.
+ cache: 'maven'
+
+ - name: Scan the shipped dependency graph
+ if: env.NVD_API_KEY != ''
+ run: mvn -B -DskipTests -Dmaven.javadoc.skip=true -Dspotless.check.skip=true install org.owasp:dependency-check-maven:aggregate
+
+ - name: Upload the Dependency-Check report
+ if: env.NVD_API_KEY != '' && always()
+ uses: actions/upload-artifact@v7
+ with:
+ name: dependency-check-report
+ path: target/dependency-check-report.*
+ if-no-files-found: ignore
+ retention-days: 30
+
+ - name: Report a skipped scan
+ if: env.NVD_API_KEY == ''
+ run: echo "::notice::Dependency-Check skipped - no NVD_API_KEY available to this run."
+
# The CLI ships to users via npx but is plain JavaScript with no compile step,
# so at minimum its syntax must be checked before merge.
cli-check:
diff --git a/pom.xml b/pom.xml
index 10c7815ef..e03062217 100644
--- a/pom.xml
+++ b/pom.xml
@@ -264,6 +264,29 @@
+
+
+ org.owasp
+ dependency-check-maven
+ 13.0.0
+
+
+ 7
+ true
+ true
+ NVD_API_KEY
+
+ HTML
+ JSON
+
+
+ false
+
+
diff --git a/storm-jackson2/pom.xml b/storm-jackson2/pom.xml
index 92502277b..4ea812d73 100644
--- a/storm-jackson2/pom.xml
+++ b/storm-jackson2/pom.xml
@@ -146,7 +146,7 @@
com.fasterxml.jackson.core
jackson-core
- 2.17.0
+ 2.17.3
provided
@@ -163,7 +163,7 @@
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
- 2.17.0
+ 2.17.3
test
diff --git a/storm-jackson3/pom.xml b/storm-jackson3/pom.xml
index 7aa196ead..35c95ffc6 100644
--- a/storm-jackson3/pom.xml
+++ b/storm-jackson3/pom.xml
@@ -134,13 +134,13 @@
tools.jackson.core
jackson-databind
- 3.0.0
+ 3.0.4
provided
tools.jackson.core
jackson-core
- 3.0.0
+ 3.0.4
provided
diff --git a/storm-mysql/pom.xml b/storm-mysql/pom.xml
index e724a6679..4bd294229 100644
--- a/storm-mysql/pom.xml
+++ b/storm-mysql/pom.xml
@@ -126,7 +126,7 @@
com.mysql
mysql-connector-j
- 8.0.33
+ 9.7.0
test