
CVE-2026-85315 के लिए रन करने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, जो Camel Spring Boot और Quarkus में camel-grpc कंज़्यूमर अपवाद संदेश प्रकटीकरण (CWE-209) को प्रदर्शित करता है।
Apache Camel भेद्यता के लिए चलाने योग्य प्रमाण-अवधारणा पुनरुत्पादक, जिसमें gRPC उपभोक्ता के पीछे का मार्ग
विफल होने पर, मार्ग अपवाद का संदेश gRPC Status विवरण में कॉपी कर दिया जाता था। स्थिति कारण
(withCause(...)) के विपरीत, जो सर्वर तक ही सीमित रहता है, विवरण कॉलिंग क्लाइंट को प्रेषित किया जाता है, इसलिए एक
बाहरी कॉलर जो विफलता उत्पन्न कर सकता है, आंतरिक त्रुटि संदेश पढ़ सकता था — व्यवहार में अपवाद संदेशों में ले जाए गए
क्लास और पैकेज नाम, फ़ाइल पथ, होस्ट नाम और कनेक्शन विवरण (CWE-209)। यह उसी अनम्यूटेड-उपभोक्ता-अपवाद परिवार का
gRPC सदस्य है जिसके साथ knative, mina और CXF सलाहकार प्रकाशित किए गए थे।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-grpc 4.22.0 (प्रभावित; ठीक किया गया 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-grpc (Camel 4.22.0, प्रभावित; ठीक किया गया नियंत्रण CQ 3.40.0 / Camel 4.22.1) |
दोनों मॉड्यूल वास्तविक camel-grpc उपभोक्ता के विरुद्ध प्रभावित और ठीक किए गए व्यवहार को प्रदर्शित करते हैं।
प्रत्येक मॉड्यूल एक camel-grpc उपभोक्ता (camel-grpc के अपने परीक्षण प्रोटो से PingPong सेवा) चलाता है जिसका मार्ग
हमेशा आंतरिक-जैसे संदेश के साथ विफल होता है:
Internal failure contacting jdbc:postgresql://db.internal.local:5432 (user=svc_admin) [CVE-2026-85315]
verifier endpoint /exploit/attack एक external gRPC client की भूमिका निभाता है: यह PingSyncSync को कॉल करता है, StatusRuntimeException को पकड़ता है, और सर्वर द्वारा वापस भेजे गए Status कोड और description की रिपोर्ट करता है।
muteException consumer option डिफ़ॉल्ट रूप से true है, इसलिए description सामान्य "Exchange processing failed" होता है और वास्तविक message कभी सर्वर से बाहर नहीं जाता (यह केवल local-only status cause में रखा जाता है)।# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: description leaks the internal message; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85315-grpc-exception-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: description is "Exchange processing failed"; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): description leaks the internal message
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: description is "Exchange processing failed"
प्रत्येक मॉड्यूल 8080 पर verifier को सेवा देता है और उसी प्रक्रिया के भीतर 50051 पर camel-grpc consumer चलाता है; केवल
8080 ही publish किया गया है।
| Property | Value |
|---|---|
| Component | camel-grpc (GrpcMethodHandler, consumer) |
| CWE | CWE-209 (संवेदनशील जानकारी युक्त त्रुटि संदेश का निर्माण) |
| Severity | MEDIUM |
| Attack vector | एक बाहरी gRPC client रूट विफलता उत्पन्न करता है और प्रेषित Status विवरण पढ़ता है |
| Impact | आंतरिक त्रुटि विवरण (class/package नाम, पथ, host नाम, कनेक्शन विवरण) कॉलर को उजागर हो जाता है |
| Affected Versions | 4.0.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| Fixed Versions | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24478 |
| Credit | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85315.html
Quarkus का प्रभावित मॉड्यूल CQ 3.39.0 (Camel 4.22.0) पर आधारित है। पैच किया गया नियंत्रण CQ 3.40.0 (Camel 4.22.1) है।
GrpcMethodHandler एक muteException consumer विकल्प जोड़ता है (डिफ़ॉल्ट
true)। सक्षम होने पर, विफल exchange प्रेषित status में सामान्य विवरण "Exchange processing failed" उत्पन्न करता है;
रूट exception अभी भी स्थानीय रूप से withCause(...) के माध्यम से संलग्न रहता है, जिसे gRPC client को नहीं भेजता।
पिछले व्यवहार को बहाल करने के लिए endpoint पर muteException=false सेट करें।
विफलताओं को onException handler में एक स्पष्ट status पर मैप करें ताकि framework कभी भी exception संदेश को
विवरण में कॉपी न करे।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को
समझने, यह सत्यापित करने में मदद करने के लिए कि क्या वे प्रभावित हैं, और पुष्टि करने के लिए कि अपग्रेड करने से यह
हल हो जाती है। "internal" संदेश एक हानिरहित placeholder (db.internal.local, svc_admin) है और पूरा प्रदर्शन
एक ही प्रक्रिया में चलता है। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।