aiohttp vulnerable to HTTP request smuggling
Default status is the baseline for the product, each version can override it (e.g. patched versions marked unaffected).
| Vendor | Product | Default status | Versions | ||||||
|---|---|---|---|---|---|---|---|---|---|
| aio-libs | aiohttp | affected |
|
| Package | CPE | Advisory | Released Date |
|---|---|---|---|
| Red Hat Satellite 6.15 for RHEL 8 | |||
| python-aiohttp-0:3.9.2-1.el8pc | cpe:/a:redhat:satellite:6.15::el8 | RHSA-2024:2010 | 2024-04-23T00:00:00Z |
| python-aiohttp-0:3.9.2-1.el8pc | cpe:/a:redhat:satellite_capsule:6.15::el8 | RHSA-2024:2010 | 2024-04-23T00:00:00Z |
| RHUI 4 for RHEL 8 | |||
| python-aiohttp-0:3.9.2-1.el8ui | cpe:/a:redhat:rhui:4::el8 | RHSA-2024:1878 | 2024-04-18T00:00:00Z |
No data available yet.
| Source | ID | Title |
|---|---|---|
EUVD |
EUVD-2023-0003 | ### Impact\n\naiohttp v3.8.4 and earlier are [bundled with llhttp v6.0.6](https://github.com/aio-libs/aiohttp/blob/v3.8.4/.gitmodules) which is vulnerable to CVE-2023-30589. The vulnerable code is used by aiohttp for its HTTP request parser when available which is the default case when installing from a wheel.\n\nThis vulnerability only affects users of aiohttp as an HTTP server (ie `aiohttp.Application`), you are not affected by this vulnerability if you are using aiohttp as an HTTP client library (ie `aiohttp.ClientSession`).\n\n### Reproducer\n\n```python\nfrom aiohttp import web\n\nasync def example(request: web.Request):\n headers = dict(request.headers)\n body = await request.content.read()\n return web.Response(text=f\"headers: {headers} body: {body}\")\n\napp = web.Application()\napp.add_routes([web.post('/', example)])\nweb.run_app(app)\n```\n\nSending a crafted HTTP request will cause the server to misinterpret one of the HTTP header values leading to HTTP request smuggling.\n\n```console\n$ printf \"POST / HTTP/1.1\\r\\nHost: localhost:8080\\r\\nX-Abc: \\rxTransfer-Encoding: chunked\\r\\n\\r\\n1\\r\\nA\\r\\n0\\r\\n\\r\\n\" \\\n | nc localhost 8080\n\nExpected output:\n headers: {'Host': 'localhost:8080', 'X-Abc': '\\rxTransfer-Encoding: chunked'} body: b''\n\nActual output (note that 'Transfer-Encoding: chunked' is an HTTP header now and body is treated differently)\n headers: {'Host': 'localhost:8080', 'X-Abc': '', 'Transfer-Encoding': 'chunked'} body: b'A'\n```\n\n### Patches\n\nUpgrade to the latest version of aiohttp to resolve this vulnerability. It has been fixed in v3.8.5: [`pip install aiohttp >= 3.8.5`](https://pypi.org/project/aiohttp/3.8.5/)\n\n### Workarounds\n\nIf you aren't able to upgrade you can reinstall aiohttp using `AIOHTTP_NO_EXTENSIONS=1` as an environment variable to disable the llhttp HTTP request parser implementation. The pure Python implementation isn't vulnerable to request smuggling:\n\n```console\n$ python -m pip uninstall --yes aiohttp\n$ AIOHTTP_NO_EXTENSIONS=1 python -m pip install --no-binary=aiohttp --no-cache aiohttp\n```\n\n### References\n\n* https://nvd.nist.gov/vuln/detail/CVE-2023-30589\n* https://hackerone.com/reports/2001873\n |
Github GHSA |
GHSA-45c4-8wx5-qw6w | aiohttp.web.Application vulnerable to HTTP request smuggling via llhttp HTTP request parser |
No CVSS v4.0
No CVSS v3.0
No CVSS v2
This CVE is not in the KEV list.
Exploit prediction score: 1.3% (1.337% probability within 30 days)
| Type | Values Removed | Values Added |
|---|---|---|
| First Time appeared |
Aio-libs Project
Aio-libs Project aiohttp |
|
| CPEs | cpe:2.3:a:aio-libs_project:aiohttp:*:*:*:*:*:*:*:* | |
| Vendors & Products |
Aio-libs Project
Aio-libs Project aiohttp |
|
| Metrics |
ssvc
|