
Proof-of-Concept-Reproduktionen für die Apache-Camel-Pfad-Traversal-Schwachstelle (CVE-2026-60093) in camel-azure-storage-datalake, die das willkürliche Schreiben von Dateien über downloadToFile demonstrieren.
downloadToFile Pfad-TraversalAusführbare Proof-of-Concept-Skripte zur Reproduktion derselben Apache-Camel-Schwachstelle, jeweils eines pro Laufzeitumgebung:
| Laufzeitumgebung | Verzeichnis | Stack |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-azure-storage-datalake 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (enthält Camel 4.20.0) |
Beide sind betroffene Versionen (das Problem ist in 4.14.9 / 4.18.4 / 4.22.0 behoben), und beide demonstrieren denselben Fehler: Die Komponente camel-azure-storage-datalake kann über ihre downloadToFile-Operation eine ADLS-Gen2-Datei in das lokale Dateisystem herunterladen und dabei in das durch die Option fileDir benannte Verzeichnis schreiben. DataLakeFileOperations.downloadToFile erstellte das lokale Ziel, indem es fileDir mit dem entfernten Pfadnamen genau so verknüpfte, wie ihn das Azure SDK meldete (new File(fileDir, fileClientWrapper.getFileName())) — ohne lexikalische Normalisierung und ohne Prüfung, ob der aufgelöste Ort innerhalb von fileDir blieb. Der entfernte Name wird nicht über die Route kontrolliert: Der Consumer listet das Dateisystem auf (DataLakeConsumer.createBatchExchangesFromPath) und lädt jeden Eintrag herunter. Ein Pfadname, der ../-Segmente enthält, löst daher außerhalb von fileDir auf (CWE-22, Pfad-Traversal → beliebiges Dateischreiben).
Hinweis zur Testumgebung. Die Azure-Data Lake Gen2-API ist von keinem verfügbaren lokalen Emulator implementiert — Azurite liefert für Gen2-
listPaths- und Dateioperationen HTTP 400 zurück. Diese Reproduktionsskripte rufen daher exakt den verwundbaren Code (DataLakeFileOperations.downloadToFile→new File(fileDir, fileClientWrapper.getFileName())) direkt auf und liefern einen Data-Lake-Datei-Client-Wrapper, dessengetFileName()den entfernten Namen zurückgibt — genau so, wie der Consumer den Namen liefert, den er ausPathItem.getName()gelesen hat. Die Schwesterkomponentecamel-azure-storage-blobenthält denselben Fix (CVE-2026-66906), und dort wird der identische Fehler Ende-zu-Ende gegen einen laufenden Azurite-Emulator reproduziert.
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
Erwartete Ausgabe bei einem betroffenen Build (beide Varianten):
2) Download of a file named '../../../../../../tmp/pwned-60093.txt':
resolved local target: /app/downloads/../../../../../../tmp/pwned-60093.txt
File written OUTSIDE it, at /tmp/pwned-60093.txt: true
content: PWNED via path traversal — CVE-2026-60093
>>> PROVEN: DataLakeFileOperations.downloadToFile built the local target as new File(fileDir, fileName) ... : true
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-azure-storage-datalake (Spring Boot: camel-azure-storage-datalake-starter; Quarkus: camel-quarkus-azure-storage-datalake) |
| CWE | CWE-22 (Improper Limitation of a Pathname to a Restricted Directory — Path Traversal) |
| Angriffsvektor | Eine Gen2-Datei, deren Pfadname ../-Segmente enthält und die vom Consumer bei gesetzter fileDir-Option heruntergeladen wird |
| Auswirkung | Beliebiger Dateischreibvorgang außerhalb des konfigurierten fileDir-Verzeichnisses |
| Betroffene Versionen | Von 4.0.0 bis vor 4.14.9, von 4.15.0 bis vor 4.18.4, von 4.19.0 bis vor 4.22.0 |
| Behobene Versionen | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| Credit | n0mi1k; Hiep Nguyen |
Der Consumer löst das Download-Ziel nun auf und beschränkt es auf das konfigurierte fileDir-Verzeichnis (über AzureFileNameHelper.resolveWithinDirectory), wobei Pfadnamen abgelehnt werden, die es verlassen würden — derselbe Fix, der auch camel-azure-storage-blob abdeckt (CVE-2026-66906).
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Nutzern zu helfen, die Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade das Problem behebt. Die geschriebene Datei ist eine harmlose Markierung unter /tmp. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.