
Apache Camel पाथ ट्रैवर्सल भेद्यता (CVE-2026-66906) के लिए proof-of-concept रिप्रोड्यूसर, जो camel-azure-storage-blob में है, जो ब्लॉब नाम ट्रैवर्सल के माध्यम से मनमाना फ़ाइल लेखन (`arbitrary file write`) प्रदर्शित करता है, साथ ही प्रभावित और फिक्स्ड वर्जन विवरण भी शामिल हैं।
downloadBlobToFile पाथ ट्रैवर्सलइसी Apache Camel भेद्यता के लिए चलाने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, प्रत्येक रनटाइम के लिए एक:
| रनटाइम | डायरेक्टरी | स्टैक |
|---|
| 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 (bundles Camel 4.20.0) |
दोनों प्रभावित संस्करण हैं (समस्या 4.14.9 / 4.18.4 / 4.22.0 में ठीक की गई है), और दोनों एक जैसा ही दोष प्रदर्शित करते हैं: camel-azure-storage-blob कंज्यूमर कंटेनर ब्लॉब्स को fileDir विकल्प द्वारा नामित डायरेक्टरी में लोकल फाइलसिस्टम पर डाउनलोड करता है, लोकल टारगेट को new File(fileDir, client.getBlobName()) के रूप में बनाता है — रिमोट ब्लॉब नाम बिल्कुल वैसा ही जैसा Azure SDK ने रिपोर्ट किया था, जिसमें कोई नॉर्मलाइज़ेशन नहीं और कोई जाँच नहीं कि रिज़ॉल्व की गई लोकेशन fileDir के भीतर ही बनी रहे। ब्लॉब नाम रूट-नियंत्रित नहीं है: कंज्यूमर कंटेनर की सूची बनाता है (BlobConsumer.createBatchExchangesFromContainer) और हर ब्लॉब डाउनलोड करता है। इसलिए जिस ब्लॉब के नाम में ../ सेगमेंट होते हैं, वह fileDir के बाहर लिखा जाता है (CWE-22, पाथ ट्रैवर्सल → आर्बिट्ररी फाइल राइट)।
प्रत्येक सबडायरेक्टरी स्व-निहित है (अपना स्वयं का Dockerfile, docker-compose.yml जो एक Azurite इम्यूलेटर चालू करता है, और README)। संक्षेप में, दोनों में से किसी के लिए भी:
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
प्रभावित बिल्ड पर अपेक्षित आउटपुट (दोनों वेरिएंट):
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
| गुण | मान |
|---|---|
| कंपोनेंट | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (किसी प्रतिबंधित डायरेक्टरी के लिए पाथनाम की अनुचित सीमा — पाथ ट्रैवर्सल) |
| हमला वेक्टर | एक कंटेनर ब्लॉब जिसके नाम में ../ सेगमेंट होते हैं, जिसे fileDir सेट होने पर कंज्यूमर द्वारा डाउनलोड किया जाता है |
| प्रभाव | कॉन्फ़िगर की गई fileDir डायरेक्टरी के बाहर आर्बिट्ररी फाइल राइट |
| प्रभावित संस्करण | 4.0.0 से 4.14.9 से पहले, 4.15.0 से 4.18.4 से पहले, 4.19.0 से 4.22.0 से पहले |
| फिक्स्ड संस्करण | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| क्रेडिट | n0mi1k; Hiep Nguyen |
कंज्यूमर अब डाउनलोड टारगेट को कॉन्फ़िगर की गई fileDir डायरेक्टरी तक हल (resolve) करता है और सीमित करता है (AzureFileNameHelper.resolveWithinDirectory के माध्यम से), उन ब्लॉब नामों को अस्वीकार करता है जो इससे बाहर निकलने का प्रयास करते हैं। यही समाधान सहयोगी कंपोनेंट्स camel-azure-storage-datalake (CVE-2026-60093) पर भी लागू होता है।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता समझने, यह जाँचने में मदद करने के लिए कि वे प्रभावित हैं या नहीं, और यह पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाती है। लिखी गई फाइल /tmp के अंतर्गत एक हानिरहित मार्कर है। इस सामग्री का उपयोग उन प्रणालियों के विरुद्ध न करें जिनके आप स्वामी नहीं हैं या जिन्हें आप संचालित नहीं करते हैं।