Miggo Logo

CVE-2025-53643: AIOHTTP is vulnerable to HTTP Request/Response Smuggling through incorrect parsing of chunked trailer sections

N/A

CVSS Score

Basic Information

EPSS Score
0.14845%
Published
7/14/2025
Updated
7/15/2025
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
-
Package NameEcosystemVulnerable VersionsFirst Patched Version
aiohttppip< 3.12.143.12.14

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability is a classic HTTP request smuggling issue caused by inconsistent parsing of HTTP messages between two entities, in this case, aiohttp and a potential frontend proxy. The root cause is the incorrect handling of chunked encoding trailer sections in the pure Python HTTP parser of aiohttp.

The analysis of the patch e8d774f635dc6d1cd3174d0e38891da5de0e2b6a clearly shows that the logic for handling trailers in aiohttp/http_parser.py was completely rewritten. The vulnerable function is HttpPayloadParser.feed_data, where the chunked encoding parsing logic resides. Before the patch, this function had states to handle trailers (PARSE_MAYBE_TRAILERS, PARSE_TRAILERS) but the implementation was flawed and simply discarded any data in the trailer section. The patch rectifies this by collecting the trailer lines and parsing them as headers using the existing HeadersParser.

During runtime, when a malicious request with a chunked body and a smuggled request in the trailers is received, the HttpPayloadParser.feed_data function would be on the call stack as it processes the body of the request. Therefore, this is the primary function that would appear in a runtime profile when the vulnerability is triggered. The vulnerability only affects the pure Python parser, so it would only be exploitable when the C extensions are not used.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

### Summ*ry T** Pyt*on p*rs*r is vuln*r**l* to * r*qu*st smu**lin* vuln*r**ility *u* to not p*rsin* tr*il*r s**tions o* *n *TTP r*qu*st. ### Imp**t I* * pur* Pyt*on v*rsion o* *io*ttp is inst*ll** (i.*. wit*out t** usu*l * *xt*nsions) or *IO*TTP_NO_

Reasoning

T** vuln*r**ility is * *l*ssi* *TTP r*qu*st smu**lin* issu* **us** *y in*onsist*nt p*rsin* o* *TTP m*ss***s **tw**n two *ntiti*s, in t*is **s*, *io*ttp *n* * pot*nti*l *ront*n* proxy. T** root **us* is t** in*orr**t **n*lin* o* **unk** *n*o*in* tr*il