
Reproductores de prueba de concepto para la vulnerabilidad de path traversal en Apache Camel (CVE-2026-66906) en camel-azure-storage-blob, que demuestran escritura arbitraria de archivos mediante el salto en el nombre del blob, con detalles de las versiones afectadas y corregidas.
downloadBlobToFile path traversalReproductores de prueba de concepto ejecutables para la misma vulnerabilidad de Apache Camel, uno por runtime:
| Runtime | Directorio | Stack |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-azure-storage-blob 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (incluye Camel 4.20.0) |
Ambas son versiones afectadas (el problema se corrige en 4.14.9 / 4.18.4 / 4.22.0), y ambas demuestran el mismo defecto: el consumidor de camel-azure-storage-blob descarga los blobs del contenedor al sistema de archivos local, dentro del directorio indicado por la opción fileDir, construyendo el destino local como new File(fileDir, client.getBlobName()) — el nombre del blob remoto exactamente tal como lo reportó el SDK de Azure, sin normalización alguna y sin comprobación de que la ubicación resuelta permanezca dentro de fileDir. El nombre del blob no está controlado por la ruta: el consumidor enumera el contenedor (BlobConsumer.createBatchExchangesFromContainer) y descarga cada blob. Por lo tanto, un blob cuyo nombre contenga segmentos ../ se escribe fuera de fileDir (CWE-22, path traversal → escritura arbitraria de archivos).
Cada subdirectorio es autocontenido (con su propio Dockerfile, docker-compose.yml que levanta un emulador Azurite, y README). En resumen, para cualquiera de los dos:
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Salida esperada en una compilación afectada (ambas variantes):
Files inside the intended download directory /app/downloads:
- report.txt
File written OUTSIDE it, at /tmp/pwned-66906.txt: true
content: PWNED via path traversal — CVE-2026-66906
>>> PROVEN: the blob name's ../ segments escaped the configured fileDir directory ... : true
| Propiedad | Valor |
|---|---|
| Componente | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (Limitación incorrecta de un nombre de ruta a un directorio restringido — Path Traversal) |
| Vector de ataque | Un blob del contenedor cuyo nombre contiene segmentos ../, descargado por el consumidor con fileDir configurado |
| Impacto | Escritura arbitraria de archivos fuera del directorio fileDir configurado |
| Versiones afectadas | Desde 4.0.0 hasta antes de 4.14.9, desde 4.15.0 hasta antes de 4.18.4, desde 4.19.0 hasta antes de 4.22.0 |
| Versiones corregidas | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| Crédito | n0mi1k; Hiep Nguyen |
El consumidor ahora resuelve y restringe el destino de la descarga al directorio fileDir configurado (a través de AzureFileNameHelper.resolveWithinDirectory), rechazando los nombres de blob que intentarían escapar de él. La misma corrección cubre los componentes hermanos camel-azure-storage-datalake (CVE-2026-60093).
Este repositorio se publica con fines educativos y defensivos: para ayudar a los usuarios de Apache Camel a comprender la vulnerabilidad, verificar si están afectados y confirmar que la actualización la resuelve. El archivo escrito es un marcador benigno en /tmp. No utilice este material contra sistemas que no posea u opere.