
Riproduttori proof-of-concept per la vulnerabilità di path traversal di Apache Camel (CVE-2026-66906) in camel-azure-storage-blob, che dimostrano la scrittura arbitraria di file tramite traversal del nome del blob, con i dettagli delle versioni interessate e corrette.
downloadBlobToFile attraversamento del percorsoProof-of-concept eseguibili per riprodurre la stessa vulnerabilità Apache Camel, uno per runtime:
| Runtime | Directory | 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 (include Camel 4.20.0) |
Entrambe sono versioni vulnerabili (il problema è corretto in 4.14.9 / 4.18.4 / 4.22.0) ed entrambe dimostrano lo stesso identico
difetto: il consumer di camel-azure-storage-blob scarica i blob del contenitore nel filesystem locale, nella directory
indicata dall'opzione fileDir, costruendo la destinazione locale come new File(fileDir, client.getBlobName()) — il remoto
nome del blob esattamente come riportato dall'SDK di Azure, senza alcuna normalizzazione e senza alcuna verifica che la posizione risolta
rimanga all'interno di fileDir. Il nome del blob non è controllato dalla route: il consumer elenca il contenitore
(BlobConsumer.createBatchExchangesFromContainer) e scarica ogni blob. Un blob il cui nome contiene ../
segmenti viene quindi scritto fuori da fileDir (CWE-22, attraversamento del percorso → scrittura arbitraria di file).
Ogni sottodirectory è autonoma (con il proprio Dockerfile, docker-compose.yml che avvia un
Azurite emulatore, e README). In breve, per entrambe:
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
Output previsto su una build vulnerabile (entrambe le varianti):
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
| Proprietà | Valore |
|---|---|
| Componente | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (Improper Limitation of a Pathname to a Restricted Directory — Path Traversal) |
| Vettore di attacco | Un blob del contenitore il cui nome contiene segmenti ../, scaricato dal consumer con fileDir impostato |
| Impatto | Scrittura arbitraria di file al di fuori della directory fileDir configurata |
| Versioni interessate | Dalla 4.0.0 alla 4.14.9 esclusa, dalla 4.15.0 alla 4.18.4 esclusa, dalla 4.19.0 alla 4.22.0 esclusa |
| Versioni corrette | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| Crediti | n0mi1k; Hiep Nguyen |
Avviso di sicurezza: https://camel.apache.org/security/CVE-2026-66906.html
Ora il consumer risolve e vincola la destinazione del download alla directory fileDir configurata (tramite
AzureFileNameHelper.resolveWithinDirectory), rifiutando i nomi di blob che ne uscirebbero. La stessa correzione riguarda anche i
componenti gemelli camel-azure-storage-datalake (CVE-2026-60093).
Questo repository è pubblicato per scopi educativi e difensivi: per aiutare gli utenti di Apache Camel a comprendere la
vulnerabilità, a verificare se sono interessati e a confermare che l'aggiornamento la risolve. Il file scritto è un
segnaposto innocuo in /tmp. Non utilizzare questo materiale contro sistemi che non possiedi o che non gestisci.