CVE-2023-49082: aiohttp's ClientSession is vulnerable to CRLF injection via method
Summary Improper validation makes it possible for an attacker to modify the HTTP request (e.g. insert a new header) or even create a new HTTP request if the attacker controls the HTTP method.
Details The vulnerability occurs only if the attacker can control the HTTP method (GET, POST etc.) of the request.
Previous releases performed no validation on the provided value. If an attacker controls the HTTP method it will be used as is and can lead to HTTP request smuggling.
PoC A minimal example can be found here: https://gist.github.com/jnovikov/7f411ae9fe6a9a7804cf162a3bdbb44b
Impact If the attacker can control the HTTP version of the request it will be able to modify the request (request smuggling).
Workaround If unable to upgrade and using user-provided values for the request method, perform manual validation of the user value (e.g. by restricting it to a few known values like GET, POST etc.).
Patch: https://github.com/aio-libs/aiohttp/pull/7806/files
Other sources
aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Improper validation makes it possible for an attacker to modify the HTTP request (e.g. insert a new header) or even create a new HTTP request if the attacker controls the HTTP method. The vulnerability occurs only if the attacker can control the HTTP method (GET, POST etc.) of the request. If the attacker can control the HTTP version of the request it will be able to modify the request (request smuggling). This issue has been patched in version 3.9.0.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
pip/aiohttpto a version that resolves this vulnerability.Fixed in 3.9.0 - Upgrade
Upgrade
redhat/aiohttpto a version that resolves this vulnerability.Fixed in 3.9.0 - Upgrade
Upgrade
aiohttpto a version that resolves this vulnerability.Fixed in 3.9.0Patch GHSA-qvrw-v9rv-5rjx - Configuration
If unable to upgrade, ensure user-provided request method values are manually validated by restricting them to known safe HTTP methods (e.g., GET/POST) to prevent CRLF injection and HTTP request smuggling.
aiohttp ClientSession (HTTP method handling) HTTP method input validation = Restrict to a few known values like GET, POST etc.
Event History
Frequently Asked Questions
What is CVE-2023-49082?
CVE-2023-49082 is a vulnerability that allows an attacker to modify or create an HTTP request by controlling the HTTP method.
What software is affected by CVE-2023-49082?
The aiohttp package with versions up to but excluding 3.9.0 is affected by CVE-2023-49082.
How can the attacker exploit CVE-2023-49082?
The attacker can exploit CVE-2023-49082 by controlling the HTTP method in the HTTP request.
How can I mitigate CVE-2023-49082?
To mitigate CVE-2023-49082, update the aiohttp package to version 3.9.0 or above.
Where can I find more information about CVE-2023-49082?
You can find more information about CVE-2023-49082 in the following references: [GitHub Advisory](https://github.com/aio-libs/aiohttp/security/advisories/GHSA-qvrw-v9rv-5rjx), [Gist](https://gist.github.com/jnovikov/7f411ae9fe6a9a7804cf162a3bdbb44b), [GitHub Advisories](https://github.com/advisories/GHSA-qvrw-v9rv-5rjx).