
CVE-2026-84178 के लिए रन करने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, जो Apache Camel camel-oauth के authorization-code callback में एक लॉगिन CSRF है जो state की पुष्टि किए बिना कोड को redeem करता है।
state)Apache Camel की उस भेद्यता के लिए चलाने योग्य proof-of-concept पुनरुत्पादक, जिसमें OAuth authorization-code callback
में कोई state पैरामीटर नहीं था जो इसे उस authorization request से बांधता जिसने flow शुरू किया था, और न ही इसकी
पुष्टि की गई थी। इसलिए किसी भी ब्राउज़र में प्राप्त किया गया authorization code callback पर redeem किया जा सकता था और
उस सत्र से जोड़ा जा सकता था जिसने इसे प्रस्तुत किया — login cross-site request forgery: एक पीड़ित को चुपचाप उस
पहचान के रूप में साइन इन कर दिया जाता है जिसे हमलावर नियंत्रित करता है, इसलिए पीड़ित की आगामी क्रियाएँ और डेटा हमलावर के खाते में चले जाते हैं। (यही
अमान्यीकृत callback post-authentication redirect लक्ष्य को प्रभावित करने की भी अनुमति देता था — एक open redirect।)
जैसा कि advisory में उल्लेख है, state जाँच code के redeem होने से पहले चलती है, इसलिए यह अंतर identity provider के साथ
किसी भी इंटरैक्शन के बिना पहुँच योग्य है।
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-oauth 4.22.0 (प्रभावित; ठीक किया गया 4.22.1), callback 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), callback camel-quarkus-platform-http के माध्यम से |
दोनों मॉड्यूल प्रभावित और ठीक किए गए व्यवहार को प्रदर्शित करते हैं।
वास्तविक, असंशोधित OAuthCodeFlowCallback processor callback endpoint को संभालता है। एक छोटा stub OAuth
Camel registry में पंजीकृत है ताकि callback किसी लाइव identity provider के बिना चले — यह केवल IdP का स्थान लेता है,
और रिकॉर्ड करता है कि authorization code कब redeem किया गया (जो, वास्तविक flow में, परिणामी पहचान को प्रस्तुत करने वाले
सत्र से बांधता है)। हमलावर बस callback को एक code और कोई मेल खाता state नहीं के साथ हिट करता है:
state आवश्यक है) — code कभी redeem नहीं होता।cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
प्रभावित बिल्ड पर अपेक्षित आउटपुट:
Request: GET /callback?code=ATTACKER-SUPPLIED-AUTH-CODE (no 'state' parameter)
Callback HTTP status: 302
>>> PROVEN: the callback redeemed the authorization code ... WITHOUT verifying a state parameter ... login CSRF.
| Property | Value |
|---|---|
| घटक | camel-oauth (authorization-code callback, OAuthCodeFlowCallback) |
| CWE | CWE-352 (Cross-Site Request Forgery) |
| गंभीरता | MEDIUM |
| आक्रमण वेक्टर | एक callback अनुरोध जिसमें authorization code हो, लेकिन session के authorization अनुरोध से बंधा कोई state न हो |
| प्रभाव | Login CSRF (पीड़ित आक्रमणकारी-नियंत्रित पहचान के रूप में साइन इन हो जाता है); विश्वसनीय origin से open redirect |
| प्रभावित संस्करण | 4.11.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24437 |
| श्रेय | Claude Security Scan Tool |
सलाह: https://camel.apache.org/security/CVE-2026-84178.html
अब callback एकल-उपयोग state पैरामीटर ले जाता है और सत्यापित करता है जो session द्वारा आरंभ किए गए authorization अनुरोध से बंधा होता है: expectedState = session.removeValue(OAUTH_STATE), जिसकी तुलना (constant-time) state query पैरामीटर से की जाती है। यदि कोई flow प्रगति पर नहीं है, या state मेल नहीं खाता, तो callback code को redeem करने से पहले अनुरोध को अस्वीकार कर देता है।
callback को ऐसे घटक के पीछे रखें जो CSRF state बाइंडिंग लागू करता हो, या जब तक आप अपग्रेड नहीं कर सकते, session स्थापित करने के लिए OAuth code-flow callback पर निर्भर न रहें।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने में मदद करने के लिए कि क्या वे प्रभावित हैं, और पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाता है। stub identity provider और "attacker code" निष्क्रिय स्थानीय fixtures हैं। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।