Cloudanix VulnDB

CVE-2025-67735

Medium · 6.5

CVSS

6.5

EPSS

0.3%

Published

Dec 16, 2025

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in a widely used networking library can let malicious input change the structure of outgoing web requests, causing downstream systems to receive instructions the application did not intend to send.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Data Tampering
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This flaw is an improper input validation issue in Netty's HTTP request encoding path, specifically in io.netty.handler.codec.http.HttpRequestEncoder. If an application allows attacker-controlled data to influence an outbound HTTP request target or related request-line content, carriage return and line feed characters can be encoded into the HTTP stream. That can break the intended request structure and allow injection of additional HTTP headers or, depending on the downstream server/proxy behavior, HTTP request splitting or request smuggling-style behavior. The vulnerability is most relevant in Netty-based clients, gateways, reverse proxies, API clients, service meshes, or middleware that construct outbound HTTP requests from user-supplied URLs, paths, query strings, or redirect destinations.

Why it matters to the business

Successful exploitation can let an attacker manipulate how downstream services interpret requests, potentially bypassing routing or access-control assumptions, poisoning caches, altering headers used for authentication or authorization, or causing requests to be processed differently than intended. Because Netty is commonly embedded as a library inside Java services and frameworks, exposure may be indirect and difficult to identify without dependency analysis. The vulnerability is not currently listed in CISA KEV, is not marked as ransomware-used, has no known exploit maturity in the supplied data, and has a low EPSS score, so it should be treated as a moderate-priority patching item unless the affected component processes untrusted URLs or operates as an internet-facing proxy/gateway.

How an attack unfolds

An attacker first identifies a Netty-based application that constructs outbound HTTP requests using input they can influence, such as a URL fetcher, webhook integration, proxy endpoint, redirect handler, API gateway, or service-to-service request builder. The attacker supplies a request target containing CRLF characters, often URL-encoded as %0d%0a, followed by attacker-chosen header text or a crafted second request fragment. A vulnerable Netty HttpRequestEncoder fails to neutralize the CRLF sequence before writing the outbound HTTP request. The receiving HTTP server, intermediary proxy, cache, or load balancer may then parse the injected bytes as additional headers or as a split request. The attacker uses this parsing confusion to alter downstream behavior, such as injecting Host, X-Forwarded-*, Content-Length, Transfer-Encoding, Authorization-like, or cache-control headers, or to trigger request smuggling conditions where front-end and back-end components disagree about request boundaries.

How to fix it

Upgrade Netty to a version that includes the fix for commit e2d9d11c67f418c3d1e76b77dd7b93de36e47787, or consume a released package version from the Netty project that contains that commit. Because the supplied fixed-version data references the Git commit rather than a package version, organizations should verify their resolved Netty artifact includes this commit or a later security release. Rebuild and redeploy all applications, containers, shaded JARs, fat JARs, and vendor components that bundle vulnerable Netty code. As defense in depth, reject or canonicalize CR, LF, and other control characters in any user-controlled URL, path, query, redirect, webhook, proxy, or request-target input before it reaches Netty. Avoid constructing outbound HTTP requests by concatenating raw strings; use strict URI builders and allowlists for schemes, hosts, and paths. For proxy-like services, normalize and validate request targets before forwarding and ensure downstream proxies reject malformed request lines and headers.

How to confirm the fix worked

Confirm dependency resolution shows a Netty build that includes commit e2d9d11c67f418c3d1e76b77dd7b93de36e47787 or a later fixed release. Use software composition analysis, build manifests, SBOMs, Maven/Gradle dependency trees, and container image scans to locate all copies of io.netty artifacts, including transitive and shaded dependencies. Perform a targeted regression test by sending benign CRLF-bearing inputs such as encoded %0d%0a followed by a test header name through any feature that creates outbound HTTP requests; the application should reject the input, encode it safely, or ensure the downstream service does not receive an injected header or split request. Inspect packaged artifacts for the fixed Netty version or fixed class implementation, and verify runtime classpaths do not load an older Netty copy before the patched one.

