HIGHCVSS v3.1 7.5Vulnerability

CVE-2026-104827

### Summary `React\Http\Browser` and its lower-level HTTP stack impose no limit on the size of a response's header section while it is being received. `ClientRequestStream::handleData()` appends every incoming byte to an internal buffer and only scans that buffer for the `\r\n\r\n` (or `\n\n`) terminator, without ever checking its length. A remote server that withholds the terminator and keeps streaming can grow the client's memory without bound until PHP's `memory_limit` is exhausted and the process crashes. This is an unauthenticated, network-reachable denial of service against any application that uses `react/http` as a client to fetch untrusted or attacker-influenced URLs, including via redirects. ### Details `ClientRequestStream::handleData()` is bound directly to the underlying connection's `data` event, so every byte the peer sends is appended with no size check: ```php public function handleData($data) { $this->buffer .= $data; // buffer until double CRLF (or double LF for compatibility with legacy servers) $eom = \strpos($this->buffer, "\r\n\r\n"); $eomLegacy = \strpos($this->buffer, "\n\n"); if ($eom !== false || $eomLegacy !== false) { ``` The only exit from the buffering state is finding the header terminator or a connection close, so until it arrives the buffer grows monotonically for as long as the peer keeps sending. The codebase already applies this class of limit elsewhere, but not symmetrically. `RequestHeaderParser` caps incoming **request** headers when acting as a server, and `Transaction::bufferResponse()` caps the response **body**, but only once the header section has already been parsed into a `Response`. Response header reception was the one stage with no limit at all. ### PoC An HTTP server that sends a valid status line and a partial header, then streams indefinitely without ever terminating the header section: ```bash php -r '$s=stream_socket_server("tcp://127.0.0.1:18080"); $c=stream_socket_accept($s); fre

Properties

Summary
react/http: Unbounded HTTP Client Response Header Buffering Leads to Memory Exhaustion DoS
Severity
high
Nvd fetched at
2026-10-20T21:14:08.448323+00:00
Epss score
0.00426
Cvss score
7.5
Cvss severity
HIGH
Retrieved at
2026-10-21T01:24:48+00:00
Ghsa published
2026-10-15T20:09:56Z
Source url
https://github.com/advisories/GHSA-g4f2-2pf3-2pwj
Ghsa updated
2026-10-15T20:09:58Z
Ghsa id
GHSA-g4f2-2pf3-2pwj
Last source
FIRST EPSS
Score
7.5
Cvss version
3.1
Cve id
CVE-2026-104827
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
First seen by Signal
2026-10-15T22:56:51+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Published at
2026-10-15T19:17:14.933

Related Entities (3)

AFFECTS (1)

→[Software]composer/react/http

VULNERABLE_TO (1)

←[Software]composer/react/http

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-104827 (CVSS v3.1 7.5) — Ninja Signal Threat Intelligence | Ninja Signal