CVE-2023-49081: aiohttp's ClientSession is vulnerable to CRLF injection via version

Published Nov 27, 2023
·
Updated

Summary Improper validation make it possible for an attacker to modify the HTTP request (e.g. to insert a new header) or even create a new HTTP request if the attacker controls the HTTP version.

Details The vulnerability only occurs if the attacker can control the HTTP version of the request (including its type). For example if an unvalidated JSON value is used as a version and the attacker is then able to pass an array as the version parameter. Furthermore, the vulnerability only occurs when the Connection header is passed to the headers parameter.

At this point, the library will use the parsed value to create the request. If a list is passed, then it bypasses validation and it is possible to perform CRLF injection.

PoC The POC below shows an example of providing an unvalidated array as a version: https://gist.github.com/jnovikov/184afb593d9c2114d77f508e0ccd508e

Impact CRLF injection leading to Request Smuggling.

Workaround If these specific conditions are met and you are unable to upgrade, then validate the user input to the version parameter to ensure it is a str.

Patch: https://github.com/aio-libs/aiohttp/pull/7835/files

Other sources

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Improper validation made it possible for an attacker to modify the HTTP request (e.g. to insert a new header) or create a new HTTP request if the attacker controls the HTTP version. The vulnerability only occurs if the attacker can control the HTTP version of the request. This issue has been patched in version 3.9.0.

MITRE

Affected Software

3 affected componentsFixes available
pip/aiohttp<3.9.0
3.9.0
aiohttp aiohttp<3.9.0
redhat/aiohttp<3.9.0
3.9.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade pip/aiohttp to a version that resolves this vulnerability.

    Fixed in 3.9.0
  2. Upgrade

    Upgrade redhat/aiohttp to a version that resolves this vulnerability.

    Fixed in 3.9.0
  3. Upgrade

    Upgrade aiohttp to a version that resolves this vulnerability.

    Fixed in 3.9.0
  4. Configuration

    Validate the user input to the 'version' parameter to ensure it is a str; reject arrays/lists to prevent CRLF injection and request smuggling.

    aiohttp ClientSession version parameter type = str
  5. Configuration

    Do not pass the 'Connection' header via the headers parameter (ensure it is absent or sanitized); avoid passing lists as header values which can bypass validation.

    aiohttp ClientSession headers[Connection] = not passed / removed

Event History

Nov 27, 2023
Advisory Published
via GitHub·11:17 PM
Nov 30, 2023
CVE Published
via MITRE·06:56 AM
Data Sourced
via MITRE·06:56 AM
DescriptionSeverityWeakness
Data Sourced
via NVD·07:15 AM
DescriptionSeverityWeaknessAffected Software
Data Sourced
via Red Hat·10:04 AM
DescriptionSeverityAffected Software

Frequently Asked Questions

1

What is the vulnerability ID for this security issue?

The vulnerability ID is CVE-2023-49081.

2

What is the summary of this vulnerability?

The vulnerability allows an attacker to modify the HTTP request, including inserting a new header or creating a new request if they control the HTTP version.

3

How does this vulnerability occur?

The vulnerability occurs due to improper validation of the HTTP request, specifically in the aiohttp package version up to 3.9.0.

4

How can I fix this vulnerability?

You can fix this vulnerability by upgrading the aiohttp package to version 3.9.0 or later.

5

Is there any additional information about this vulnerability?

Yes, you can find more information about this vulnerability in the advisory links provided.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203