
CVE-2026-85243 के लिए रन करने योग्य Spring Boot और Quarkus प्रूफ-ऑफ-कॉन्सेप्ट, जो Apache Camel camel-crypto-pgp इंटीग्रिटी-वेरिफिकेशन डाउनग्रेड और उसके फिक्स को प्रदर्शित करता है।
Apache Camel की उस भेद्यता के लिए चलाने योग्य proof-of-concept reproducer, जिसमें PGP डेटा फ़ॉर्मेट का unmarshal()
modification detection code को केवल तब सत्यापित करता था जब संदेश OpenPGP symmetrically encrypted integrity
protected data packet का उपयोग करता था। पुराना symmetrically encrypted data packet ऐसा कोई code नहीं रखता, और
इसके बिना OpenPGP का CFB मोड malleable है, इसलिए उस legacy पैकेट का उपयोग करने वाला संदेश integrity जाँच को
पूरी तरह छोड़ देता था। चूँकि पैकेट प्रकार वही चुनता है जिसने संदेश बनाया है, इसलिए प्रेषक — या पारगमन में संदेश
को फिर से लिखने में सक्षम कोई भी व्यक्ति — यह तय करता था कि integrity जाँच लागू होगी या नहीं। मौजूदा integrity
विकल्प केवल marshalling को नियंत्रित करता है और इसका decrypt-पक्ष पर कोई समकक्ष नहीं था, इसलिए कोई deployment
अपने द्वारा स्वीकार किए जाने वाले संदेशों पर integrity सुरक्षा अनिवार्य नहीं कर सकता था।
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-crypto-pgp 4.22.0 (प्रभावित; ठीक किया गया 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-crypto-pgp (Camel 4.15.0, प्रभावित; नियंत्रण ठीक किया गया CQ 3.40.0 / Camel 4.22.1) |
दोनों मॉड्यूल प्रभावित और ठीक किए गए व्यवहार को प्रदर्शित करते हैं।
exploit driver एक प्रेषक (या मध्यस्थ) की भूमिका निभाता है जो integrity=false के साथ एन्क्रिप्ट करके legacy
पैकेट वाला PGP संदेश बनाता है — परिणामी ciphertext में कोई modification detection code नहीं होता। फिर यह उस संदेश
को ऐसे route में भेजता है जो इसे secret key से decrypt करता है।
BENIGN-PGP-PAYLOAD-MARKER-5E1F) लौटा दिया जाता है —
integrity जाँच पूरी तरह छोड़ दी गई क्योंकि प्रेषक ने legacy पैकेट चुना था। deployment ने ऐसा ciphertext स्वीकार
कर लिया जिसे वह सत्यापित नहीं कर सकता था।PGPException के साथ अस्वीकार कर देता है — "PGP message is not integrity
protected…" — क्योंकि नया requireIntegrityProtection विकल्प डिफ़ॉल्ट रूप से true है।keyrings (pubring.gpg, secring.gpg, user id और password दोनों sdude) Apache Camel के अपने camel-crypto-pgp
परीक्षणों से लिए गए सार्वजनिक RSA-2048 test fixtures हैं — निष्क्रिय सामग्री, जो इसलिए बंडल की गई है ताकि round-trip
स्व-निहित रहे।
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: legacy message decrypts; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85243-crypto-pgp-integrity-downgrade-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rejected "not integrity protected"; >>> 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.15.0): legacy message decrypts
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: rejected "not integrity protected"
| गुण | मान |
|---|---|
| घटक | camel-crypto-pgp (PGPKeyAccessDataFormat.unmarshal) |
| CWE | CWE-354 (इंटीग्रिटी चेक वैल्यू का अनुचित सत्यापन) |
| गंभीरता | MEDIUM |
| आक्रमण वेक्टर | लेगेसी सममित रूप से एन्क्रिप्टेड डेटा पैकेट (जिसमें संशोधन पहचान कोड नहीं है) से उत्पन्न संदेश |
| प्रभाव | इंटीग्रिटी-सत्यापन डाउनग्रेड: प्रेषक/मध्यस्थ तय करता है कि इंटीग्रिटी जाँच चलेगी या नहीं; परिवर्तनशील सिफरटेक्स्ट बिना सत्यापन के स्वीकार किया जाता है |
| प्रभावित संस्करण | 4.0.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24441 |
| श्रेय | Claude Security Scan Tool |
सलाह: https://camel.apache.org/security/CVE-2026-85243.html
PGPKeyAccessDataFormat.unmarshal एक requireIntegrityProtection
विकल्प जोड़ता है (डिफ़ॉल्ट true)। जब कोई संदेश इंटीग्रिटी संरक्षित पैकेट नहीं होता है और विकल्प सक्षम होता है, तो unmarshal
अब इसे डिक्रिप्ट करने के बजाय PGPException("PGP message is not integrity protected…") फेंकता है। ध्यान दें कि
signatureVerificationOption अभी भी डिफ़ॉल्ट रूप से optional है, इसलिए बिना हस्ताक्षर वाला संदेश अभी भी स्वीकार किया जाता है; ये
दोनों विकल्प मिलकर ही डिक्रिप्ट किए गए संदेश को केवल गोपनीयता ही नहीं, बल्कि प्रामाणिकता भी प्रदान करते हैं। requireIntegrityProtection=false
केवल तब सेट करें जब आपको ऐसे प्रेषक के साथ अंतर-संचालन करना हो जो अभी भी लेगेसी पैकेट उत्सर्जित करता है, और डिक्रिप्ट की गई सामग्री को
अप्रमाणित मानें।
ऐसे संदेशों को अस्वीकार करें जो इंटीग्रिटी संरक्षित पैकेट का उपयोग नहीं करते हैं, इससे पहले कि वे डेटा फ़ॉर्मेट तक पहुँचें (उदाहरण के लिए, unmarshal से पहले एक प्रोसेसर में
OpenPGP पैकेट हेडर का निरीक्षण करें)।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने में मदद करने के लिए कि क्या वे प्रभावित हैं, और यह पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाती है। कीरिंग्स और प्लेनटेक्स्ट निष्क्रिय सार्वजनिक परीक्षण फ़िक्स्चर हैं। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।