highCVSS 7.5Vulnerability

CVE-2026-84997

### Summary A malformed HTTP message using `Transfer-Encoding: chunked` can drive `React\Http\Io\ChunkedDecoder` into an infinite loop, pegging a CPU core and freezing the event loop. Because ReactPHP is single-threaded, one such message stalls the entire process for every client until it is killed. Both directions are affected. `ChunkedDecoder` decodes chunked **request** bodies for `React\Http\HttpServer` and chunked **response** bodies for `React\Http\Browser`, so a server can be attacked by a malicious client and a client can be attacked by a malicious or compromised server. ### Details `ChunkedDecoder::handleData()` loops `while ($this->buffer !== '')` and relies on the buffer shrinking each iteration. Two states leave the buffer unchanged while the loop condition stays true. **Terminal-chunk trailer.** After the terminating `0` chunk, any remaining buffer is treated as trailer data to skip: ```php } elseif ($this->chunkSize === 0) { $this->buffer = (string)\substr($this->buffer, $positionCrlf); } ``` When the trailer holds no CRLF yet, `strpos()` returns `false`, PHP coerces that to `0` in `substr()`, and the buffer is never advanced. Neither the error guard (which requires a non-zero chunk size) nor the wait guard (which requires fewer than two bytes remaining) can fire, so the loop re-enters with identical state. **Off-by-one after a completed chunk.** Once a non-terminal chunk has been fully transferred, the "chunk does not end with a CRLF" error guard requires `strlen($this->buffer) > 2` while the wait guard requires `< 2`. Exactly two non-CRLF bytes slip past both, and because the chunk is already complete nothing is consumed on the next iteration. ### PoC Run the example server from the `reactphp/reactphp` README and send a malformed request. Note the missing trailing `\r\n`: ``` POST / HTTP/1.1\r\nHost: x\r\nTransfer-Encoding: chunked\r\n\r\n0\r\nab ``` The PHP process pegs at 100% CPU and stops answering legitimate requests. A body of `

Properties

ghsa_id
GHSA-x424-64qh-5j54
severity
high
summary
react/http: A malformed HTTP chunked body can lead to a denial-of-service and peg the CPU
cvss_score
7.5
cve_id
CVE-2026-84997
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
signal_observed_at
2026-09-17T21:32:39+00:00
is_ghsa_only
false
ghsa_published
2026-09-17T20:32:39Z
source_url
https://github.com/advisories/GHSA-x424-64qh-5j54
ghsa_updated
2026-09-17T20:32:40Z

Related Entities (4)

VULNERABLE_TO (1)

[Software]composer/react/http

AFFECTS (1)

[Software]composer/react/http

HAS_WEAKNESS (1)

[Weakness]Loop with Unreachable Exit Condition ('Infinite Loop')

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-84997 (CVSS 7.5) — Ninja Signal Threat Intelligence | Ninja Signal