Typical attack path

  1. Locate an application or service using Netty to generate outbound HTTP requests.
  2. Find an input path where untrusted data influences the outbound URL, path, query string, redirect destination, proxy target, or request target.
  3. Submit payloads containing CRLF sequences, commonly encoded as %0d%0a or %0D%0A, followed by injected HTTP header syntax.
  4. Observe whether the downstream service, proxy, or cache receives unexpected headers or altered request structure.
  5. Refine the payload to inject security-relevant headers, manipulate routing, poison cache entries, or create request parsing ambiguity.
  6. Use the altered downstream interpretation to bypass controls, access unintended resources, or disrupt service behavior.

How to detect it

To determine whether exploitation was attempted or successful, review application access logs, API gateway logs, reverse proxy logs, WAF logs, Netty service logs, outbound HTTP client logs, and downstream server logs for CRLF sequences in URL-like inputs or unexpected injected headers. Focus on parameters and endpoints that accept URLs, redirect destinations, webhook targets, proxy targets, callback URLs, fetch/import locations, or path/query values later used in outbound HTTP requests. Look for encoded CRLF strings such as %0d%0a, double-encoded variants such as %250d%250a, or decoded log entries where a single request appears to span multiple lines. On downstream systems, compare received headers against what the upstream application normally sends; suspicious signs include attacker-controlled Host, X-Forwarded-Host, X-Original-URL, X-Rewrite-URL, Content-Length, Transfer-Encoding, Connection, or cache-related headers. Investigate malformed HTTP parser errors, request smuggling alerts, duplicate or conflicting Content-Length and Transfer-Encoding headers, unexpected cache hits, anomalous 400/502 responses, and mismatched request counts between front-end and back-end proxies. If full packet capture or HTTP telemetry is available, inspect raw outbound requests from Netty-based services for literal CRLF bytes inside the request target followed by header-like text.

  • %0d%0a
  • %0D%0A
  • %250d%250a
  • %250D%250A
  • \r\nHost:
  • \r\nX-Forwarded-Host:
  • \r\nX-Original-URL:
  • \r\nX-Rewrite-URL:
  • \r\nContent-Length:
  • \r\nTransfer-Encoding:
  • \r\nConnection:
  • %0d%0aHost:
  • %0d%0aX-Forwarded-Host:
  • %0d%0aX-Original-URL:
  • %0d%0aX-Rewrite-URL:
  • %0d%0aContent-Length:
  • %0d%0aTransfer-Encoding:
  • %0d%0aConnection:
  • %0D%0AHost:
  • %0D%0AX-Forwarded-Host:
  • %0D%0AContent-Length:
  • %0D%0ATransfer-Encoding:
  • Transfer-Encoding: chunked
  • Content-Length: 0

What your security team should do

  • Inventory all applications and third-party products that embed Netty, including transitive dependencies and shaded JARs.
  • Prioritize patching internet-facing gateways, proxies, webhook processors, URL fetchers, redirect handlers, SSRF-sensitive services, and any component that builds outbound HTTP requests from untrusted input.
  • Upgrade to a Netty build containing commit e2d9d11c67f418c3d1e76b77dd7b93de36e47787 or a later official fixed release, then rebuild and redeploy affected services.
  • Add input validation that rejects CR, LF, NUL, and other control characters in URL, path, query, and request-target fields.
  • Search historical logs for encoded and decoded CRLF injection attempts, especially requests containing %0d%0a followed by HTTP header names.
  • Add SIEM detections for CRLF sequences in URL-like parameters, proxy target parameters, webhook URLs, redirect URLs, and outbound request construction errors.
  • Review downstream proxies, caches, and load balancers for protections against request smuggling, duplicate Content-Length, and conflicting Content-Length/Transfer-Encoding behavior.
  • Because there is no supplied KEV status, ransomware linkage, or known exploit maturity, handle as moderate urgency globally but elevate to high urgency where user-controlled outbound request generation is present.

