Description
aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. In versions on the 3.10 branch prior to version 3.10.2, static routes which contain files with compressed variants (`.gz` or `.br` extension) are vulnerable to path traversal outside the root directory if those variants are symbolic links. The server protects static routes from path traversal outside the root directory when `follow_symlinks=False` (default). It does this by resolving the requested URL to an absolute path and then checking that path relative to the root. However, these checks are not performed when looking for compressed variants in the `FileResponse` class, and symbolic links are then automatically followed when performing the `Path.stat()` and `Path.open()` to send the file. Version 3.10.2 contains a patch for the issue.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| aio-libs | aiohttp | >= 3.10.0b1, < 3.10.2 | — |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | python-aiohttp | 3.10.3-2 | — |
| Debian 13 | python-aiohttp | 3.10.3-2 | — |
| Debian 12 | python-aiohttp | No fix yet | — |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP4 | python-aiohttp | 3.9.3-150400.10.24.1 | SUSE-SU-2024:3110-1 |
| SLES 3 | python-aiohttp | 3.9.3-150400.10.24.1 | SUSE-SU-2024:3110-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Tumbleweed | python-aiohttp | 3.10.5-1.1 | openSUSE-SU-2026:11467-1, openSUSE-SU-2024:14280-1 |
| openSUSE Leap 15.6 | python-aiohttp | 3.9.3-150400.10.24.1 | SUSE-SU-2024:3110-1 |
| openSUSE Leap 15.5 | python-aiohttp | 3.9.3-150400.10.24.1 | SUSE-SU-2024:3110-1 |
Azure Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Azure Linux 3 | python-aiohttp | No fix yet | — |
| Azure Linux 2 (CBL-Mariner) | python-aiohttp | No fix yet | — |
Wolfi
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Wolfi rolling | airflow | 2.9.3-r2 | — |
| Wolfi rolling | checkov | 3.0.34-r1 | — |
| Wolfi rolling | dask-gateway +1 | 2024.1.0-r9 | — |
| Wolfi rolling | kserve +9 | 0.13.1-r3 | — |
| Wolfi rolling | py3-cassandra-medusa +1 | 0.22.3-r1 | — |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| PyPI | aiohttp | >= 3.10.0b1, < 3.10.2 | 3.10.2 | GHSA-jwhx-xcg6-8xhj |
Advisories 4
- openSUSE-SU-2026:11467-1 python313-aiohttp-3.14.3-1.1 on GA media SUSE / openSUSE Security Updates · Aug 7, 2026
- openSUSE-SU-2024:14280-1 python310-aiohttp-3.10.5-1.1 on GA media SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3110-1 Security update for python-aiohttp SUSE / openSUSE Security Updates · Feb 4, 2026
- WID-SEC-2025-0809 Oracle Siebel CRM: Mehrere Schwachstellen BSI CERT-Bund (WID) · Apr 15, 2025
References
- https://github.com/aio-libs/aiohttp/security/advisories/GHSA-jwhx-xcg6-8xhj
- https://github.com/aio-libs/aiohttp/pull/8653
- https://github.com/aio-libs/aiohttp/commit/ce2e9758814527589b10759a20783fb03b98339f
- https://github.com/aio-libs/aiohttp/blob/e0ff5246e1d29b7710ab1a2bbc972b48169f1c05/aiohttp/web_fileresponse.py#L177
- https://github.com/aio-libs/aiohttp/blob/e0ff5246e1d29b7710ab1a2bbc972b48169f1c05/aiohttp/web_urldispatcher.py#L674