Skip to content

Commit 5d71a12

Browse files
jorgeeclaude
andcommitted
Fix jackson & netty CVEs via api-scoped dependency constraints
Overrides the vulnerable transitive jackson and netty versions pulled by the Azure/Google/Seqera SDKs using api-scoped dependency constraints, which take effect on ALL configurations — including testFixtures*, which implementation/ runtimeOnly pins don't reach. GitHub's dependency submission resolves every configuration, so those testFixtures selections were reported in the graph and kept alerts open. - nf-commons: constraint jackson-databind 2.21.5 (transitive via npr-api; `api` scope propagates to downstream modules and their testFixtures) - nf-seqera: constraint jackson-databind 2.21.5 (transitive via tower-api). jackson-dataformat-yaml stays a direct `api` dependency at 2.21.5 because it is required at runtime and is NOT pulled transitively. - nf-azure: constraints jackson databind/core/annotations 2.18.9 (2.18 line required by the Azure SDK) and azure-core-http-netty 1.16.5 (brings patched netty 4.1.135). - nf-google: constraints jackson databind/core/annotations 2.18.9. The existing grpc-netty-shaded runtimeOnly pin is left unchanged (it has no open alert; converting it to a constraint is deferred to avoid perturbing the credential-gated GCP integration test). Constraints bump a transitive version without adding a fake dependency, `api` scope reaches testFixtures compile classpaths, and `require` (default) is a security floor (>= patched). Modules that genuinely use a library (jackson-dataformat-yaml in nf-seqera) keep a real dependency. Verified by generating the real GitHub dependency-graph snapshot: the submitted graph contains only patched versions in every configuration — jackson 2.18.9 / 2.21.5, jackson-dataformat-yaml 2.21.5, netty 4.1.135, azure-core-http-netty 1.16.5. Compile succeeds and the changed-module test suites pass. Addresses GHSA-rmj7-2vxq-3g9f, GHSA-j3rv-43j4-c7qm, GHSA-72hv-8253-57qq, GHSA-3qp7-7mw8-wx86 (CVE-2026-44249). Signed-off-by: Jorge Ejarque <jorge.ejarque@seqera.io> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: jorgee <jorge.ejarque@seqera.io>
1 parent 1e53f4a commit 5d71a12

4 files changed

Lines changed: 37 additions & 12 deletions

File tree

