
إثبات مفهوم قابل للتشغيل لـ CVE-2026-80312، وهو حارس OAuth من نوع fail-open في Apache Camel camel-oauth، مع نسخ إعادة إنتاج متأثرة ومُصلحة لكل من Spring Boot وQuarkus.
أداة إثبات مفهوم (PoC) قابلة للتشغيل لإعادة إنتاج ثغرة Apache Camel حيث أن معالجات camel-oauth التي تحمي
مسارًا لم تكن توقف التبادل (exchange) عندما يتعذّر إكمال المصادقة. فحيث كان ينبغي لفشل إنشاء
جلسة موثّقة أن يُنهي التوجيه ويُعيد خطأً، كان المعالج يضبط رمز استجابة لكنه يُعيد التحكم إلى المسار — فتابع الطلب
إلى نقطة النهاية المحمية كما لو أن المصادقة قد نجحت. والنتيجة هي حارس مصادقة يعمل بنمط fail-open: يصل
المتصل غير الموثّق إلى ما يفعله المسار لاحقًا، على مسار الطلب العادي، دون أي إعداد خاص.
| بيئة التشغيل | الدليل | المكوّنات |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-oauth 4.22.0 (متأثر؛ مُصلَح في 4.22.1)، HTTP عبر camel-undertow |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-oauth 3.39.0 (Camel 4.22.0، متأثر؛ التحكم المُصلَح 3.40.0 / Camel 4.22.1)، HTTP عبر camel-quarkus-platform-http |
يُظهر كلا الوحدتين السلوك المتأثر و السلوك المُصلَح. (تستخدم وحدة Spring Boot camel-undertow كناقل
HTTP — فالحارس مستقل عن الناقل، وcamel-platform-http-starter 4.22.0 مبني على خط Spring Boot
مختلف عن 3.5.x.)
يكشف مسار عن /protected، محمي بواسطة OAuthBearerTokenProcessor؛ ولا ينبغي أن يصل إلى
الخطوات المحمية التالية سوى طلب موثّق. يرسل المهاجم GET /protected دون ترويسة Authorization.
exchange.setRouteStop(true)، فسقط المسار
إلى الخطوات المحمية → HTTP 200 والمحتوى المحمي.rejectUnauthorized(...)، الذي يرد بـ 401 ويوقف المسار → فلا تُنفَّذ الخطوات
المحمية أبدًا.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
الناتج المتوقع على البناء المتأثر:
Sent: GET /protected (NO Authorization header)
Response status: 200
Response body : PROTECTED-DATA: reached the protected endpoint WITHOUT authenticating
>>> PROVEN: the OAuth guard failed open ...
على البناء المُثبَّت: Response status: 401، والجسم Authorization header، ولم تُنفَّذ الخطوات المحمية قط.
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-oauth (معالجات حارس المسار، مثل OAuthBearerTokenProcessor) |
| CWE | CWE-287 (مصادقة غير سليمة) |
| الخطورة | عالية |
| ناقل الهجوم | طلب عادي إلى مسار محمي بـ OAuth حيث يتعذّر إتمام المصادقة (هنا: غياب ترويسة Authorization) |
| التأثير | وصول غير مُصادَق إلى نقطة النهاية المحمية (تجاوز المصادقة) |
| الإصدارات المتأثرة | من 4.11.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلَحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24411 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-80312.html
تستدعي معالجات الحارس الآن rejectUnauthorized(...) / reject(...) على كل مسار يتعذّر فيه إتمام المصادقة،
مما يضبط حالة HTTP (401) و يستدعي exchange.setRouteStop(true) بحيث لا تُنفَّذ أي خطوة لاحقة
لطلب لم يُصادِق عليه المعالج. "يجب رفض غياب بيانات الاعتماد بقوة لا تقل عن رفض بيانات الاعتماد غير الصالحة."
ضع فحصًا صريحًا للتفويض بعد الحارس، أو تأكّد من أن المسار يتوقف عند غياب خاصية التبادل
CamelOAuthUserProfile، إلى أن تتمكّن من الترقية.
نُشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.