
نموذج إثبات مفهوم قابل للتشغيل بـ Spring Boot وQuarkus يعيد إنتاج تجاوز المصادقة thread-bound-subject في Apache Camel camel-shiro، مع عناصر تحكم متأثرة وأخرى مُرقّعة.
مُعيد إنتاج إثبات مفهوم قابل للتشغيل لثغرة Apache Camel حيث تجاوز معالج أمان Shiro التحقق من بيانات الاعتماد عندما كان Subject الخاص بـ Shiro المرتبط بالفعل بالخيط الحالي يحمل نفس الـ principal الخاص بالتبادل الوارد. ولأن الخيط الذي يحمل تبادل Camel يُسحب من مجموعة (pool) ويُعاد استخدامه عبر التبادلات، فإن subject تُرك مرتبطًا بتبادل مُصادَق عليه سابقًا كان يمكنه تلبية التحقق لتبادل لاحق قدّم بيانات اعتماد صالحة خاصة به — لم يتم التحقق من كلمة المرور في ذلك التبادل اللاحق أبدًا. لا يحتاج المهاجم إلى أكثر من إرسال طلب يسمّي principal قيد الاستخدام النشط حاليًا.
| بيئة التشغيل | الدليل | الحزمة |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-shiro 4.22.0 (متأثرة؛ مُصلحة 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-shiro (Camel 4.15.0، متأثرة؛ ضابط مُصلح CQ 3.40.0 / Camel 4.22.1) |
كلا الوحدتين تُظهران السلوك المتأثر و السلوك المُصلح.
المسار محمي بواسطة ShiroSecurityPolicy مبني بـ alwaysReauthenticate=false — وهو الوضع الموثّق الذي يُبقى فيه
subject المُصادَق عليه مرتبطًا عمدًا بخيط العامل (المجمّع، المُعاد استخدامه) بين التبادلات.
يقوم برنامج الاستغلال، ضمن خيط HTTP عامل واحد، بتشغيل تبادلين بالترتيب:
ringo بكلمة المرور الصحيحة starr — يُصادِق ويترك subject الخاص بـ Shiro
مرتبطًا بهذا الخيط (كما يفعل طلب مُصادَق عليه سابقًا في خدمة مزدحمة)؛ringo لكن بكلمة مرور خاطئة not-starr، على نفس
الخيط.AuthenticationException، رغم أن نفس المستخدم لا يزال مرتبطًا بالخيط.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: wrong password reaches protected logic; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-84181-shiro-auth-bypass-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: wrong password rejected; >>> 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): wrong password reaches protected logic
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: wrong password rejected
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-shiro (ShiroSecurityProcessor.authenticateUser) |
| CWE | CWE-287 (مصادقة غير سليمة) |
| الخطورة | MEDIUM |
| ناقل الهجوم | طلب يسمّي هوية أساسية (principal) مرتبطة حاليًا بخيط عامل (worker thread) معاد استخدامه، ولا يحمل أي بيانات اعتماد صالحة خاصة به |
| التأثير | تجاوز المصادقة: يُقبل طلب غير مُصادَق عليه بوصفه هوية أساسية مرتبطة مسبقًا؛ ولا يتم التحقق من كلمة مروره أبدًا |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24439 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-84181.html
لم يعد ShiroSecurityProcessor.authenticateUser يتخطى تسجيل الدخول
عندما يحمل الكائن (subject) المرتبط بالخيط بالفعل نفس الهوية الأساسية. كان الكود السابق يتوقف مبكرًا عند الشرط
currentUser.isAuthenticated() && username.equals(currentUser.getPrincipal())؛ فتطابق اسم المستخدم لا يقول شيئًا عن
كلمة المرور المقدَّمة مع هذا التبادل. أصبح المعالج الآن يستدعي currentUser.login(token) في كل تبادل،
بحيث يتم التحقق دائمًا من بيانات الاعتماد المقدَّمة. لا يزال alwaysReauthenticate يتحكم في عمر rememberMe
للكائن (subject)، لكنه لم يعد يحدد ما إذا كان يتم التحقق من كلمة المرور أم لا.
تأكد من مسح كائن Shiro (subject) من الخيط في نهاية كل تبادل (حتى لا يمكن توريث أي كائن لتبادل لاحق) — على سبيل
المثال باستخدام onCompletion/معالج يستدعي ThreadContext.unbindSubject() الخاص بـ Shiro — إلى أن تتمكن من الترقية.
يُنشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلها. إن المستخدمين وكلمات المرور والمفاتيح الواردة هنا هي بيانات محلية خاملة. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.