
Reproducteurs de preuve de concept pour la vulnérabilité de traversée de chemin d'Apache Camel (CVE-2026-66906) dans camel-azure-storage-blob, démontrant l'écriture arbitraire de fichiers via la traversée de noms de blob, avec les détails des versions affectées et corrigées.
downloadBlobToFile traversée de cheminReproducteurs de preuve de concept exécutables pour la même vulnérabilité Apache Camel, un par environnement d'exécution :
| Runtime | Répertoire | 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 (embarque Camel 4.20.0) |
Les deux sont des versions affectées (le problème est corrigé en 4.14.9 / 4.18.4 / 4.22.0), et les deux démontrent le même défaut : le consommateur camel-azure-storage-blob télécharge les blobs du conteneur vers le système de fichiers local, dans le répertoire désigné par l'option fileDir, en construisant la cible locale comme new File(fileDir, client.getBlobName()) — le nom du blob distant exactement tel que rapporté par le SDK Azure, sans aucune normalisation ni aucun contrôle que l'emplacement résolu reste dans fileDir. Le nom du blob n'est pas contrôlé par la route : le consommateur liste le conteneur (BlobConsumer.createBatchExchangesFromContainer) et télécharge chaque blob. Un blob dont le nom contient des segments ../ est donc écrit en dehors de fileDir (CWE-22, traversée de chemin → écriture de fichier arbitraire).
Chaque sous-répertoire est autonome (son propre Dockerfile, docker-compose.yml qui démarre un émulateur Azurite, et un README). En bref, pour l'un ou l'autre :
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
Sortie attendue sur une version affectée (les deux 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
| Propriété | Valeur |
|---|---|
| Composant | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (Limitation incorrecte d'un nom de chemin à un répertoire restreint — Traversée de chemin) |
| Vecteur d'attaque | Un blob de conteneur dont le nom contient des segments ../, téléchargé par le consommateur avec fileDir défini |
| Impact | Écriture de fichier arbitraire en dehors du répertoire fileDir configuré |
| Versions affectées | De 4.0.0 à 4.14.9 exclu, de 4.15.0 à 4.18.4 exclu, de 4.19.0 à 4.22.0 exclu |
| Versions corrigées | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| Crédit | n0mi1k; Hiep Nguyen |
Le consommateur résout désormais la cible de téléchargement et la contraint au répertoire fileDir configuré (via AzureFileNameHelper.resolveWithinDirectory), en rejetant les noms de blobs qui tenteraient de s'en échapper. Le même correctif couvre les composants voisins camel-azure-storage-datalake (CVE-2026-60093).
Ce dépôt est publié à des fins éducatives et défensives : pour aider les utilisateurs d'Apache Camel à comprendre la vulnérabilité, à vérifier s'ils sont affectés, et à confirmer que la mise à niveau la résout. Le fichier écrit est un marqueur bénin sous /tmp. N'utilisez pas ce matériel contre des systèmes que vous ne possédez pas ou n'exploitez pas.