
أداة إثبات مفهوم قابلة للتشغيل لإعادة إنتاج CVE-2026-85316، تُظهر وضع الوكيل غير المقصود في مطابقة بادئة المسار في Apache Camel camel-platform-http، مع عناصر تحكم بالإصدارات المُصلحة.
مُعيد إنتاج إثبات مفهوم قابل للتشغيل لثغرة Apache Camel حيث كان camel-platform-http يقرر ما إذا كانت نقطة نهاية
تعمل في وضع الوكيل من خلال اختبار ما إذا كان مسارها المُهيأ يبدأ بـ السلسلة proxy، بدلاً من
مطابقتها تماماً. يحوّل وضع الوكيل نقطة النهاية إلى ملتقط شامل (getPath() يصبح /) حيث يُؤخذ هدف التمرير
من ترويسة Host الخاصة بالطلب نفسه. لذا فإن أي نقطة نهاية يبدأ مسارها merely بتلك الأحرف —
proxyStats، proxy-health، proxying، … — أصبحت بصمت وكيل تمرير لم يطلبه مؤلف المسار قط: بدائية
تزوير طلبات وتعريض لكل ما يمكن لمسار التمرير الوصول إليه (CWE-1220).
| بيئة التشغيل | الدليل | الحزمة |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (متأثرة؛ مُصلحة في 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (Camel 4.22.0، متأثرة؛ ضابط مُصلح CQ 3.40.0 / Camel 4.22.1) |
يُظهر كلا الوحدتين السلوك المتأثر والمُصلح مقابل PlatformHttpEndpoint الحقيقي.
يحاكي برنامج التشغيل اختبار الانحدار الخاص بالإصلاح نفسه (PlatformHttpEndpointProxyPathTest). ينشئ
نقطة نهاية platform-http:proxyStats — نقطة نهاية إحصاءات يبدأ اسمها مصادفةً بـ proxy — ويسأل
المكوّن ما إذا كانت وكيلاً:
isHttpProxy() القيمة true وينهار getPath() إلى الملتقط الشامل / — أي أن نقطة النهاية قد
تحوّلت إلى وكيل تمرير.isHttpProxy() القيمة false وgetPath() هي proxyStats — فقط المسار الدقيق proxy يختار
وضع الوكيل.تبقى نقطة النهاية الموثقة platform-http:proxy وكيلاً في كلا الإصدارين (معروضة للمقارنة)، مما يؤكد أن
الإصلاح يزيل فقط التصنيف غير المقصود.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: proxyStats isHttpProxy=true, path "/"; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85316-platform-http-proxy-prefix-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"; >>> 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): proxyStats isHttpProxy=true, path "/"
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: isHttpProxy=false, path "proxyStats"
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (دقة غير كافية في التحكم بالوصول) |
| الخطورة | متوسطة |
| ناقل الهجوم | يُعلن مسار (route) عن نقطة نهاية platform-http يبدأ مسارها بـ proxy (لكنها ليست مخصصة للعمل كوسيط وكيل)؛ فتصبح نقطة التقاط شامل تُعيد التوجيه إلى ترويسة Host الخاصة بالمُستدعي |
| التأثير | وكالة غير مقصودة/تزوير طلبات، وكشف كل ما يمكن أن يصل إليه مسار إعادة التوجيه |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24455 |
| الفضل | Claude Security Scan Tool |
الاستشارة الأمنية: https://camel.apache.org/security/CVE-2026-85316.html
وحدة Quarkus المتأثرة مبنية على CQ 3.39.0 (Camel 4.22.0). أما الضابط المُرقَّع فهو CQ 3.40.0 (Camel 4.22.1). العرض التوضيحي ينشئ نقطة نهاية ويفحصها فقط (
isHttpProxy()/getPath())، لذا لا يتم تشغيل أي خادم HTTP؛ وتستخدم وحدة Spring Boot مكوّنcamel-platform-httpالعادي بدلاً من الـ starter.
أصبح PlatformHttpEndpoint.isHttpProxy() يقارن المسار للمساواة
مع proxy (PROXY_PATH.equals(this.path)) بدلاً من استخدام startsWith، بحيث لا تعمل في وضع الوكيل إلا نقطة النهاية الموثّقة platform-http:proxy.
أعد تسمية أي مسار نقطة نهاية يبدأ بـ proxy لكنه غير مخصص ليكون وكيلاً.
نُشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. لا يفحص العرض التوضيحي سوى تصنيف نقطة النهاية داخل العملية ولا يعيد توجيه أي حركة مرور. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.