
نموذج إثبات مفهوم قابل للتشغيل بـ Spring Boot وQuarkus لـ CVE-2026-85243، يوضّح تخفيض التحقق من السلامة في Apache Camel camel-crypto-pgp وإصلاحه.
مُعيد إنتاج عملي قابل للتشغيل لثغرة Apache Camel حيث كان تنسيق بيانات PGP في unmarshal()
يتحقق من رمز كشف التعديل فقط عندما تستخدم الرسالة حزمة البيانات المحمية بالسلامة والمشفرة تناظريًا في OpenPGP.
أما حزمة البيانات المشفرة تناظريًا الأقدم symmetrically encrypted data packet فلا تحمل مثل هذا الرمز، ووضع CFB في OpenPGP
قابل للتلاعب بدونها، لذا فإن رسالة تستخدم تلك الحزمة القديمة تتجاوز فحص السلامة بالكامل. ولأن نوع الحزمة يختاره من أنتج الرسالة،
فإن المرسل — أو أي شخص قادر على إعادة كتابة الرسالة أثناء النقل — هو من يقرر ما إذا كان فحص السلامة يُطبَّق أصلًا. الخيار الحالي integrity يحكم التغليف (marshalling)
فقط ولم يكن له نظير في جانب فك التشفير، لذا لم يكن بإمكان أي نشر اشتراط حماية السلامة على الرسائل التي يقبلها.
| بيئة التشغيل | الدليل | الحزمة التقنية |
|---|---|---|
| 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) |
كلا الوحدتين تُظهران السلوك المتأثر و السلوك المُصلَح.
يقوم برنامج الاستغلال بدور المرسل (أو الوسيط) الذي ينتج رسالة PGP بالحزمة القديمة عبر
التشفير باستخدام integrity=false — فلا يحمل النص المشفر الناتج أي رمز لكشف التعديل. ثم يُمرِّر
تلك الرسالة إلى مسار يفك تشفيرها بالمفتاح السري.
BENIGN-PGP-PAYLOAD-MARKER-5E1F) — إذ تم تجاوز فحص
السلامة بالكامل لأن المرسل اختار الحزمة القديمة. قبل النشر نصًا مشفرًا لم يستطع التحقق منه.PGPException — "PGP message is not integrity protected…" —
لأن الخيار الجديد requireIntegrityProtection قيمته الافتراضية true.حلقات المفاتيح (pubring.gpg، secring.gpg، ومعرّف المستخدم وكلمة المرور كلاهما sdude) هي عناصر اختبار RSA-2048 العامة
من اختبارات camel-crypto-pgp الخاصة بـ Apache Camel — مواد خاملة، مرفقة حتى تكون دورة الاختبار مكتفية ذاتيًا.
# 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 (التحقق غير السليم من قيمة فحص السلامة) |
| الخطورة | متوسطة |
| ناقل الهجوم | رسالة مُنتَجة باستخدام حزمة البيانات المشفّرة تناظريًا القديمة (بدون رمز كشف التعديل) |
| التأثير | تخفيض مستوى التحقق من السلامة: المرسِل/الوسيط هو من يقرر ما إذا كان فحص السلامة سيُنفَّذ؛ يُقبَل النص المشفّر القابل للتعديل دون التحقق منه |
| الإصدارات المتأثرة | من 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). عندما تكون الرسالة غير محمية بحزمة سلامة Integrity Protected Packet ويكون الخيار مُفعَّلًا، فإن unmarshal
يرمي الآن PGPException("PGP message is not integrity protected…") بدلًا من فك تشفيرها. لاحظ أن
signatureVerificationOption لا يزال افتراضيًا optional، لذا تُقبَل الرسالة التي لا تحمل أي توقيع؛ والخياران معًا هما ما يمنحان الرسالة المفكوكة تشفيرها الأصالة وليس السرية فقط. اضبط
requireIntegrityProtection=false فقط للتوافق مع مرسِل لا يزال يُصدر الحزمة القديمة، وتعامل مع
المحتوى المفكوك على أنه غير موثَّق.
ارفض الرسائل التي لا تستخدم حزمة السلامة Integrity Protected Packet قبل أن تصل إلى صيغة البيانات (على سبيل المثال، افحص
ترويسة حزمة OpenPGP في معالج processor قبل unmarshal).
نُشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. إن حلقات المفاتيح والنص الصريح هي عناصر اختبار عامة خاملة. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.