
مُعيد إنتاج قابل للتشغيل بـ Spring Boot وQuarkus لـ CVE-2026-85254، يوضّح تجاوز كبت صدى الترويسات في Apache Camel camel-platform-http عبر حالة أحرف اسم الترويسة، مع عناصر تحكم متأثرة ومُصلحة.
مُعيد إنتاج قابل للتشغيل لإثبات المفهوم لثغرة Apache Camel حيث أن الحارس الذي يمنع ارتداد ترويسة طلب
إلى الاستجابة كان يقارن أسماء الترويسات بحساسية لحالة الأحرف، بينما أسماء ترويسات HTTP
غير حساسة لحالة الأحرف. كان بإمكان المستدعي تجاوز الكبت ببساطة عبر تغيير حالة أحرف اسم الترويسة — وتحت
HTTP/2 لم يكن يتطابق إطلاقًا، لأن البروتوكول يفرض أن تكون أسماء الترويسات بأحرف صغيرة على السلك، لذا كان
الكبت خاملًا لكل طلب HTTP/2. النتيجة هي أن المحتوى الذي اختاره المستدعي يُردّ صداه في
الاستجابة (وهو الأساس لهجمات تقسيم الاستجابة وتسميم ذاكرة التخزين المؤقت)، كما يعكس ترويسات بيانات الاعتماد
ذاتها (Authorization، Cookie، Proxy-Authorization) التي يُفترض أن يبقيها الكبت خارج الاستجابة.
| بيئة التشغيل | الدليل | الحزمة |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0 (متأثرة؛ مُصلحة في 4.22.1)، خادم Vert.x الخاص بـ Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-platform-http (Camel 4.15.0، متأثرة؛ ضابط مُصلح CQ 3.40.0 / Camel 4.22.1) |
كلا الوحدتين تُظهران السلوك المتأثر و السلوك المُصلح.
يُقدَّم نقطة نهاية platform-http:/echo. من المفترض أن يقوم HeaderFilterStrategy الخاص بها بكبت ترويسات الطلب
الشائعة من الاستجابة. يفحص برنامج التشغيل الاستراتيجية مباشرةً كما يرسل طلبًا حيًا يحمل ترويسة
بيانات اعتماد بأحرف صغيرة (بنمط HTTP/2).
Authorization (بالشكل القياسي) لكن ليس authorization (بأحرف صغيرة)، وطلب
حي يحمل authorization: Bearer <secret> يُردّ صداه في الاستجابة.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: lowercase header echoed back; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85254-platform-http-header-echo-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: suppressed; >>> 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): lowercase header echoed back
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: suppressed
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-platform-http (PlatformHttpEndpoint، COMMON_HTTP_REQUEST_HEADERS) |
| CWE | CWE-178 (المعالجة غير الصحيحة لحساسية حالة الأحرف) |
| الخطورة | متوسطة |
| ناقل الهجوم | ترويسة طلب يختلف اسمها في حالة الأحرف عن التهجئة القياسية (مثل أي طلب HTTP/2) |
| التأثير | ارتداد محتوى الترويسة الذي يختاره المستدعي إلى الاستجابة — تقسيم الاستجابة / تسميم ذاكرة التخزين المؤقت، وارتداد ترويسات بيانات الاعتماد التي يُفترض أن يمنعها الكتم |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24453 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-85254.html
يحتفظ PlatformHttpEndpoint الآن بـ COMMON_HTTP_REQUEST_HEADERS في
TreeSet(String.CASE_INSENSITIVE_ORDER) غير حسّاس لحالة الأحرف بدلاً من Set.of(...) الحسّاس لحالة الأحرف، بحيث
يطابق الكتم بغض النظر عن طريقة كتابة المستدعي لحالة أحرف اسم الترويسة — بما في ذلك الأسماء المكتوبة بأحرف صغيرة
بالكامل التي يتطلبها HTTP/2.
أزل الترويسات المعنية أمام نقطة نهاية Camel، أو احذفها من الاستجابة في المسار بدلاً من الاعتماد على الكتم المدمج.
يُنشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. قيمة الترويسة المحقونة هي عنصر اختبار محلي خامل. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.