CVE-2024-23334: aiohttp.web.static(follow_symlinks=True) is vulnerable to directory traversal

Published Jan 29, 2024
·
Updated

Summary Improperly configuring static resource resolution in aiohttp when used as a web server can result in the unauthorized reading of arbitrary files on the system.

Details When using aiohttp as a web server and configuring static routes, it is necessary to specify the root path for static files. Additionally, the option 'followsymlinks' can be used to determine whether to follow symbolic links outside the static root directory. When 'followsymlinks' is set to True, there is no validation to check if a given file path is within the root directory.This can lead to directory traversal vulnerabilities, resulting in unauthorized access to arbitrary files on the system, even when symlinks are not present.

i.e. An application is only vulnerable with setup code like: app.router.addroutes([ web.static("/static", "static/", followsymlinks=True), # Remove followsymlinks to avoid the vulnerability ])

Impact This is a directory traversal vulnerability with CWE ID 22. When using aiohttp as a web server and enabling static resource resolution with followsymlinks set to True, it can lead to this vulnerability. This vulnerability has been present since the introduction of the followsymlinks parameter.

Workaround Even if upgrading to a patched version of aiohttp, we recommend following these steps regardless.

If using followsymlinks=True outside of a restricted local development environment, disable the option immediately. This option is NOT needed to follow symlinks which point to a location within the static root directory, it is only intended to allow a symlink to break out of the static directory. Even with this CVE fixed, there is still a substantial risk of misconfiguration when using this option on a server that accepts requests from remote users.

Additionally, aiohttp has always recommended using a reverse proxy server (such as nginx) to handle static resources and not to use these static resources in aiohttp for production environments. Doing so also protects against this vulnerability, and is why we expect the number of affected users to be very low.

-----

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

Other sources

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. When using aiohttp as a web server and configuring static routes, it is necessary to specify the root path for static files. Additionally, the option 'followsymlinks' can be used to determine whether to follow symbolic links outside the static root directory. When 'followsymlinks' is set to True, there is no validation to check if reading a file is within the root directory. This can lead to directory traversal vulnerabilities, resulting in unauthorized access to arbitrary files on the system, even when symlinks are not present. Disabling followsymlinks and using a reverse proxy are encouraged mitigations. Version 3.9.2 fixes this issue.

Debian

Affected Software

5 affected componentsFixes available
pip/aiohttp>=1.0.5<3.9.2
3.9.2
debian/python-aiohttp<=3.7.4-1, <=3.8.4-1
3.10.5-1
aiohttp aiohttp>=1.0.5<3.9.2
Fedoraproject Fedora=39
redhat/aiohttp<3.9.2
3.9.2

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.2
  2. Upgrade

    Upgrade debian/python-aiohttp to a version that resolves this vulnerability.

    Fixed in 3.10.5-1
  3. Upgrade

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

    Fixed in 3.9.2
  4. Upgrade

    Upgrade aio-libs/aiohttp to a version that resolves this vulnerability.

    Fixed in 3.9.2Patch aiohttp/pull/8079
  5. Configuration

    Disable symlink following for static file routing; e.g., remove `follow_symlinks=True` from `web.static('/static', 'static/', follow_symlinks=True)` (set to False).

    aiohttp.web.static follow_symlinks = False
  6. Compensating control

    Use a reverse proxy (such as nginx) to handle static resources instead of serving static resources directly from aiohttp in production environments.

Event History

Jan 29, 2024
Advisory Published
via GitHub·10:31 PM
CVE Published
via MITRE·10:41 PM
Data Sourced
via MITRE·10:41 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·11:15 PM
RemedyDescriptionSeverityWeaknessAffected Software
Jan 30, 2024
Data Sourced
via Red Hat·09:03 AM
DescriptionSeverityAffected Software
Mar 16, 2024
News Published
via BleepingComputer·02:17 PM
News Published
via BleepingComputer·08:48 PM
Sep 5, 2024
Data Sourced
via Launchpad·09:33 PM
Description
Sep 13, 2024
Data Sourced
via Ubuntu·09:34 PM
RemedyDescriptionSeverityAffected Software
Feb 4, 2026
Exploit Published
via ExploitDB·12:00 AM
Known Exploited
03:50 PM
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2024-23334?

CVE-2024-23334 is considered a high-severity vulnerability due to the potential for unauthorized file access.

2

How do I fix CVE-2024-23334?

To fix CVE-2024-23334, update aiohttp to version 3.9.2 or later.

3

What systems are affected by CVE-2024-23334?

CVE-2024-23334 affects aiohttp versions between 1.0.5 and 3.9.2 when used as a web server.

4

What happens if I don't address CVE-2024-23334?

Failure to address CVE-2024-23334 could lead to unauthorized reading of sensitive files on the system.

5

Is CVE-2024-23334 related to static file configuration?

Yes, CVE-2024-23334 is specifically related to improperly configuring static resource resolution in aiohttp.

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