Skip to main content

ReactPHP HTTP CVE-2026-84997

| EUVDEUVD-2026-80779 HIGH
Loop with Unreachable Exit Condition (Infinite Loop) (CWE-835)
2026-09-16 GitHub_M GHSA-x424-64qh-5j54
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach ReactPHP HTTP endpoint or lure Browser client to hostile server
  2. Delivery
    Send malformed chunked body (incomplete trailer or two non-CRLF bytes)
  3. Exploit
    ChunkedDecoder buffer fails to shrink, enters infinite loop
  4. Execution
    Event loop pins CPU, process stops responding
  5. Impact
    Denial 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 PoC candidate (unverified) Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

http 0.6.0, < 1.11.1

Affected Packages

composer react/http fix: 1.11.1
euvd http_0_6_0 fix: 1.11.1

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

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

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).

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 15:18 EUVD
CVE Published
Sep 16, 2026 - 14:07 cve.org
HIGH 7.5

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.5%
Top 55% exploitable
Prevalence
Medium
widely-used async PHP HTTP library, but niche vs mainstream stacks
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

59
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Http

View all
CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2020-25574 HIGH POC
7.5 Sep 14

An issue was discovered in the http crate before 0.1.20 for Rust. Rated high severity (CVSS 7.5), this vulnerability is

CVE-2022-31081 MEDIUM POC
6.5 Jun 27

HTTP::Daemon is a simple http server class written in perl. Rated medium severity (CVSS 6.5), this vulnerability is remo

CVE-2020-35669 MEDIUM POC
6.1 Dec 24

An issue was discovered in the http package through 0.12.2 for Dart. Rated medium severity (CVSS 6.1), this vulnerabilit

CVE-2026-3256 CRITICAL
9.8 Mar 28

HTTP::Session versions through 0.53 for Perl defaults to using insecurely generated session ids.

CVE-2023-31486 HIGH
8.1 Apr 29

HTTP::Tiny before 0.083, a Perl core module since 5.13.9 and available standalone on CPAN, has an insecure default TLS c

CVE-2026-104827 HIGH
7.5 Oct 15

Unbounded response-header buffering in ReactPHP's HTTP client (react/http) versions 1.0.0 through 1.11.0 allows a malici

CVE-2026-7017 HIGH
7.1 Jul 07

Credential leakage in the Perl HTTP::Tiny client (all versions before 0.095) lets an attacker who controls a redirect de

CVE-2026-7010 MEDIUM
6.5 May 11

HTTP::Tiny versions before 0.093 for Perl fail to validate carriage return and line feed (CRLF) characters in HTTP reque

CVE-2018-25160 MEDIUM
6.5 Feb 27

HTTP::Session2 versions through 1.09 for Perl does not validate the format of user provided session ids, enabling code i

CVE-2026-3255 MEDIUM
6.5 Feb 27

HTTP::Session2 before version 1.12 for Perl generates predictable session identifiers on Windows systems when /dev/urand

CVE-2023-26044 MEDIUM
5.3 May 17

react/http is an event-driven, streaming HTTP client and server implementation for ReactPHP. Rated medium severity (CVSS

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy