
مُعيدات إنتاج قابلة للتشغيل لـ Spring Boot وQuarkus خاصة بـ CVE-2026-84180، توضح تسريب استثناءات مستهلك HTTP في camel-knative وتتحقق من إصلاح muteException.
مُعيد إنتاج إثبات مفهوم قابل للتشغيل لثغرة Apache Camel حيث كان مستهلك Knative HTTP، عند فشل تبادل على جانب
المستهلك، يكتب الاستثناء الناتج مرة أخرى إلى المستدعي البعيد كجسم استجابة HTTP — بما في ذلك اسم الصنف والرسالة
وتتبّع المكدس الكامل. لذلك كان بإمكان مُرسِل خارجي إحداث فشل وقراءة تفاصيل داخلية عن النشر: أسماء الأصناف والحزم،
وأسماء نظام الملفات أو المضيف المحمولة في رسائل الاستثناء، وشكل المسار، وحيثما تضمّنت رسالة استثناء سلسلة اتصال أو
إعدادات — تلك البيانات مباشرةً. كان camel-knative هو مستهلك عائلة HTTP المتبقي الذي لم يكن قد وُوفِق مع سلوك
muteException المُعتمد لمستهلكي HTTP الآخرين بموجب CAMEL-23651.
| بيئة التشغيل | الدليل | المكدس |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (متأثر؛ مُصلَح في 4.22.1)، المستهلك على خادم platform-http من Vert.x الخاص بـ Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0، متأثر؛ عنصر التحكم المُصلَح CQ 3.40.0 / Camel 4.22.1)، المستهلك على Quarkus HTTP |
تُظهر كلتا الوحدتين السلوك المتأثر و السلوك المُصلَح.
يستقبل مسار مصدر Knative HTTP (مستهلك) حدث CloudEvent ثم يفشل أثناء معالجته — ليمثّل أي مسار يصطدم بخطأ داخلي
(فشل استعلام مصدر بيانات، مهلة في خدمة لاحقة، خلل برمجي). يُطلق المسار IllegalStateException تحمل رسالته تفاصيل
داخلية محاكاة: اسم مضيف داخلي وهمي (internal-db.prod.svc.cluster.local)، وعنوان URL وهمي لـ JDBC، ورمز علامة
INTERNAL-DETAIL-MARKER-7F3A2B. المهاجم هو ببساطة مستدعٍ بعيد: يرسل عبر POST حدث CloudEvent واحدًا سليم التكوين إلى
المستهلك ويقرأ الاستجابة التي يعيدها المستهلك.
at com.example... / إطارات إطار العمل.muteException (القيمة الافتراضية
true)، لذا تُعاد حالة الخطأ لكن لا تصل أي تفاصيل عن الاستثناء إلى المستدعي.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: stack trace leaks; prints >>> PROVEN
docker compose down
# Patched control: rebuild with the fixed version, then run on the host
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-84180-knative-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; prints >>> 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): stack trace leaks; >>> PROVEN
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: empty body; >>> Not exploited
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-knative (مستهلك Knative HTTP، KnativeHttpConsumer.computeResponseBody) |
| CWE | CWE-209 (توليد رسالة خطأ تحتوي على معلومات حساسة) |
| الخطورة | متوسطة |
| ناقل الهجوم | يستدعي طرف بعيد فشلًا في المسار على جانب المستهلك ويقرأ تفاصيل الاستثناء من جسم الاستجابة |
| التأثير | الكشف عن المعلومات: صنف الاستثناء/رسالته/تتبّع المكدس (أسماء المضيفين الداخلية، أسماء الحزم، شكل المسار، سلاسل الاتصال المضمّنة) تصل إلى مرسل خارجي |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24428 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-84180.html
أصبح KnativeHttpConsumer.computeResponseBody يتحقق من خيار جديد
muteException (خاص بالمستهلك، القيمة الافتراضية true). عند الكتم، يُنتج التبادل الفاشل جسم استجابة فارغًا
(new byte[0]) بدلًا من تتبّع المكدس — والجسم الفارغ مقصود للحفاظ على حالة الخطأ (فالجسم null سيجعل المستدعي يرسل 204 No Content). اضبط muteException=false لاستعادة المخرجات السابقة.
وهذا يجعل camel-knative متوافقًا مع بقية مستهلكي عائلة HTTP (CAMEL-23651).
أضف معالج onException إلى مسار المستهلك يضبط جسم الاستجابة صراحةً (على سبيل المثال جسمًا فارغًا
أو رسالة عامة)، حتى لا يكتب الإطار الاستثناء أبدًا في استجابة المستدعي.
يُنشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. اسم المضيف "الداخلي" وعنوان URL الخاص بـ JDBC والرمز المميّز في المسار الفاشل هي عناصر محلية وهمية غير فعّالة — ولا يتعلق بها أي سرّ حقيقي. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.