
Apache Camel camel-smooks में XXE (CWE-611) दोष को पुनः उत्पन्न करने वाला एक रन करने योग्य Spring Boot प्रूफ-ऑफ-कॉन्सेप्ट, जिसमें प्रभावित और पैच किए गए नियंत्रण रन शामिल हैं।
Apache Camel भेद्यता के लिए चलाने योग्य प्रमाण-अवधारणा पुनरुत्पादक, जहाँ Smooks डेटा प्रारूप
(.unmarshal().smooks(...)) और Smooks घटक (smooks:) आने वाले XML बॉडी को उस रीडर के साथ पार्स करते थे जिसे
Smooks डिफ़ॉल्ट रूप से हल करता है (Woodstox SAX पार्सर), जो बाह्य सामान्य और पैरामीटर इकाइयों को हल करता है और
बाह्य DTD लोड करता है — और camel-smooks ने अन्य Camel XML घटकों द्वारा लागू किए गए पार्सर सुदृढ़ीकरण में से कोई भी
लागू नहीं किया। इसलिए XML दस्तावेज़ में घोषित बाह्य सबसेट वाला DOCTYPE, या बाह्य सामान्य इकाई, बॉडी को अनमार्शल
करते समय हल और विस्तारित हो जाती है, और हल की गई सामग्री परिणाम में बाइंड हो जाती है। एक बाह्य प्रेषक जिसका XML
camel-smooks डेटा प्रारूप या एंडपॉइंट तक पहुँचता है, Camel प्रक्रिया द्वारा पढ़ी जा सकने वाली फ़ाइलें पढ़ सकता था, या
प्रक्रिया को आंतरिक होस्ट्स के लिए अनुरोध जारी करवा सकता था (CWE-611)। किसी गैर-डिफ़ॉल्ट विकल्प की आवश्यकता नहीं है —
बाह्य इकाइयों को हल करना डिफ़ॉल्ट व्यवहार था।
केवल Spring Boot। यह पुनरुत्पादक एकल Camel Spring Boot मॉड्यूल के साथ आता है।
camel-smooksमें कोईcamel-quarkus-smooksएक्सटेंशन नहीं है, इसलिए पुनरुत्पादन के लिए कोई Quarkus समकक्ष नहीं है। Spring Boot मॉड्यूल प्रभावित और ठीक किए गए व्यवहार दोनों को प्रदर्शित करता है।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-smooks 4.22.0 (प्रभावित; ठीक किया गया 4.22.1) |
ड्राइवर ठीक के अपने ही रिग्रेशन परीक्षण (SmooksDataFormatXmlSecurityTest) को प्रतिबिंबित करता है। एक सौम्य मार्कर फ़ाइल
एक अस्थायी निर्देशिका में लिखी जाती है, और एक XML <customer> दस्तावेज़ को वास्तविक SmooksDataFormat के माध्यम से
स्टॉक smooks-config.xml के साथ अनमार्शल किया जाता है (दस्तावेज़ को एक Customer बीन में बाइंड करते हुए)। दस्तावेज़ का
firstName एक बाह्य इकाई है जो मार्कर फ़ाइल की ओर इंगित करती है:
<!DOCTYPE customer [<!ENTITY xxe SYSTEM "file:///…/secret.txt">]>
<customer><firstName>&xxe;</firstName>…</customer>
Customer.firstName में बंध जाती है — फ़ाइल अनमार्शल किए गए बीन में लीक हो गई।DocumentBuilder (बाहरी एंटिटी और बाहरी DTD लोडिंग अक्षम) के साथ पहले से पार्स किया जाता है, इसलिए एंटिटी हल नहीं होती और मार्कर कभी प्रकट नहीं होता।cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: firstName = the marker file content; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-88901-smooks-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: firstName null, marker not leaked; >>> Not exploited
| Property | Value |
|---|---|
| घटक | camel-smooks (Smooks डेटा फ़ॉर्मेट और घटक) |
| CWE | CWE-611 (XML बाह्य इकाई संदर्भ का अनुचित प्रतिबंध) |
| गंभीरता | उच्च |
| आक्रमण वेक्टर | एक बाह्य प्रेषक XML संदेश निकाय प्रदान करता है जिसे camel-smooks डेटा फ़ॉर्मेट या एंडपॉइंट द्वारा डिफ़ॉल्ट XML रीडर का उपयोग करते हुए अनमार्शल किया जाता है |
| प्रभाव | Camel प्रक्रिया द्वारा पढ़ी जा सकने वाली स्थानीय फ़ाइलें पढ़ना; दस्तावेज़ में नामित आंतरिक होस्टों तक SSRF |
| प्रभावित संस्करण | 4.7.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24677 |
| रिपोर्ट किया गया | h1ei1 |
सलाह: https://camel.apache.org/security/CVE-2026-88901.html
camel-smooks अब अविश्वसनीय XML को पहले से पार्स करता है एक
javax.xml.parsers.DocumentBuilder के साथ जो FEATURE_SECURE_PROCESSING और बाह्य सामान्य इकाइयों,
बाह्य पैरामीटर इकाइयों और बाह्य DTD लोडिंग को अक्षम करने के साथ कॉन्फ़िगर किया गया है, और परिणामी DOM को Smooks को सौंपता है — जो XmlConverter और अन्य Camel XML घटकों द्वारा उपयोग किए जाने वाले सुरक्षित
कॉन्फ़िगरेशन से मेल खाता है। यह सुदृढ़ीकरण केवल तब लागू होता है जब Smooks कॉन्फ़िगरेशन अपने डिफ़ॉल्ट रीडर के साथ XML पार्स करता है (इसलिए EDI, CSV, JSON और कस्टम-रीडर कॉन्फ़िगरेशन, और मार्शलिंग दिशा, अपरिवर्तित रहते हैं)। एक नया allowExternalEntities विकल्प, जो डिफ़ॉल्ट रूप से अक्षम है, विश्वसनीय लीगेसी कॉन्फ़िगरेशन के लिए पिछले
व्यवहार को बहाल करता है।
अविश्वसनीय प्रेषकों से प्राप्त XML पर camel-smooks लागू न करें।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने में मदद करने के लिए कि क्या वे प्रभावित हैं, और पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाता है। "secret" फ़ाइल रिप्रोड्यूसर द्वारा स्वयं एक अस्थायी निर्देशिका में बनाई जाती है और इसमें केवल एक सौम्य मार्कर स्ट्रिंग होती है; जाँच के बाद इसे हटा दिया जाता है। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।