The record

Netty has a CRLF Injection vulnerability in io.netty.handler.codec.http.HttpRequestEncoder

Affected packages

Ecosystem Package Introduced Fixed
Maven io.netty:netty-codec-http 0 4.1.129.Final
Maven io.netty:netty-codec-http 4.2.0.Alpha1 4.2.8.Final
Chainguard akhq 0 0.26.0-r4
Chainguard apache-activemq-artemis 0 2.44.0-r1
Chainguard apache-activemq-artemis-compat 0 2.44.0-r1
Chainguard apache-hop 0 2.16.0-r1
Chainguard apache-hop-fips 0 2.16.0-r1
Chainguard apache-nifi 0 2.7.2-r0
Chainguard apache-nifi-compat 0 2.7.2-r0
Chainguard apache-nifi-registry 0 2.7.2-r0
Chainguard apache-nifi-registry-toolkit 0 2.7.2-r0
Chainguard apache-nifi-toolkit 0 2.7.2-r0
Chainguard apache-pulsar 0 4.1.2-r1
Chainguard apache-pulsar-compat 0 4.1.2-r1
Chainguard apicurio-registry 0 3.1.4-r3
Chainguard camunda-zeebe-8.3 0 8.3.22-r10
Chainguard camunda-zeebe-8.3-compat 0 8.3.22-r10
Chainguard camunda-zeebe-8.4 0 8.4.21-r9
Chainguard camunda-zeebe-8.4-compat 0 8.4.21-r9
Chainguard camunda-zeebe-8.5 0 8.5.25-r2
Chainguard camunda-zeebe-8.5-compat 0 8.5.25-r2
Chainguard camunda-zeebe-8.6 0 8.6.34-r1
Chainguard camunda-zeebe-8.6-compat 0 8.6.34-r1
Chainguard camunda-zeebe-8.7 0 8.7.21-r1
Chainguard camunda-zeebe-8.7-compat 0 8.7.21-r1
Chainguard camunda-zeebe-8.8 0 8.8.8-r1
Chainguard camunda-zeebe-8.8-compat 0 8.8.8-r1
Chainguard celeborn-0.5 0 0.5.4-r13
Chainguard celeborn-0.5-compat 0 0.5.4-r13
Chainguard celeborn-0.6 0 0.6.2-r3
Chainguard celeborn-0.6-compat 0 0.6.2-r3
Chainguard docker-selenium-base 0 4.39.0.20251202-r1
Chainguard druid 0 35.0.1-r1
Chainguard elasticsearch-7 0 7.17.29-r6
Chainguard elasticsearch-7-bitnami 0 7.17.29-r6
Chainguard elasticsearch-7-iamguarded 0 7.17.29-r6
Chainguard elasticsearch-8.17 0 8.17.10-r15
Chainguard elasticsearch-8.17-bitnami 0 8.17.10-r15
Chainguard elasticsearch-8.17-config 0 8.17.10-r15
Chainguard elasticsearch-8.18 0 8.18.8-r2
Chainguard elasticsearch-8.18-bitnami 0 8.18.8-r2
Chainguard elasticsearch-8.18-config 0 8.18.8-r2
Chainguard elasticsearch-8.18-iamguarded 0 8.18.8-r2
Chainguard elasticsearch-8.19 0 8.19.8-r1
Chainguard elasticsearch-8.19-bitnami 0 8.19.8-r1
Chainguard elasticsearch-8.19-config 0 8.19.8-r1
Chainguard elasticsearch-8.19-iamguarded 0 8.19.8-r1
Chainguard elasticsearch-9.0 0 9.0.8-r2
Chainguard elasticsearch-9.0-bitnami 0 9.0.8-r2
Chainguard elasticsearch-9.0-config 0 9.0.8-r2
Chainguard elasticsearch-9.0-iamguarded 0 9.0.8-r2
Chainguard elasticsearch-9.1 0 9.1.8-r1
Chainguard elasticsearch-9.1-bitnami 0 9.1.8-r1
Chainguard elasticsearch-9.1-config 0 9.1.8-r1
Chainguard elasticsearch-9.1-iamguarded 0 9.1.8-r1
Chainguard elasticsearch-9.2 0 9.2.2-r1
Chainguard elasticsearch-9.2-config 0 9.2.2-r1
Chainguard elasticsearch-9.2-iamguarded 0 9.2.2-r1
Chainguard elasticsearch-fips-8.17 0 8.17.10-r3
Chainguard elasticsearch-fips-8.17-bitnami 0 8.17.10-r3
Chainguard elasticsearch-fips-8.17-config 0 8.17.10-r3
Chainguard elasticsearch-fips-8.18 0 8.18.8-r3
Chainguard elasticsearch-fips-8.18-bitnami 0 8.18.8-r3
Chainguard elasticsearch-fips-8.18-config 0 8.18.8-r3
Chainguard elasticsearch-fips-8.19 0 8.19.8-r2
Chainguard elasticsearch-fips-8.19-bitnami 0 8.19.8-r2
Chainguard elasticsearch-fips-8.19-config 0 8.19.8-r2
Chainguard elasticsearch-fips-9.0 0 9.0.8-r2
Chainguard elasticsearch-fips-9.0-bitnami 0 9.0.8-r2
Chainguard elasticsearch-fips-9.0-config 0 9.0.8-r2
Chainguard elasticsearch-fips-9.1 0 9.1.8-r2
Chainguard elasticsearch-fips-9.1-bitnami 0 9.1.8-r2
Chainguard elasticsearch-fips-9.1-config 0 9.1.8-r2
Chainguard elasticsearch-fips-9.2 0 9.2.2-r2
Chainguard elasticsearch-fips-9.2-config 0 9.2.2-r2
Chainguard flyway 0 11.19.0-r1
Chainguard grpc-java-fips-1.56.0 0 1.56.0-r3
Chainguard infinispan-15.0 0 15.0.21-r2
Chainguard infinispan-15.0-compat 0 15.0.21-r2
Chainguard infinispan-15.0-images 0 15.0.21-r2
Chainguard infinispan-15.1 0 15.1.7-r4
Chainguard infinispan-15.1-compat 0 15.1.7-r4
Chainguard infinispan-15.1-images 0 15.1.7-r4
Chainguard infinispan-15.2 0 15.2.6-r2
Chainguard infinispan-15.2-compat 0 15.2.6-r2
Chainguard infinispan-15.2-images 0 15.2.6-r2
Chainguard kafbat-ui 0 1.4.2-r1
Chainguard kafbat-ui-compat 0 1.4.2-r1
Chainguard kafka-bridge 0 0.33.1-r6
Chainguard kafka-bridge-fips 0 0.33.1-r1
Chainguard kafka-strimzi-compat 0 0.49.1-r0
Chainguard kafka_exporter-strimzi-compat 0 0.49.1-r0
Chainguard kayenta-2025.0 0 2025.0.8-r4
Chainguard kayenta-2025.1 0 2025.1.6-r1
Chainguard kayenta-2025.2 0 2025.2.3-r1
Chainguard kayenta-fips-2025.0 0 2025.0.8-r4
Chainguard kayenta-fips-2025.1 0 2025.1.6-r1
Chainguard kayenta-fips-2025.2 0 2025.2.3-r1
Chainguard keycloak-26.2 0 26.2.5-r8
Chainguard keycloak-26.2-bitnami-compat 0 26.2.5-r8
Chainguard keycloak-26.2-compat 0 26.2.5-r8
Chainguard keycloak-26.2-iamguarded-compat 0 26.2.5-r8
Chainguard keycloak-26.3 0 26.3.5-r5
Chainguard keycloak-26.3-bitnami-compat 0 26.3.5-r5
Chainguard keycloak-26.3-compat 0 26.3.5-r5
Chainguard keycloak-26.3-iamguarded-compat 0 26.3.5-r5
Chainguard keycloak-26.4 0 26.4.7-r1
Chainguard keycloak-26.4-compat 0 26.4.7-r1
Chainguard keycloak-26.4-iamguarded-compat 0 26.4.7-r1
Chainguard keycloak-26.4-operator 0 26.4.7-r1
Chainguard keycloak-26.4-operator-compat 0 26.4.7-r1
Chainguard keycloak-fips-26.2 0 26.2.5-r10
Chainguard keycloak-fips-26.2-bitnami-fips 0 26.2.5-r10
Chainguard keycloak-fips-26.2-iamguarded-fips 0 26.2.5-r10
Chainguard keycloak-fips-26.3 0 26.3.5-r6
Chainguard keycloak-fips-26.3-bitnami-fips 0 26.3.5-r6
Chainguard keycloak-fips-26.3-iamguarded-fips 0 26.3.5-r6
Chainguard keycloak-fips-26.3-operator 0 26.3.5-r6
Chainguard keycloak-fips-26.3-operator-compat 0 26.3.5-r6
Chainguard keycloak-fips-26.4 0 26.4.7-r13
Chainguard keycloak-fips-26.4-iamguarded-fips 0 26.4.7-r13
Chainguard keycloak-fips-26.4-operator 0 26.4.7-r13
Chainguard keycloak-fips-26.4-operator-compat 0 26.4.7-r13
Chainguard knative-kafka-broker-1.17-dispatcher-loom 0 1.17.3-r11
Chainguard knative-kafka-broker-1.17-receiver-loom 0 1.17.3-r11
Chainguard knative-kafka-broker-1.18-dispatcher-loom 0 1.18.2-r4
Chainguard knative-kafka-broker-1.18-receiver-loom 0 1.18.2-r4
Chainguard knative-kafka-broker-1.19-dispatcher-loom 0 1.19.11-r4
Chainguard knative-kafka-broker-1.19-receiver-loom 0 1.19.11-r3
Chainguard knative-kafka-broker-1.20-dispatcher-loom 0 1.20.2-r4
Chainguard knative-kafka-broker-1.20-receiver-loom 0 1.20.2-r4
Chainguard knative-kafka-broker-1.21-dispatcher-loom 0 1.21.1-r4
Chainguard knative-kafka-broker-1.21-receiver-loom 0 1.21.1-r4
Chainguard kserve-modelmesh 0 0.12.0-r19
Chainguard kserve-modelmesh-compat 0 0.12.0-r19
Chainguard localstack-compat 0 4.12.0-r0
Chainguard logstash-8.17 0 8.17.10-r6
Chainguard logstash-8.17-bitnami-compat 0 8.17.10-r6
Chainguard logstash-8.17-compat 0 8.17.10-r6
Chainguard logstash-8.17-env2yaml 0 8.17.10-r6
Chainguard logstash-8.17-iamguarded-compat 0 8.17.10-r6
Chainguard logstash-8.17-with-output-opensearch 0 8.17.10-r6
Chainguard logstash-8.18 0 8.18.8-r4
Chainguard logstash-8.18-bitnami-compat 0 8.18.8-r4
Chainguard logstash-8.18-compat 0 8.18.8-r4
Chainguard logstash-8.18-env2yaml 0 8.18.8-r4
Chainguard logstash-8.18-iamguarded-compat 0 8.18.8-r4
Chainguard logstash-8.18-with-output-opensearch 0 8.18.8-r4
Chainguard logstash-8.19 0 8.19.8-r2
Chainguard logstash-8.19-compat 0 8.19.8-r2
Chainguard logstash-8.19-env2yaml 0 8.19.8-r2
Chainguard logstash-8.19-iamguarded-compat 0 8.19.8-r2
Chainguard logstash-8.19-with-output-opensearch 0 8.19.8-r2
Chainguard logstash-9.0 0 9.0.8-r5
Chainguard logstash-9.0-bitnami-compat 0 9.0.8-r5
Chainguard logstash-9.0-compat 0 9.0.8-r5
Chainguard logstash-9.0-env2yaml 0 9.0.8-r5
Chainguard logstash-9.0-iamguarded-compat 0 9.0.8-r5
Chainguard logstash-9.0-with-output-opensearch 0 9.0.8-r5
Chainguard logstash-9.1 0 9.1.8-r1
Chainguard logstash-9.1-bitnami-compat 0 9.1.8-r1
Chainguard logstash-9.1-compat 0 9.1.8-r1
Chainguard logstash-9.1-env2yaml 0 9.1.8-r1
Chainguard logstash-9.1-iamguarded-compat 0 9.1.8-r1
Chainguard logstash-9.1-with-output-opensearch 0 9.1.8-r1
Chainguard logstash-9.2 0 9.2.2-r1
Chainguard logstash-9.2-bitnami-compat 0 9.2.2-r1
Chainguard logstash-9.2-compat 0 9.2.2-r1
Chainguard logstash-9.2-env2yaml 0 9.2.2-r1
Chainguard logstash-9.2-iamguarded-compat 0 9.2.2-r1
Chainguard logstash-9.2-with-output-opensearch 0 9.2.2-r1
Chainguard logstash-input-http 0 3.10.4-r0
Chainguard management-api-for-apache-cassandra-4.0 0 0.1.111-r1
Chainguard management-api-for-apache-cassandra-4.0-compat 0 0.1.111-r1
Chainguard management-api-for-apache-cassandra-4.1 0 0.1.111-r1
Chainguard management-api-for-apache-cassandra-4.1-compat 0 0.1.111-r1
Chainguard management-api-for-apache-cassandra-5.0 0 0.1.111-r1
Chainguard management-api-for-apache-cassandra-5.0-compat 0 0.1.111-r1
Chainguard neo4j-2025.05 0 2025.05.1-r10
Chainguard neo4j-2025.06 0 2025.06.2-r10
Chainguard neo4j-2025.07 0 2025.07.1-r9
Chainguard neo4j-2025.08 0 2025.08.0-r7
Chainguard neo4j-2025.09 0 2025.09.0-r4
Chainguard neo4j-2025.09-browser 0 2025.09.0-r4
Chainguard neo4j-2025.09-docker-publish 0 2025.09.0-r4
Chainguard neo4j-2025.10 0 2025.10.1-r2
Chainguard neo4j-2025.10-browser 0 2025.10.1-r2
Chainguard neo4j-2025.10-docker-publish 0 2025.10.1-r2
Chainguard neo4j-4.4 0 4.4.46-r3
Chainguard neo4j-4.4-docker-publish 0 4.4.46-r3
Chainguard neo4j-5.26 0 5.26.18-r1
Chainguard neo4j-5.26-docker-publish 0 5.26.18-r1
Chainguard neo4j-5.26-oci-entrypoint 0 5.26.18-r1
Chainguard opensearch-2 0 2.19.4-r3
Chainguard opensearch-2-alerting 0 2.19.4-r3
Chainguard opensearch-2-analysis-icu 0 2.19.4-r3
Chainguard opensearch-2-analysis-kuromoji 0 2.19.4-r3
Chainguard opensearch-2-analysis-nori 0 2.19.4-r3
Chainguard opensearch-2-analysis-phonetic 0 2.19.4-r3
Chainguard opensearch-2-analysis-smartcn 0 2.19.4-r3

Related vulnerabilities