
Apache Camel camel-google-storage पाथ ट्रैवर्सल (CVE-2026-66907) के लिए प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, downloadFileName के माध्यम से मनमानी फ़ाइल लेखन का प्रदर्शन करते हुए, प्रभावित और फिक्स किए गए संस्करणों के विवरण के साथ।
downloadFileName पाथ ट्रैवर्सलउसी Apache Camel भेद्यता के लिए चलाने योग्य proof-of-concept रिप्रोड्यूसर, प्रत्येक रनटाइम के लिए एक:
| रनटाइम | निर्देशिका | स्टैक |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-google-storage 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-google-storage कंज़्यूमर, जब downloadFileName एक डायरेक्टरी होती है, तब बकेट ऑब्जेक्ट्स को स्थानीय फ़ाइल सिस्टम पर डाउनलोड करता है, और रिमोट ऑब्जेक्ट नाम को उसमें जोड़कर लोकल टारगेट बनाता है
(downloadFileName + "/${file:name}")। ${file:name} टोकन ऑब्जेक्ट नाम को शब्दशः लौटाता है
(${file:onlyname} के विपरीत, जो पाथ को हटा देता है), और परिणाम new File(result) /
blob.downloadTo(file.toPath()) को बिना किसी नॉर्मलाइज़ेशन और बिना इस जाँच के पास किया गया कि गंतव्य
कॉन्फ़िगर की गई डायरेक्टरी के भीतर ही रहा। ऑब्जेक्ट नाम रूट-नियंत्रित नहीं है — कंज़्यूमर बकेट की सूची बनाता है और हर
ऑब्जेक्ट को डाउनलोड करता है — इसलिए जिस ऑब्जेक्ट के नाम में ../ सेगमेंट हैं, वह downloadFileName के बाहर
लिखा जाता है (CWE-22, पाथ ट्रैवर्सल → मनमाना फ़ाइल लेखन)।
प्रत्येक उपनिर्देशिका स्व-निहित है (अपना स्वयं का Dockerfile, docker-compose.yml जो एक
fake-gcs-server एमुलेटर और 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-66907.txt: true
content: PWNED via path traversal — CVE-2026-66907
>>> PROVEN: the object name's ../ segments escaped the configured downloadFileName directory ... : true
| गुण | मान |
|---|---|
| घटक | camel-google-storage (Spring Boot: camel-google-storage-starter; Quarkus: camel-quarkus-google-storage) |
| CWE | CWE-22 (किसी प्रतिबंधित डायरेक्टरी में पाथनाम की अनुचित सीमा — पाथ ट्रैवर्सल) |
| आक्रमण वेक्टर | एक बकेट ऑब्जेक्ट जिसके नाम में ../ सेगमेंट हैं, जिसे कंज़्यूमर द्वारा downloadFileName को डायरेक्टरी पर सेट करके डाउनलोड किया गया है |
| प्रभाव | कॉन्फ़िगर की गई डाउनलोड डायरेक्टरी के बाहर मनमाना फ़ाइल लेखन |
| प्रभावित संस्करण | 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-24279 |
| श्रेय | n0mi1k |
कंज़्यूमर अब रिज़ॉल्व किए गए पाथ को नॉर्मलाइज़ करता है और यह सुनिश्चित करता है कि वह कॉन्फ़िगर की गई downloadFileName
डायरेक्टरी के भीतर ही रहे (GoogleCloudStorageFileNameHelper.assertWithinDirectory के माध्यम से), ऐसे ऑब्जेक्ट नामों को अस्वीकार करते हुए जो उससे बाहर निकल सकते हैं।
docker-compose.yml fake-gcs-server को -backend memory के साथ चलाता है। फिर ऑब्जेक्ट नामों को अपारदर्शी मैप
कुंजियों के रूप में रखा जाता है, इसलिए ../ युक्त नाम संरक्षित रहता है; डिफ़ॉल्ट फ़ाइलसिस्टम बैकएंड ../ को
रिज़ॉल्व कर देगा और ऑब्जेक्ट सूचीबद्ध नहीं हो पाएगा।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को
भेद्यता समझने, यह सत्यापित करने में मदद करने के लिए कि वे प्रभावित हैं या नहीं, और यह पुष्टि करने के लिए कि
अपग्रेड करने से यह हल हो जाती है। लिखी गई फ़ाइल /tmp के अंतर्गत एक हानिरहित मार्कर है। इस सामग्री का उपयोग
उन सिस्टमों के विरुद्ध न करें जिनके स्वामी या संचालक आप नहीं हैं।