Skip to content

fix(deps): pin Netty to 4.1.135.Final to fix CVE-2025-24970 (high-severity DoS)#222

Merged
joerg84 merged 1 commit into
mainfrom
fix/cve-netty-transport
Jun 5, 2026
Merged

fix(deps): pin Netty to 4.1.135.Final to fix CVE-2025-24970 (high-severity DoS)#222
joerg84 merged 1 commit into
mainfrom
fix/cve-netty-transport

Conversation

@joerg84
Copy link
Copy Markdown
Contributor

@joerg84 joerg84 commented Jun 5, 2026

Summary

Fixes CVE-2025-24970 (HIGH, CVSS 7.5) in Netty. grpc-netty:1.60.2 pulls Netty 4.1.100.Final transitively, where a specially crafted packet can crash the native SslHandler, causing a denial of service. The fix is Netty ≥ 4.1.118.Final.

grpc-netty does not pin a patched Netty even in recent releases (see grpc/grpc-java#11911 — 1.70.0 still scans HIGH), so this pins Netty directly without a large grpc upgrade.

Changes

  • Pin the three Netty modules that grpc-netty declares directly — netty-codec-http2, netty-handler-proxy, netty-transport-native-unix-common — to 4.1.135.Final.
  • Bump netty-tcnative-boringssl-static 2.0.61.Final → 2.0.77.Final (the version paired with Netty 4.1.135).

Why pin those three modules

The published artifact is the thin jar with a flat dependency POM (no <dependencyManagement>), so consumers resolve Netty transitively from grpc-netty. A BOM/constraint would not override the transitive version for Maven consumers. Declaring the same three modules grpc-netty declares — as direct deps at the patched version — makes the patched version win for everyone (Maven nearest-wins, Gradle highest-wins), pulling the whole Netty graph (incl. the vulnerable netty-handler / netty-common) up to 4.1.135.

Bonus

Also brings in patched netty-codec-http (CVE-2024-29025) and netty-common (CVE-2025-25193).

Verification

  • ./gradlew clean build jar compileIntegrationTestJavaBUILD SUCCESSFUL, unit tests pass (JDK 17, Gradle 8.5).
  • gradle dependencies --configuration runtimeClasspathevery io.netty:* module resolves to 4.1.135.Final (the three 4.1.100 -> 4.1.135 overrides are visible), tcnative at 2.0.77.
  • Generated POM lists the three Netty modules at 4.1.135.Final + tcnative 2.0.77 as direct deps, so the override propagates to consumers.

Notes

  • Netty 4.1.x is binary-backward-compatible, so pinning ahead of grpc-netty's tested 4.1.100 is safe; this is the remediation grpc recommends for these CVEs. CI's integration-test job exercises the live gRPC/Netty transport.
  • Related but heavier alternative: draft Update grpc version to 1.75.0 #198 (grpc → 1.75.0). This PR is the focused CVE fix.

🤖 Generated with Claude Code


Note

Medium Risk
Changes the gRPC transport stack (Netty/tcnative) for all library consumers; low code churn but affects security-sensitive networking dependencies.

Overview
Pins Netty 4.1.135.Final on the three modules grpc-netty pulls in directly (netty-codec-http2, netty-handler-proxy, netty-transport-native-unix-common) so Gradle/Maven consumers get patched artifacts instead of 4.1.100.Final from grpc-netty:1.60.2, addressing CVE-2025-24970 and related Netty CVEs without upgrading gRPC.

Bumps netty-tcnative-boringssl-static from 2.0.61.Final to 2.0.77.Final to match the pinned Netty line.

Reviewed by Cursor Bugbot for commit 7dbacce. Bugbot is set up for automated code reviews on this repo. Configure here.

grpc-netty 1.60.2 pulls Netty 4.1.100.Final transitively, which is vulnerable
to CVE-2025-24970 (HIGH, CVSS 7.5): a crafted packet can crash the native
SslHandler (DoS). The fix is Netty 4.1.118.Final+. grpc-netty does not pin a
patched Netty even in recent releases, so pin Netty directly.

- Pin the three Netty modules that grpc-netty declares directly
  (netty-codec-http2, netty-handler-proxy, netty-transport-native-unix-common)
  to 4.1.135.Final. This wins transitive resolution for consumers too
  (Maven nearest-wins / Gradle highest-wins), so all Netty modules
  (incl. netty-handler and netty-common) resolve to 4.1.135.Final.
- Bump netty-tcnative-boringssl-static 2.0.61.Final -> 2.0.77.Final to match.

Also brings in patched netty-codec-http (CVE-2024-29025) and netty-common
(CVE-2025-25193).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@joerg84
Copy link
Copy Markdown
Contributor Author

joerg84 commented Jun 5, 2026

integration-test failure is a known shared-account flake, not caused by this change — re-running

I analyzed the failed integration-test jobs:

  • 161 integration tests passed, including gRPC data-plane operations (upsert/query/fetch) over the Netty TLS transport. There are zero transport/SSL/binary-compat errors (no SSLHandshakeException, NoSuchMethodError, NoClassDefFoundError, UNAVAILABLE).
  • The 9 failures are: 8× PineconeNotFoundException for a missing pod index pod-index-xydcufjr (via the REST control-plane / OkHttp, not Netty) and 1× gRPC UNAUTHENTICATED — note the server responded, which proves the Netty connection is healthy (a broken transport would surface UNAVAILABLE/connection errors).
  • The exact same tests passed on fix(deps): bump jackson to 2.18.8 to fix CVE-2025-52999 (high-severity DoS) #221 (jackson PR, identical setup apart from this change): 107 tests, 0 failed. The two suites ran at overlapping times against the same shared Pinecone account, and the per-run pod index was removed mid-run (concurrent runs + the automated index-cleanup utility). This matches the integration-test flakiness addressed in 6072a1d.

Re-running the failed jobs now that #221's run has finished. The Netty 4.1.135 pin is validated by the passing data-plane tests + green build on Java 8/11/16/17.

@joerg84 joerg84 requested review from cboltt, jhamon and rohanshah18 June 5, 2026 21:21
Copy link
Copy Markdown
Contributor

@rohanshah18 rohanshah18 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for addressing the vulnerability, LGTM!

@joerg84 joerg84 merged commit c138145 into main Jun 5, 2026
18 of 20 checks passed
@joerg84 joerg84 deleted the fix/cve-netty-transport branch June 5, 2026 22:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants