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