Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach ReactPHP HTTP endpoint or lure Browser client to hostile server
-
DeliverySend malformed chunked body (incomplete trailer or two non-CRLF bytes)
-
ExploitChunkedDecoder buffer fails to shrink, enters infinite loop
-
ExecutionEvent loop pins CPU, process stops responding
-
ImpactDenial of service to all clients
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Loop termination conditions
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 | No special configuration is required - remote unauthenticated exploitation works against default configurations of any service using React\Http\HttpServer (inbound request bodies) or any client using React\Http\Browser (outbound response bodies) on affected versions 0.6.0 through 1.11.0. The only precondition is that the affected code path processes a Transfer-Encoding: chunked body, which is standard HTTP handling. Limiting factors: for the server direction, a reverse proxy that normalizes/re-encodes inbound chunked requests will neutralize the attack - but this protection does NOT extend to the Browser client direction, where a malicious or compromised upstream server can freeze the client regardless of any inbound proxy. Because ReactPHP is single-threaded and event-loop driven, one looping request halts the entire process, amplifying impact. |
| Impact | This is a genuine availability-only issue whose real-world risk is moderate and context-dependent, not a hollow high-CVSS number. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5) is well-calibrated for CWE-835: a remote, unauthenticated actor sends a trivially malformed chunked body and the ChunkedDecoder spins in an infinite loop, consuming 100% CPU and freezing the affected process (C:N/I:N confirm no data exposure or tampering - pure DoS). No SSVC decision data, EPSS score, KEV listing, or weaponized POC is present in the input, so there is no evidence of active or automated exploitation at this time - this remains a patch-priority-by-severity item, not an emergency. The bidirectional nature raises risk versus a typical server-only DoS: the same decoder handles inbound request bodies for React\Http\HttpServer AND outbound response bodies for React\Http\Browser, so a malicious client can freeze the server and, critically, a malicious/compromised upstream server can freeze the client - and the advisory explicitly notes a normalizing reverse proxy protects only the server direction, leaving Browser (outbound) requests exposed. Confidence in the mechanism is high because the fix commit and its regression tests spell out the exact triggering inputs. |
| Exploit ScenarioDerived | A malicious client (or, for the Browser client, a malicious/compromised upstream server) sends a chunked HTTP body ending in an incomplete terminal-chunk trailer such as "0\r\nab" with no terminating CRLF, or a completed chunk followed by exactly two non-CRLF bytes like "2\r\nabXY". The buffer stops shrinking, handleData loops forever, and the single-threaded ReactPHP event loop pins a CPU core and stops serving all other connections. No public weaponized exploit is identified, but the fix commit's regression tests document the exact trigger strings, making reproduction trivial. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Remote, unauthenticated denial of service affects react/http versions 0.6.0 through 1.11.0, where a malformed Transfer-Encoding: chunked body can trap React\Http\Io\ChunkedDecoder in a non-terminating loop; because ReactPHP is single-threaded and event-loop driven, one looping body halts the entire process rather than a single request. The decoder is used for inbound request bodies in React\Http\HttpServer and outbound response bodies in React\Http\Browser, so a malicious client can freeze a server and a malicious or compromised upstream server can freeze a client. No public exploit identified at time of analysis; a vendor-released patch exists in version 1.11.1.
RemediationAI
Upgrade to reactphp/http 1.11.1 or later, for example via "composer require react/http:^1.11.1" (or "composer update react/http" with an appropriate constraint), which incorporates the decoder hardening in commit b6d4688790adf3797071fcf88a3fc4225f30486a; see the vendor advisory at https://github.com/reactphp/http/security/advisories/GHSA-x424-64qh-5j54 and the release at https://github.com/reactphp/http/releases/tag/v1.11.1. For environments that cannot upgrade immediately, the most effective compensating control for the server direction is placing a reverse proxy or load balancer in front of the ReactPHP service that consumes and re-encodes or de-chunks inbound requests, so malformed chunked framing never reaches the application - but note this provides no protection for outbound React\Http\Browser traffic, where a malicious or compromised upstream server can still freeze the client. For the Browser direction, restrict outbound requests to trusted hosts, or route them through a normalizing forward proxy, accepting the added latency and configuration complexity. Be aware that per-request, idle, or execution-time timeouts are weak mitigations here: the decoder spins inside a single synchronous parsing call and generally never returns control to the event loop, so timer callbacks may not fire at all. Running each HTTP endpoint or client worker in its own process under a supervisor with liveness checks and automatic restart limits blast radius and turns an indefinite hang into a bounded outage, at the cost of extra operational overhead and possible request loss on restart.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The defect is a CWE-835 (Loop with Unreachable Exit Condition) in ReactPHP's HTTP chunked-transfer decoder. Transfer-Encoding: chunked frames a body as size-prefixed chunks terminated by a final zero-length chunk and an optional trailer ending in CRLF; ChunkedDecoder::handleData() parses that framing incrementally as data arrives and assumed its internal buffer would shrink on every parse iteration. Two malformed inputs violate that assumption: an incomplete terminal-chunk trailer whose CRLF has not yet arrived, where strpos() returns false and the buffer is left unchanged, and a completed non-terminal chunk followed by exactly two bytes that are not CRLF, a case that slipped past both the error guard and the wait guard because the guard compared buffer length with a strict greater-than against 2. The upstream fix (commit b6d4688790adf3797071fcf88a3fc4225f30486a) adds an early return when the CRLF position is false and relaxes the strict comparison so exactly two non-CRLF bytes are reported as an invalid chunk terminator instead of being re-processed forever. The affected package is identified by CPE cpe:2.3:a:reactphp:http across all versions, with the vulnerable range being 0.6.0 up to and including 1.11.0; the underlying exposure class spans both the streaming server stack (HttpServer request body handling) and the streaming client stack (Browser response body handling), which is why an inbound normalizing proxy mitigates only one direction.
Know when Http 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
Remote unauthenticated attacker sends a trivial malformed chunked body over the network (AV:N/AC:L/PR:N/UI:N); pure infinite-loop DoS freezes the process with no confidentiality or integrity impact (A:H only).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
react/http is an event-driven, streaming HTTP client and server implementation for ReactPHP. From 0.6.0 until 1.11.1, React\Http\Io\ChunkedDecoder could enter an infinite loop while processing a malformed Transfer-Encoding: chunked body because handleData required its buffer to shrink on every iteration. An incomplete terminal-chunk trailer without CRLF left the buffer unchanged after strpos returned false, and exactly two non-CRLF bytes after a completed non-terminal chunk bypassed both the error and wait guards. The affected decoder processes request bodies for React\Http\HttpServer and response bodies for React\Http\Browser, allowing a malicious client to freeze a server or a malicious or compromised server to freeze a client. A reverse proxy that normalizes inbound requests may protect the server direction but does not protect outbound Browser requests. This issue is fixed in version 1.11.1.
Technical POC Analysis
CWE-835 (Loop with Unreachable Exit Condition).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 PoC candidate from github (unverified)
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
A denial-of-service flaw in the ReactPHP react/http library (versions 0.6.0 through 1.11.0) lets a single malformed chunked request body stall the event loop indefinitely, freezing the entire application process rather than a single request. Because the same decoder handles inbound request bodies for ReactPHP-based servers and outbound response bodies for ReactPHP-based HTTP clients, any team running these components on public-facing or upstream-facing paths is exposed to full service outages that require a manual restart. No public exploit identified at time of analysis, but leadership should treat this as an availability risk to production services built on this widely embedded library.
Apply vendor patch: upgrade react/http to 1.11.1. Where patching must be scheduled, interim mitigations include enforcing strict Transfer-Encoding and request-body size validation at a fronting reverse proxy or API gateway, rejecting malformed or oversized chunked bodies before they reach the decoder, restricting outbound HTTP client targets to trusted allow-listed upstreams, and running supervised processes with health checks that automatically restart a stalled event loop to shorten outage duration.
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.
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
An issue was discovered in the http crate before 0.1.20 for Rust. Rated high severity (CVSS 7.5), this vulnerability is
HTTP::Daemon is a simple http server class written in perl. Rated medium severity (CVSS 6.5), this vulnerability is remo
An issue was discovered in the http package through 0.12.2 for Dart. Rated medium severity (CVSS 6.1), this vulnerabilit
HTTP::Session versions through 0.53 for Perl defaults to using insecurely generated session ids.
HTTP::Tiny before 0.083, a Perl core module since 5.13.9 and available standalone on CPAN, has an insecure default TLS c
Unbounded response-header buffering in ReactPHP's HTTP client (react/http) versions 1.0.0 through 1.11.0 allows a malici
Credential leakage in the Perl HTTP::Tiny client (all versions before 0.095) lets an attacker who controls a redirect de
HTTP::Tiny versions before 0.093 for Perl fail to validate carriage return and line feed (CRLF) characters in HTTP reque
HTTP::Session2 versions through 1.09 for Perl does not validate the format of user provided session ids, enabling code i
HTTP::Session2 before version 1.12 for Perl generates predictable session identifiers on Windows systems when /dev/urand
react/http is an event-driven, streaming HTTP client and server implementation for ReactPHP. Rated medium severity (CVSS
EUVD-2026-80779
GHSA-x424-64qh-5j54
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB