CVE-2026-85078
## Description Sanic's HTTP/1.1 chunked-body handling does not fully consume the `trailer-part` after the terminating `0\r\n` chunk. Because of that, attacker-controlled bytes left in the connection buffer after the first chunked request can be interpreted as the start of a new HTTP request on the same keep-alive connection. In the attached verified proof, a single outer `POST /` request that correctly returns `405 Method Not Allowed` is followed, within the same TCP send, by a hidden second request smuggled through the chunked trailer area. Sanic parses and executes that second request as a real independent request. The issue is a request-boundary integrity failure in Sanic's core HTTP/1.1 parser. The verified impact is not speculative. The attached proof shows that one TCP payload produces two server responses: first the expected `405` for the outer `POST /`, then a separate `200 OK` for a hidden `GET /`. A second exploit variant changes the hidden request path and receives a real `404 Not Found`, proving that the hidden second request is not a hard-coded artifact but an actually routed backend request. A control case with a two-character trailer field name shifts the leftover bytes from `GET` to `:GET`, which changes the second response accordingly and confirms that the root cause is incorrect trailer consumption rather than legitimate pipelining. ## Steps To Reproduce 1. Start a Sanic HTTP/1.1 service on a keep-alive connection path. In the verified run, the local target listened on `127.0.0.1:9381` and the root route allowed `GET /` but not `POST /`. 2. From the package root, run the provided PoC: ```bash python3 evidence/vuln_001_chunked_trailer_smuggle.py | tee evidence/vuln_001_chunked_trailer_smuggle.run.txt ``` 3. Review the baseline case in `evidence/vuln_001_chunked_trailer_smuggle.run.txt`. A normal chunked request with `0\r\n\r\n` returns exactly one response block: ```text === CASE: baseline_no_trailer === Received response blocks: 1 HTTP/1.1 4
Properties
- ghsa_id
- GHSA-wmj6-g64g-j7q5
- severity
- medium
- summary
- sanic chunked trailer request smuggling allows hidden second request execution
- cvss_score
- 6.5
- cve_id
- CVE-2026-85078
- cvss_vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
- signal_observed_at
- 2026-09-17T21:32:40+00:00
- is_ghsa_only
- false
- ghsa_published
- 2026-09-17T14:59:16Z
- source_url
- https://github.com/advisories/GHSA-wmj6-g64g-j7q5
- ghsa_updated
- 2026-09-17T14:59:18Z
Related Entities (4)
REPORTED_BY (1)
VULNERABLE_TO (1)
AFFECTS (1)
HAS_WEAKNESS (1)
Explore deeper with Ninja Signal's threat intelligence graph