mediumCVSS 6.5Vulnerability

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)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]pip/sanic

AFFECTS (1)

[Software]pip/sanic

HAS_WEAKNESS (1)

[Weakness]Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-85078 (CVSS 6.5) — Ninja Signal Threat Intelligence | Ninja Signal