
CVE-2026-91858 के लिए रन करने योग्य Spring Boot और Quarkus रिप्रोड्यूसर, जो तृतीय-पक्ष TransformerFactory के माध्यम से Apache Camel camel-fop में एक XXE है, जिसमें प्रभावित और पैच किए गए सत्यापन शामिल हैं।
Apache Camel भेद्यता के लिए चलाने योग्य proof-of-concept पुनरुत्पादक, जहाँ camel-fop का FopProducer XSL-FO संदेश निकाय पर identity transform चलाने से पहले अपना javax.xml.transform.TransformerFactory केवल FEATURE_SECURE_PROCESSING के साथ बनाता था। JDK के अंतर्निहित transformer पर वह सुविधा अकेले ही accessExternalDTD/accessExternalStylesheet सीमाओं को खाली कर देती है, इसलिए बाहरी संसाधनों को अस्वीकार कर दिया जाता है। लेकिन जब Saxon-HE जैसा कोई तृतीय-पक्ष JAXP TransformerFactory classpath पर हो — उदाहरण के लिए क्योंकि एप्लिकेशन camel-xslt-saxon या camel-saxon का भी उपयोग करता है — तो TransformerFactory.newInstance() उसी कार्यान्वयन को लौटाता है, और अकेले FEATURE_SECURE_PROCESSING उस पर बाहरी संसाधन पहुँच को प्रतिबंधित नहीं करता। XSL-FO निकाय में घोषित बाहरी subset वाला DOCTYPE तब हल किया जाता है जब निकाय को रूपांतरित किया जा रहा होता है, इसलिए किसी बाहरी प्रेषक का दस्तावेज़ Camel प्रक्रिया द्वारा पढ़ी जा सकने वाली फ़ाइलें पढ़ सकता है या उसे उन होस्ट्स पर अनुरोध जारी करने के लिए बाध्य कर सकता है जिनके नाम वह बताता है (CWE-611)।
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-fop 4.22.0 (प्रभावित; ठीक किया गया 4.22.1) + Saxon-HE 13.0 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-fop (Camel 4.22.0, प्रभावित; ठीक किया गया नियंत्रण CQ 3.40.0 / Camel 4.22.1) + Saxon-HE 13.0 |
दोनों मॉड्यूल वास्तविक FopProducer के विरुद्ध प्रभावित और ठीक किए गए व्यवहार को प्रदर्शित करते हैं। दोनों में Saxon-HE classpath पर है — यह इस दोष की पूर्व-शर्त है; JDK transformer का उपयोग करने वाला डिफ़ॉल्ट परिनियोजन ठीक करने से पहले या बाद में प्रभावित नहीं है।
सत्यापनकर्ता endpoint /exploit/attack एक in-process HTTP callback प्रारंभ करता है और fop:pdf को एक XSL-FO दस्तावेज़ भेजता है जिसका DOCTYPE उस callback की ओर इंगित करने वाला बाहरी DTD घोषित करता है:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fo:root SYSTEM "http://localhost:<port>/external.dtd">
<fo:root …>…Hello…</fo:root>
Oracle सरल है — क्या callback का अनुरोध किया गया था — यह एक निर्णायक प्रमाण है कि बाहरी संसाधन प्राप्त किया गया था:
TransformerFactory.newInstance() Saxon लौटाता है, जो केवल सुरक्षित प्रोसेसिंग के अंतर्गत भी बाहरी DTD प्राप्त करता है — callback ट्रिगर होता है (यही तंत्र file:// URL पढ़ता है)।ACCESS_EXTERNAL_DTD को "" पर सेट किया गया है, इसलिए Saxon बाहरी DTD को अस्वीकार करता है; callback कभी ट्रिगर नहीं होता।# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: callback hit = true; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -Djava.awt.headless=true -jar target/cve-2026-91858-fop-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: callback hit = false; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): callback hit = true
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -Djava.awt.headless=true -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: callback hit = false
| गुण | मान |
|---|---|
| घटक | camel-fop (FopProducer) |
| CWE | CWE-611 (XML बाह्य इकाई संदर्भ का अनुचित प्रतिबंध) |
| गंभीरता | MEDIUM |
| आक्रमण वेक्टर | एक बाह्य प्रेषक का XSL-FO एक fop: प्रोड्यूसर तक पहुँचता है, ऐसे परिनियोजन पर जिसमें क्लासपाथ पर तृतीय-पक्ष JAXP TransformerFactory (जैसे Saxon-HE) भी मौजूद है |
| प्रभाव | Camel प्रक्रिया द्वारा पढ़ी जा सकने वाली स्थानीय फ़ाइलें पढ़ना; दस्तावेज़ में नामित आंतरिक होस्ट्स तक SSRF |
| प्रभावित संस्करण | 4.0.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक (केवल तब जब कोई गैर-JDK TransformerFactory मौजूद हो) |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24605 |
| श्रेय | Claude Security Scan Tool |
सलाहकारी सूचना: https://camel.apache.org/security/CVE-2026-91858.html
Quarkus प्रभावित मॉड्यूल CQ 3.39.0 (Camel 4.22.0) पर आधारित है। पैच किया गया नियंत्रण CQ 3.40.0 (Camel 4.22.1) है। Saxon-HE 13.0 को दोनों मॉड्यूल में उस एप्लिकेशन के प्रतिनिधि के रूप में जोड़ा गया है जो camel-xslt-saxon/camel-saxon का भी उपयोग करता है; किसी गैर-JDK TransformerFactory के बिना यह दोष पहुँच योग्य नहीं है।
FopProducer अब अपने द्वारा बनाए गए TransformerFactory पर XMLConstants.ACCESS_EXTERNAL_DTD और
XMLConstants.ACCESS_EXTERNAL_STYLESHEET को भी खाली स्ट्रिंग पर सेट करता है (FEATURE_SECURE_PROCESSING के अतिरिक्त),
जो XmlConverter द्वारा उपयोग किए जाने वाले सुरक्षित XML प्रसंस्करण कॉन्फ़िगरेशन से मेल खाता है। इसलिए किसी भी JAXP कार्यान्वयन पर
जो उन विशेषताओं का पालन करता है, बाह्य DTD और स्टाइलशीट पहुँच अस्वीकार कर दी जाती है, जिसमें Saxon-HE भी शामिल है।
fop: प्रोड्यूसर को अविश्वसनीय XSL-FO न भेजें, या क्लासपाथ से वैकल्पिक JAXP TransformerFactory (जैसे
Saxon-HE) हटा दें ताकि JDK ट्रांसफ़ॉर्मर — जो सुरक्षित प्रसंस्करण के अंतर्गत पहले से ही बाह्य DTD को अस्वीकार करता है — का
उपयोग हो।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने में मदद करने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और पुष्टि करने कि अपग्रेड करने से यह हल हो जाती है। बाह्य DTD localhost पर एक इन-प्रोसेस कॉलबैक की ओर इंगित करता है; रिप्रोड्यूसर के बाहर किसी से संपर्क नहीं किया जाता और कोई संवेदनशील फ़ाइल नहीं पढ़ी जाती। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।