# PoC - CVE-2024-23334  (aiohttp ≤ 3.9.1) - Directory Traversal via follow\_symlinks

{% embed url="<https://www.exploit-db.com/exploits/52474>" %}

### Resumen

Desarrollé una **Proof of Concept (PoC)** que demuestra una vulnerabilidad de **Directory Traversal** en **aiohttp** cuando la aplicación se configura para servir archivos estáticos con la opción `follow_symlinks=True`.

La vulnerabilidad permite acceder a **archivos arbitrarios del sistema de ficheros** fuera del directorio raíz configurado para contenido estático.\
La PoC fue verificada en un entorno controlado y publicada en **Exploit Database (EDB-ID 52474)**.

Esta entrada documenta el vector afectado, la técnica empleada, el entorno de pruebas y las recomendaciones de mitigación.

### Detalle técnico

* **Producto afectado:** aiohttp
* **Versión:** ≤ 3.9.1
* **CVE:** CVE-2024-23334
* **Componente vulnerable:** Static file handling (`follow_symlinks=True`)
* **Ruta afectada:** `/static/`
* **Tipo de vulnerabilidad:** Directory Traversal
* **CWE:** CWE-22 – Improper Limitation of a Pathname to a Restricted Directory

### Descripción de la PoC

La PoC demuestra que, cuando aiohttp está configurado para servir contenido estático con la opción `follow_symlinks=True`, **no se valida correctamente** que la ruta solicitada permanezca dentro del directorio raíz definido.

Mediante el uso de secuencias de traversal (`../`), es posible escapar del directorio estático y acceder a archivos ubicados en otras rutas del sistema.

La PoC está **deliberadamente restringida a localhost** para evitar su uso indebido y está diseñada exclusivamente para validación en entornos de laboratorio.

### Comportamiento demostrado

* Acceso a archivos arbitrarios fuera del directorio estático configurado.
* Lectura de ficheros del sistema accesibles por el proceso aiohttp.
* Confirmación de que la ruta solicitada no es normalizada ni validada correctamente antes de acceder al sistema de archivos.

### Entorno de pruebas

* **Plataforma:** Linux
* **Aplicación:** aiohttp 3.9.1
* **Entorno:** Vulhub (Docker)
* **Herramientas empleadas:**
  * Docker / Docker Compose
  * curl
  * Script Python (PoC local)
* **Escenario:** Entorno local / laboratorio controlado

### Impacto

Un atacante remoto podría explotar esta vulnerabilidad para:

* Leer archivos sensibles del sistema (impacto alto en confidencialidad).
* Acceder a configuraciones, secretos o credenciales almacenadas en el host.
* Facilitar ataques posteriores mediante el acceso a información interna de la aplicación.

El impacto es especialmente relevante en **entornos contenerizados o servicios expuestos**, donde aiohttp puede ejecutarse con permisos elevados.

### Mitigaciones recomendadas

* Actualizar **aiohttp a la versión 3.9.2 o superior**.
* Evitar el uso de `follow_symlinks=True` salvo que sea estrictamente necesario.
* Validar y normalizar las rutas solicitadas antes de acceder al sistema de archivos.
* Ejecutar la aplicación con el **principio de mínimos privilegios**.
* Colocar la aplicación detrás de un reverse proxy con controles adicionales de rutas.

### Referencias

* **Exploit Database:** <https://www.exploit-db.com/exploits/52474>
* **CVE Record:** <https://nvd.nist.gov/vuln/detail/CVE-2024-23334>

{% hint style="danger" %}
Esta PoC ha sido desarrollada únicamente con fines educativos y de investigación. No debe ejecutarse contra sistemas en producción ni sin autorización expresa. Seguir siempre prácticas de *responsible disclosure*.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://beafn28.gitbook.io/beafn28/cve-and-poc/poc-cve-2024-23334-aiohttp-3.9.1-directory-traversal-via-follow_symlinks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
