netty-incubator-codec-bhttp CVE-2026-63124
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify BHTTP/OHTTP Netty endpoint
-
DeliveryCraft four-byte known-length field section
-
ExploitDeliver crafted BHTTP request over network
-
InstallreadFieldLine() returns null without consuming bytes
-
C2while loop subtracts zero indefinitely
-
ExecuteNetty event-loop thread pinned
-
ImpactAvailability denied for all co-scheduled channels
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The target must be running a Netty pipeline that processes Binary HTTP (RFC 9292) messages using BinaryHttpParser or BinaryHttpDecoder from io.netty.incubator:netty-incubator-codec-bhttp version 0.0.22.Final or earlier, with JVM assertions disabled (the production default, as assertions are not activated by -ea in standard server deployments). No authentication is required per CVSS PR:N - any network peer that can deliver BHTTP bytes to the endpoint can trigger the hang. A second exploitation path exists when the application uses the OHTTP stack: any peer with a valid OHTTP key and the ability to send encrypted OHTTP messages can trigger the inner BHTTP parser hang after successful decryption, meaning authentication at the OHTTP envelope level does not prevent exploitation. The limiting factor is that the application must specifically have opted into Binary HTTP or OHTTP processing, which is not a default Netty configuration and represents a narrow deployment set. |
| Impact | The CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H scores 7.5 and accurately reflects the threat model: the trigger payload is a structurally valid BHTTP message requiring no privileges, no user interaction, and only low attack complexity because the boundary condition is deterministic and reproducible with a four-byte field section. A publicly available proof-of-concept is included in the GitHub advisory (GHSA-8cfx-wx3q-mh5q), which significantly lowers the bar for exploitation; any operator running this library should treat that PoC as equivalent to a weaponizable script. No EPSS score was provided in the source data, so exploitation probability cannot be quantified from that signal; however, the combination of a network-accessible vector, no authentication requirement, and a published PoC places this in a category that warrants urgent patching regardless of EPSS. The vulnerability is not listed in the CISA KEV catalog at time of analysis, so confirmed active exploitation in the wild is not established. The Netty event-loop threading model amplifies the impact: a single pinned I/O thread degrades availability for all channels multiplexed on that loop, not just the attacking connection. The OHTTP secondary path is notable because it implies that even endpoints that validate outer OHTTP tokens before passing decrypted content to the inner BHTTP parser remain vulnerable to authenticated-but-malicious peers. The scope is limited by the library's current deployment footprint, which is niche. |
| Exploit ScenarioDerived | An attacker sends a minimal valid Binary HTTP request to any Netty endpoint that passes input through BinaryHttpParser or BinaryHttpDecoder - for example, a four-byte known-length field section encoding a single header 'a: b'. Because a public proof-of-concept exists in the advisory, constructing this payload requires no specialized knowledge. The parser thread enters an infinite loop, permanently occupying the Netty event-loop worker responsible for that channel and degrading or eliminating service for all other connections sharing that event loop. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 20, 2026
Infinite parse loop in netty-incubator-codec-bhttp's BinaryHttpParser allows any remote peer capable of sending Binary HTTP input to permanently pin a Netty event-loop thread, causing denial of service. The flaw exists in versions up to and including 0.0.22.Final and is triggered by a structurally valid known-length field section whose last field line ends exactly at the declared section boundary - no malformed framing is required. A public proof-of-concept is included in the GHSA advisory, and the condition is also reachable through the OHTTP inner parser after successful decryption, meaning authenticated OHTTP peers are a second exploitation path.
RemediationAI
The primary fix is to upgrade to io.netty.incubator:netty-incubator-codec-bhttp version 0.0.23.Final, released at https://github.com/netty/netty-incubator-codec-ohttp/releases/tag/netty-incubator-codec-parent-ohttp-0.0.23.Final. This version addresses the boundary condition in readFieldLine() so that a complete field line ending exactly at the known field-section boundary is accepted rather than causing the parser to stall. If an immediate upgrade is not possible, enabling JVM assertions (-ea flag) will cause the assert read > 0 guard at BinaryHttpParser.java:622 to throw an AssertionError and terminate the loop - this prevents the infinite loop but will crash the Netty channel handling that connection, which may itself be disruptive in high-throughput environments. A network-layer workaround of blocking or rate-limiting BHTTP/OHTTP traffic upstream is possible but has significant trade-offs since it disables the legitimate functionality the library provides. The vendor's suggested code-level remediation (treating readFieldLine() returning null as incomplete input and adding a no-progress runtime guard) is the correct long-term fix and is implemented in 0.0.23.Final.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in maven
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Binary HTTP (RFC 9292) is a binary framing format for HTTP messages. The affected library, io.netty.incubator:netty-incubator-codec-bhttp (CPE: pkg:maven/io.netty.incubator:netty-incubator-codec-bhttp), is an incubator module for the Netty async networking framework. The parser class BinaryHttpParser.java reads known-length field sections in a while loop (line 619) that decrements a fieldSectionLength counter by the number of bytes consumed per iteration. The inner function readFieldLine() uses the boundary check 'if (sumBytes >= in.readableBytes()) return null' (lines 678-681), which causes it to return null without advancing the buffer read position when the last field line fills the remaining readable slice exactly. The while loop then computes a zero-byte progress delta, which the assert at line 622 would catch - but JVM assertions are disabled by default in production, so the guard is silently skipped and the loop runs indefinitely. CWE-400 (Uncontrolled Resource Consumption) is the root cause class: unbounded CPU time is consumed on a single Netty I/O thread with no timeout or progress guard. The same BinaryHttpParser is invoked by the OHTTP stack after decrypting an outer OHTTP envelope, meaning the attack surface extends to any OHTTP endpoint built on this library.
Know when Java gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Network-reachable parser requiring no authentication; deterministic one-packet trigger; impact is exclusively availability via thread exhaustion with no confidentiality or integrity effect.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
DescriptionGitHub Advisory
Summary
io.netty.incubator:netty-incubator-codec-bhttp can enter a non-terminating parse loop when a known-length Binary HTTP field section ends exactly after a complete field line. A remote peer that can send Binary HTTP input to a Netty pipeline using BinaryHttpParser / BinaryHttpDecoder can use a tiny malformed request or response to keep the parsing thread busy indefinitely, causing denial of service.
Details
In codec-bhttp/src/main/java/io/netty/incubator/codec/bhttp/BinaryHttpParser.java, readFieldSection(...) tracks the remaining field-section length in fieldSectionLength, then repeatedly calls readFieldLine(...) until the length reaches zero:
readFieldSection(...)parses the known-length field section and enterswhile (fieldSectionLength != 0)atBinaryHttpParser.java:619.- Inside the loop, it records
readableBytes, callsreadFieldLine(...), computesread = readableBytes - in.readableBytes(), assertsread > 0, and subtractsreadfromfieldSectionLengthatBinaryHttpParser.java:620-625. readFieldLine(...)returnsnullwithout consuming bytes when the field line ends exactly at the end of the readable slice because it usesif (sumBytes >= in.readableBytes()) return nullafter adding the value length (BinaryHttpParser.java:678-681).- With JVM assertions disabled (the production default),
assert read > 0is not active. The parser therefore subtracts zero forever and never returns.
The boundary condition is reachable with a valid known-length field section containing exactly one complete field line and no extra byte after that line. Example field section: length 4, then name length 1, name a, value length 1, value b.
Proof of concept
Safe local verification performed in this repository:
- Compile the module and classpath:
./mvnw -q -pl codec-bhttp -am compile test-compile
./mvnw -q -pl codec-bhttp dependency:build-classpath -Dmdep.outputFile=/tmp/codec-bhttp-cp.txt
printf '%s' "codec-bhttp/target/classes:$(cat /tmp/codec-bhttp-cp.txt)" > /tmp/codec-bhttp-run-cp.txt- Compile and run this minimal verifier with production-style assertions disabled:
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.incubator.codec.bhttp.BinaryHttpParser;
import io.netty.incubator.codec.bhttp.VarIntCodecUtils;
import java.nio.charset.StandardCharsets;
public final class VerifyBhttpHang {
private static void writeAscii(ByteBuf out, String value) {
VarIntCodecUtils.writeVariableLengthInteger(out, value.length());
out.writeCharSequence(value, StandardCharsets.US_ASCII);
}
public static void main(String[] args) {
ByteBuf buffer = Unpooled.buffer();
VarIntCodecUtils.writeVariableLengthInteger(buffer, 0); // known-length request
writeAscii(buffer, "GET");
writeAscii(buffer, "https");
writeAscii(buffer, "example.com");
writeAscii(buffer, "/");
VarIntCodecUtils.writeVariableLengthInteger(buffer, 4); // field section length
writeAscii(buffer, "a");
writeAscii(buffer, "b");
new BinaryHttpParser(8192).parse(buffer, false);
System.out.println("returned");
}
}Execution result observed locally:
timeout 3 java -cp "/tmp:$(cat /tmp/codec-bhttp-run-cp.txt)" VerifyBhttpHang
exit=124Exit code 124 from timeout confirms the parser did not return within three seconds. When assertions are enabled by Surefire, the same payload fails at BinaryHttpParser.java:622 (assert read > 0), confirming the non-progress condition.
Impact
A peer that can deliver crafted BHTTP bytes can cause the parser to loop forever. In Netty deployments this can pin the event-loop thread or worker responsible for the channel, reducing or eliminating availability for other channels on the same event loop. Through OHTTP, the same parser is used after successful decryption of protected payloads, so authenticated/decryptable OHTTP peers can trigger the same condition in the inner BHTTP parser.
Suggested remediation
- Treat
readFieldLine(...) == nullas incomplete input and returnnullfromreadFieldSection(...)instead of continuing. - Replace boundary checks in
readFieldLine(...)that require an extra byte after a complete field line. A complete field line ending exactly at the known field-section boundary should be accepted. - Add a production runtime guard that throws a controlled decoder exception if a parser loop iteration makes no progress.
- Add regression tests with JVM assertions disabled for known-length header and trailer field sections that end exactly at the field-section boundary.
References
codec-bhttp/src/main/java/io/netty/incubator/codec/bhttp/BinaryHttpParser.java:619-625codec-bhttp/src/main/java/io/netty/incubator/codec/bhttp/BinaryHttpParser.java:678-681- RFC 9292: Binary Representation of HTTP Messages
Blast Radius
ecosystem impact- 1 maven packages depend on io.netty.incubator:netty-incubator-codec-bhttp (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 0.0.23.Final.
Articles & Coverage 2
Executive ViewAI
Netty-incubator-codec-bhttp versions up to 0.0.22.Final contain a denial-of-service vulnerability that allows remote attackers to permanently hang application event-loop threads, disrupting service availability. This unauthenticated vulnerability requires no special privileges and can be triggered by any network peer sending specially crafted Binary HTTP input.
No vendor-released patch identified at time of analysis. Interim mitigations: implement network-level rate limiting and connection timeouts; add Web Application Firewall (WAF) rules to block requests with structurally valid Binary HTTP frames at section boundaries; configure application connection-per-IP limits and parse operation timeouts; segment affected systems from untrusted networks; establish continuous monitoring of GHSA-wfm5-6pj7-mh74 for vendor patch release.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Affected Products (CPE)GitHub Advisory
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
GHSA-8cfx-wx3q-mh5q
NVD
CVE.org
Exploit-DB