
Apache Camel camel-jetty में enableCORS द्वारा किसी भी ऑरिजिन को क्रेडेंशियल्स के साथ प्रतिबिंबित करने वाले CVE-2026-85313 को पुनः उत्पन्न करने वाला एक रन करने योग्य Spring Boot प्रूफ-ऑफ-कॉन्सेप्ट, साथ ही एक निश्चित-संस्करण नियंत्रण।
enableCORS क्रेडेंशियलयुक्त किसी भी ओरिजिन तक पहुँच प्रदान करता हैApache Camel की उस भेद्यता के लिए चलाने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, जिसमें Jetty endpoint पर enableCORS=true सेट करने पर Jetty का CrossOriginFilter उसके डिफ़ॉल्ट मानों के साथ इंस्टॉल हो जाता था — जो हर ओरिजिन को प्रतिबिंबित करता है और क्रेडेंशियल की अनुमति देता है। जिस ऑपरेटर ने केवल CORS का अनुरोध किया था, उसे ऐसी नीति मिली जो किसी भी ओरिजिन पर मौजूद पेज को endpoint पर क्रेडेंशियलयुक्त क्रॉस-ओरिजिन अनुरोध करने और प्रतिक्रियाएँ पढ़ने देती है। प्रतिबिंबित ओरिजिन के साथ Access-Control-Allow-Credentials: true ठीक वही क्रेडेंशियलयुक्त किसी-भी-ओरिजिन कॉन्फ़िगरेशन है जिसे Fetch मानक * के माध्यम से व्यक्त नहीं होने देता — प्रतिबिंबन उस नियम को दरकिनार करने का सामान्य तरीका है (CWE-942)।
केवल Spring Boot। यह रिप्रोड्यूसर एक ही Camel Spring Boot मॉड्यूल के साथ आता है। दोष
camel-jettyमें है, जो एक Jetty HTTP सर्वर एम्बेड करता है। Camel Quarkus में कोईcamel-quarkus-jettyएक्सटेंशन नहीं है — Quarkus HTTP को Vert.x (platform-http) के माध्यम से परोसता है — इसलिए रिप्रोड्यूस करने के लिए कोई Quarkus समकक्ष नहीं है। (सहयोगी सलाह CVE-2026-85316platform-http-vertxमें उसी दोष वर्ग को कवर करती है।) Spring Boot मॉड्यूल प्रभावित और ठीक किए गए व्यवहार दोनों को प्रदर्शित करता है।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-jetty 4.22.0 (प्रभावित; ठीक किया गया 4.22.1), Jetty 12.1.11 |
एक ही प्रक्रिया में दो Jetty सर्वर चलते हैं: भेद्य endpoint /protected (पोर्ट 8081) को enableCORS=true के साथ घोषित किया गया है, और एक सत्यापनकर्ता endpoint /exploit/attack (पोर्ट 8080) हमलावर के ब्राउज़र की भूमिका निभाता है। प्रत्येक कॉल पर सत्यापनकर्ता /protected पर Origin: https://evil.example ले जाते हुए एक क्रॉस-ओरिजिन GET भेजता है — ऐसा ओरिजिन जिसे डिप्लॉयमेंट ने कभी अधिकृत नहीं किया — और लौटाए गए CORS हेडर की रिपोर्ट करता है।
Access-Control-Allow-Origin: https://evil.example को प्रतिबिंबित करती है और Access-Control-Allow-Credentials: true लौटाती है — कोई भी ओरिजिन क्रेडेंशियलयुक्त प्रतिक्रियाएँ पढ़ सकता है।Access-Control-Allow-Credentials अब नहीं भेजा जाता।cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: ACAO reflected + ACAC: true; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85313-jetty-cors-credentials-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: ACAO reflected, ACAC absent; >>> Not exploited
| गुण | मान |
|---|---|
| घटक | camel-jetty (JettyHttpComponent, enableCORS) |
| CWE | CWE-942 (अविश्वसनीय डोमेन के साथ अनुमतिपूर्ण क्रॉस-डोमेन नीति) |
| गंभीरता | मध्यम |
| आक्रमण वेक्टर | किसी भी ओरिजिन पर मौजूद एक पेज केवल enableCORS=true के साथ कॉन्फ़िगर किए गए एंडपॉइंट पर क्रेडेंशियलयुक्त क्रॉस-ओरिजिन अनुरोध जारी करता है |
| प्रभाव | एंडपॉइंट आक्रमणकर्ता के ओरिजिन को प्रतिबिंबित करता है और क्रेडेंशियल प्रदान करता है, इसलिए आक्रमणकर्ता का पेज प्रमाणित प्रतिक्रियाओं को पढ़ सकता है |
| प्रभावित संस्करण | 4.0.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24450 |
| श्रेय | Claude Security Scan Tool |
सलाह: https://camel.apache.org/security/CVE-2026-85313.html
JettyHttpComponent अब enableCORS सेट होने पर अपने स्वयं के CORS डिफ़ॉल्ट लागू करता है: allowCredentials डिफ़ॉल्ट रूप से false होता है, जब तक कि ऑपरेटर इसे स्पष्ट रूप से कॉन्फ़िगर न करे। ओरिजिन प्रतिबिंबन को अछूता छोड़ दिया गया है, इसलिए CORS सक्षम करना उन अनुरोधों के लिए काम करता रहता है जिनमें कोई क्रेडेंशियल नहीं होता; जिस ऑपरेटर को क्रेडेंशियलयुक्त क्रॉस-ओरिजिन अनुरोधों की आवश्यकता होती है, वह filterInit.allowCredentials=true सेट करता है और उससे अपेक्षा की जाती है कि वह filterInit.allowedOrigins में ओरिजिन का नाम निर्दिष्ट करे (और यदि वे ऐसा नहीं करते हैं तो उन्हें चेतावनी दी जाती है)।
enableCORS जो इंस्टॉल करता है उस पर निर्भर रहने के बजाय CrossOriginFilter पैरामीटर को स्पष्ट रूप से कॉन्फ़िगर करें — filterInit.allowedOrigins में अनुमत ओरिजिन का नाम निर्दिष्ट करें और जब तक आपने उनका नाम निर्दिष्ट न किया हो, filterInit.allowCredentials को बंद रखें।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और यह पुष्टि करने में सहायता करने के लिए कि अपग्रेड करने से यह हल हो जाती है। "आक्रमणकर्ता" ओरिजिन एक सौम्य प्लेसहोल्डर (https://evil.example) है और एंडपॉइंट तथा प्रोब दोनों रिप्रोड्यूसर के भीतर चलते हैं। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।