
CVE-2026-85300 के लिए रन करने योग्य Spring Boot और Quarkus रिप्रोड्यूसर, जो camel-pqc द्वारा अनुमतिपूर्ण umask-व्युत्पन्न फ़ाइल अनुमतियों के साथ निजी कुंजियाँ लिखने को प्रदर्शित करता है और फ़िक्स का सत्यापन करता है।
Apache Camel की उस भेद्यता के लिए चलाने योग्य प्रूफ़-ऑफ़-कॉन्सेप्ट पुनरुत्पादक, जिसमें camel-pqc का
FileBasedKeyLifecycleManager उत्पन्न कुंजी सामग्री को डिस्क पर उसी अनुमति के साथ लिखता था जो प्रक्रिया के
डिफ़ॉल्ट umask से उत्पन्न होती थी, बजाय फ़ाइल को केवल उसके स्वामी तक सीमित करने के। ऐसे होस्ट पर जिसका umask
समूह या विश्व पठन की अनुमति देता है (सामान्य 022), अनएन्क्रिप्टेड निजी कुंजी अन्य स्थानीय खातों द्वारा
पठनीय थी। यह जोखिम दूरस्थ प्रेषक के बजाय स्थानीय पक्ष के लिए है, लेकिन जहाँ यह लागू होता है वहाँ परिणाम
पूर्ण है: निजी कुंजी का कब्ज़ा उसके द्वारा किए जाने वाले प्रत्येक हस्ताक्षर और कुंजी विनिमय को विफल कर देता है।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-pqc 4.22.0 (प्रभावित; 4.22.1 में ठीक किया गया) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-pqc (Camel 4.22.0, प्रभावित; नियंत्रण CQ 3.40.0 / Camel 4.22.1 में ठीक किया गया) |
दोनों मॉड्यूल प्रभावित और ठीक किए गए व्यवहार को प्रदर्शित करते हैं। दोनों umask 022 (सामान्य डिफ़ॉल्ट)
के अंतर्गत चलते हैं, जो इस दोष का आधार है।
ड्राइवर वास्तविक FileBasedKeyLifecycleManager का उपयोग करता है: यह एक RSA कुंजी युग्म को एक नई निर्देशिका में
संग्रहीत करता है (manager.storeKey("k1", keyPair, new KeyMetadata("k","RSA"))) और फिर लिखी गई
k1.private.json की POSIX अनुमतियाँ पढ़ता है।
umask 022 के अंतर्गत rw-r--r-- (0644) — इसलिए
समूह और अन्य उपयोगकर्ता अनएन्क्रिप्टेड निजी कुंजी पढ़ सकते हैं।rw------- (0600, केवल स्वामी) के रूप में लिखी जाती है।# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: rw-r--r-- private key; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
umask 022 && java -jar target/cve-2026-85300-pqc-key-permissions-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw------- ; >>> 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): rw-r--r-- private key
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
umask 022 && java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw-------
| Property | Value |
|---|---|
| Component | camel-pqc (FileBasedKeyLifecycleManager.storeKey) |
| CWE | CWE-276 (Incorrect Default Permissions) |
| Severity | MEDIUM |
| Attack vector | A local account able to read the key directory on a host with a permissive (e.g. 022) umask |
| Impact | Disclosure of the unencrypted private key to other local accounts |
| Affected Versions | From 4.12.0 before 4.18.5, from 4.19.0 before 4.22.1 |
| Fixed Versions | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24447 |
| Credit | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85300.html
प्रभावित Quarkus मॉड्यूल CQ 3.39.0 (Camel 4.22.0) पर आधारित है:
camel-quarkus-pqcपहली बार वहाँ किसी प्रभावित Camel संस्करण से मैप होता है (CQ 3.29.0 / Camel 4.15.0 यहाँ उपयोग किए गए फ़ाइल-आधारित key lifecycle manager से पहले का है)।
FileBasedKeyLifecycleManager अब लिखने से पहले key निर्देशिका और प्रत्येक
निजी key फ़ाइल को उनके स्वामी तक सीमित करता है (setPosixFilePermissions के माध्यम से rwx------ / rw-------, गैर-POSIX
फ़ाइल सिस्टम के लिए java.io.File fallback के साथ), और पुनर्लेखन पर पहले से मौजूद विश्व-पठनीय key फ़ाइल को कड़ा करता है
(फ़ाइल को पुनः बनाया नहीं जाता, बल्कि truncate किया जाता है, इसलिए अन्यथा यह पुरानी अनुमतियाँ बनाए रखती)। अनुमतिपूर्ण
अनुमतियों के साथ पहले से लिखी गई key सामग्री को उजागर माना जाना चाहिए और rotate किया जाना चाहिए।
key निर्देशिका को ऐसे पथ पर रखें जिसे केवल सेवा खाता ही पार कर सके और प्रक्रिया umask को कड़ा करें; अनुमतिपूर्ण अनुमतियों के साथ पहले से लिखी गई किसी भी key को उजागर मानें और उसे rotate करें।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और यह पुष्टि करने में मदद करने के लिए कि अपग्रेड करने से यह हल हो जाता है। RSA key pair प्रक्रिया के भीतर एक अस्थायी निर्देशिका में उत्पन्न किया जाता है और जाँच के बाद हटा दिया जाता है। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।