
أداة إثبات مفهوم قابلة للتشغيل لإعادة إنتاج تجاوز التحقق من المُصدر (issuer) في Apache Camel camel-keycloak (CWE-287)، تُوضّح السلوك المتأثر والسلوك المُصحَّح في Spring Boot وQuarkus.
مُعيد إنتاج عملي قابل للتشغيل لثغرة Apache Camel حيث كان KeycloakSecurityProcessor في camel-keycloak
يتحقق من مُصدر رمز تم استنطاقه (introspected token) فقط عندما كانت استجابة الاستنطاق
تحتوي فعليًا على ادعاء iss. وعند غياب هذا الادعاء كان الفحص يُتخطّى بدلًا من اعتباره
فشلًا، لذا كان يمكن قبول رمز لم يُصدره المُصدر المُهيّأ — بشرط أن تُجيب نقطة نهاية الاستنطاق
بـ active دون تسمية مُصدر. وحيثما يقوم نشرٌ ما بالاستنطاق مقابل نقطة نهاية تُغفل iss وتخدم
أكثر من مُصدر واحد، فإن النتيجة هي أنه يصادق على مُتصل كان ينبغي رفضه (CWE-287).
| بيئة التشغيل | الدليل | الحزمة التقنية |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-keycloak 4.22.0 (متأثرة؛ مُصلحة في 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-keycloak (Camel 4.22.0، متأثرة؛ ضابط التحقق المُصلح CQ 3.40.0 / Camel 4.22.1) |
يُظهر كلا الوحدتين السلوك المتأثر و السلوك المُصلح مقابل KeycloakSecurityProcessor الحقيقي.
يُهيّئ برنامج التشغيل KeycloakSecurityPolicy مع validateIssuer=true (المُصدر المتوقع
http://localhost:8080/realms/test-realm) ومُستنطِق رمز يُبلّغ بأن الرمز نشط لكنه يُرجع
بدون ادعاء iss — وهو بالضبط ما تُنتجه نقطة نهاية استنطاق وسيط/بوابة، لأن RFC 7662 يجعل iss
اختياريًا. ثم يقود KeycloakSecurityProcessor بترويسة Authorization: Bearer <attacker-token> ويُبلّغ
عمّا إذا كان المسار المحمي قد تم الوصول إليه.
iss يجعل المعالج يتخطّى فحص المُصدر، فيُقبل الرمز ويتم الوصول إلى
المسار — أي تتم مصادقة رمز من مُصدر غير مقصود.iss يُعدّ فشلًا في التحقق؛ فيُطلق المعالج CamelAuthorizationException
("Token issuer missing…") ولا يتم الوصول إلى المسار أبدًا.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: route reached, token accepted; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85301-keycloak-issuer-bypass-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelAuthorizationException "Token issuer missing"; >>> 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): route reached, token accepted
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: CamelAuthorizationException "Token issuer missing"
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-keycloak (KeycloakSecurityProcessor.validateIssuerFromIntrospection) |
| CWE | CWE-287 (مصادقة غير سليمة) |
| الخطورة | متوسطة |
| ناقل الهجوم | رمز مميز من جهة إصدار غير مقصودة، تم استعلامه عبر نقطة نهاية تحذف iss وتخدم أكثر من جهة إصدار واحدة، مع تفعيل validateIssuer=true |
| التأثير | يقوم النشر بمصادقة مستدعٍ لم تُصدر جهة الإصدار المُهيّأة رمزه المميز |
| الإصدارات المتأثرة | من 4.15.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصحّحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24448 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-85301.html
وحدة Quarkus المتأثرة مبنية على CQ 3.39.0 (Camel 4.22.0)، حيث تُقابل
camel-quarkus-keycloakإصدار Camel متأثرًا. عنصر التحكم المُرقّع هو CQ 3.40.0 (Camel 4.22.1).
أصبح KeycloakSecurityProcessor الآن يعامل غياب المطالبة iss على أنه
فشل في التحقق: فعند تفعيل التحقق من جهة الإصدار ولا تحمل نتيجة الاستعلام أي جهة إصدار، فإنه يرمي
CamelAuthorizationException بدلًا من العودة المبكرة والسماح بمرور الطلب. كان الكود السابق يتخطى
المقارنة كلما غابت المطالبة، مما ترك جهة الإصدار غير مُتحقَّق منها تحديدًا للرموز المميزة التي لم تُسمِّ أي
جهة إصدار.
تأكد من أن نقطة نهاية الاستعلام تُرجع المطالبة iss وتخدم جهة إصدار واحدة فقط، بحيث يكون الرمز المميز من أي جهة
إصدار أخرى إما مُسمّى (ومرفوضًا) أو لا يتم الاستعلام عنه أبدًا كرمز نشط.
نُشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلها. إن مستعلم الرموز المميزة هو stub داخل العملية ولا يتضمن أي خادم Keycloak حقيقي أو استدعاء شبكي؛ و"رمز المهاجم المميز" هو سلسلة نصية عنصر نائب غير شفافة. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.