
أداة إعادة إنتاج (Proof-of-concept) لتجاوز فلتر الترويسات في Apache Camel camel-undertow (CVE-2026-78329)، تعرض حقن ترويسات websocket.* وتوفر تفاصيل الإصدارات المتأثرة والتحقق من الإصلاح.
websocket.*)مُعيد إنتاج قابل للتشغيل (proof-of-concept) لثغرة Apache Camel، حيث ضبطت UndertowEndpoint
headerFilterStrategy افتراضيًا على الاستراتيجية الأساسية HttpHeaderFilterStrategy ودفعت هذا الكائن إلى UndertowHttpBinding
التي تنشئها، باستبدال UndertowHeaderFilterStrategy التي تثبّتها DefaultUndertowHttpBinding. وما لم
يوفّر النشر (deployment) ربطًا مخصصًا أو headerFilterStrategy صريحًا، فإن التصفية الخاصة بـ undertow لم تعمل
أبدًا — كان كائن الاستراتيجية يُنشأ ثم يُستبدل فورًا قبل أن يُستشار.
| بيئة التشغيل | المجلد | المكدس |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-undertow 4.18.2 |
Camel Quarkus: لا توجد إضافة
camel-quarkus-undertow(يستخدم Quarkus مكدس Vert.x HTTP الخاص به)، لذا لا يمكن تشغيل هذا المكوّن على Camel Quarkus — مُعيد الإنتاج يعمل على Spring Boot فقط.
تتمثل النتيجة في أن بادئة رؤوس Exchange القديمة websocket. لا تتم تصفيتها عند حد نقل undertow
في أيٍّ من الاتجاهين. لذلك يُسقط مستهلك HTTP خاص بـ undertow رؤوس الأسلاك الواردة بالشكل نفسه
(websocket.connectionKey, websocket.connectionKey.list, websocket.sendToAll, …) على الـ Exchange، حيث
يقرؤها منتج WebSocket خاص بـ undertow كتوجيهات إرسال، ويمكن دفعه للتسليم إلى نظير آخر غير
الذي قصده المسار — وهي نفس فئة اختطاف الإرسال الموجودة في atmosphere-websocket
CVE-2026-71300.
يرسل مُعيد الإنتاج هذا طلب HTTP يحمل رؤوس إرسال websocket.* بالإضافة إلى رأس تحكم Camel*،
ويُظهر ما وصل فعليًا إلى الـ Exchange: رؤوس websocket.* تعبر الحدود (بدون تصفية)، بينما يُجرَّد Camel*
— ممّا يثبت أن التصفية الأساسية (وليست تصفية undertow) هي التي كانت سارية.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
المخرجات المتوقعة على نسخة متأثرة:
What actually reached the Exchange, as echoed by the undertow route:
websocket.connectionKey.list on Exchange = [attacker-connection-key]
websocket.sendToAll on Exchange = [true]
CamelFoo on Exchange (control) = []
>>> PROVEN: the undertow endpoint applied the base HttpHeaderFilterStrategy (Camel* filtered) instead of the
>>> UndertowHeaderFilterStrategy, so the legacy websocket.* dispatch headers passed onto the Exchange ...
النشرة الأمنية: https://camel.apache.org/security/CVE-2026-78329.html
لم يعد endpoint الخاص بـ undertow يستبدل UndertowHeaderFilterStrategy الخاصة بالربط، والتي تصفّي
بادئة websocket. (المضافة في CAMEL-23588) في كلا الاتجاهين — لذلك تُجرَّد رؤوس الإرسال عند
حدود النقل ولم يعد بإمكان مُرسِل خارجي حقنها.
يُنشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة، والتحقق مما إذا كانوا متأثرين بها، والتأكد من أن الترقية تحلّها. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تشغّلها.
| الخاصية | القيمة |
|---|
| المكوّن | camel-undertow (camel-undertow-starter) |
| CWE | CWE-20 (تحقق غير سليم من المدخلات) → CWE-74 (حقن) |
| ناقل الهجوم | رؤوس websocket.* الواردة على مستهلك HTTP خاص بـ undertow، تُقرأ كتوجيهات إرسال بواسطة منتج WebSocket خاص بـ undertow |
| الأثر | السيطرة على قرار الإرسال لمنتج WebSocket — التسليم إلى / الامتناع عن نظائر WebSocket عشوائية |
| الإصدارات المتأثرة | من 4.11.0 حتى ما قبل 4.14.9، ومن 4.15.0 حتى ما قبل 4.18.4، ومن 4.19.0 حتى ما قبل 4.22.0 |
| الإصدارات المُصلَحة | 4.14.9، 4.18.4، 4.22.0 |
| JIRA | CAMEL-24360 |
| الإسناد | Andrea Cosentino (Apache Software Foundation); Barak Srour (Apiiro) |