modules/nf-commons/build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ dependencies {
3939
// patch gson dependency required by pf4j
4040
api 'com.google.code.gson:gson:2.13.1'
4141
api 'io.seqera:npr-api:0.22.0'
42+
// jackson-databind is pulled transitively (npr-api). Bump it to the patched 2.21.5 via an
43+
// api-scoped constraint — no direct dependency, and `api` scope propagates the fix to all
44+
// downstream modules and their testFixtures classpaths. Addresses the high-severity
45+
// PolymorphicTypeValidator bypasses (GHSA-rmj7-2vxq-3g9f, GHSA-j3rv-43j4-c7qm).
46+
constraints {
47+
api('com.fasterxml.jackson.core:jackson-databind:2.21.5') { because 'jackson-databind deserialization CVEs' }
48+
}
4249

4350
/* testImplementation inherited from top gradle build file */
4451
testImplementation(testFixtures(project(":nextflow")))

plugins/nf-azure/build.gradle

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,19 @@ dependencies {
6565
exclude group: 'org.slf4j', module: 'slf4j-api'
6666
}
6767

68-
// Force patched version to address GHSA-72hv-8253-57qq (jackson-core Number Length Constraint Bypass DoS)
69-
runtimeOnly 'com.fasterxml.jackson.core:jackson-core:2.18.6'
70-
71-
// Pin azure-core-http-netty to a version that brings patched netty
72-
// (4.1.135.Final) to address GHSA-3qp7-7mw8-wx86 / CVE-2026-44249
73-
implementation 'com.azure:azure-core-http-netty:1.16.5'
68+
// Bump vulnerable transitive dependencies of the Azure SDK across ALL classpaths —
69+
// including testFixtures*, which implementation/runtimeOnly pins don't reach. Constraints
70+
// raise the transitive version without adding a direct dependency; `api` scope is what
71+
// reaches the consumer/testFixtures compile classpaths.
72+
constraints {
73+
// jackson kept on the 2.18 line required by the Azure SDK; addresses GHSA-72hv-8253-57qq
74+
// (jackson-core DoS) and the jackson-databind deserialization advisories fixed in 2.18.9
75+
api('com.fasterxml.jackson.core:jackson-databind:2.18.9') { because 'jackson-databind deserialization CVEs' }
76+
api('com.fasterxml.jackson.core:jackson-core:2.18.9') { because 'GHSA-72hv-8253-57qq' }
77+
api('com.fasterxml.jackson.core:jackson-annotations:2.18.9') { because 'keep jackson aligned' }
78+
// azure-core-http-netty 1.16.5 brings patched netty 4.1.135 (GHSA-3qp7-7mw8-wx86 / CVE-2026-44249)
79+
api('com.azure:azure-core-http-netty:1.16.5') { because 'brings patched netty 4.1.135' }
80+
}
7481

7582
testImplementation(testFixtures(project(":nextflow")))
7683
testImplementation project(':nextflow')

plugins/nf-google/build.gradle

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,15 @@ dependencies {
6565
api 'io.seqera:lib-httpx:2.3.0'
6666
// Force patched version to address CVE-2025-55163 (MadeYouReset HTTP/2 DDoS vulnerability)
6767
runtimeOnly 'io.grpc:grpc-netty-shaded:1.75.0'
68-
// Force patched version to address GHSA-72hv-8253-57qq (jackson-core Number Length Constraint Bypass DoS)
69-
runtimeOnly 'com.fasterxml.jackson.core:jackson-core:2.18.6'
68+
// Bump the jackson pulled transitively by the Google SDK to the patched 2.18 line across ALL
69+
// configurations — including testFixtures*, which runtimeOnly/implementation pins don't reach.
70+
// Addresses GHSA-72hv-8253-57qq (jackson-core DoS) and the jackson-databind deserialization
71+
// advisories fixed in 2.18.9.
72+
constraints {
73+
api('com.fasterxml.jackson.core:jackson-databind:2.18.9') { because 'jackson-databind deserialization CVEs' }
74+
api('com.fasterxml.jackson.core:jackson-core:2.18.9') { because 'GHSA-72hv-8253-57qq' }
75+
api('com.fasterxml.jackson.core:jackson-annotations:2.18.9') { because 'keep jackson aligned' }
76+
}
7077

7178
testImplementation(testFixtures(project(":nextflow")))
7279
testImplementation "org.apache.groovy:groovy:4.0.31"

plugins/nf-seqera/build.gradle

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,14 @@ dependencies {
7373
api('io.seqera:tower-api:1.158.0') {
7474
exclude group: 'io.micronaut.servlet'
7575
}
76-
// jackson 2.21.4 addresses GHSA-rmj7-2vxq-3g9f and GHSA-j3rv-43j4-c7qm
77-
// (PolymorphicTypeValidator bypasses)
78-
api "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.21.4"
79-
api "com.fasterxml.jackson.core:jackson-databind:2.21.4"
76+
// jackson-dataformat-yaml is required at runtime but is NOT pulled transitively, so it
77+
// stays a direct dependency. jackson-databind IS transitive (tower-api / npr), so a
78+
// constraint bumps it without adding a redundant dependency. Both at the patched 2.21.5 —
79+
// addresses GHSA-rmj7-2vxq-3g9f, GHSA-j3rv-43j4-c7qm (PolymorphicTypeValidator bypasses).
80+
api "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.21.5"
81+
constraints {
82+
api('com.fasterxml.jackson.core:jackson-databind:2.21.5') { because 'jackson-databind deserialization CVEs' }
83+
}
8084

8185
testImplementation(testFixtures(project(":nextflow")))
8286
testImplementation "org.apache.groovy:groovy:4.0.31"

0 commit comments

Comments
 (0)