
مُعيد إنتاج قابل للتشغيل بـ Spring Boot وQuarkus لـ CVE-2026-85260، يوضّح تسجيل camel-mllp لبيانات PHI في الإصدارات المتأثرة وكتمه بعد الإصلاح.
مُعيد إنتاج عملي قابل للتشغيل (proof-of-concept) لثغرة Apache Camel حيث كان الخيار logPhi في مكوّن camel-mllp قيمته الافتراضية true، بحيث كان أي نشر لا يتخذ أي إجراء يكتب محتوى حمولة HL7 — بيانات المريض — إلى سجل التطبيق بشكل افتراضي. (كما سجّلت مساران إضافيان في الشيفرة محتوى الحمولة بغض النظر عن الإعداد، لذا حتى المشغّل الذي كان قد عطّل logPhi ظلّ مكشوفًا عبر هذين المسارين.) ينقل MLLP رسائل HL7 السريرية، لذا فإن المحتوى المعني هو PHI، وقد وصل إلى سجلات التطبيقات العادية، خاضعًا لأي سياسة احتفاظ وتجميع ووصول يطبّقها عملية النشر على السجلات بدلًا من السجلات السريرية.
| بيئة التشغيل | الدليل | الحزمة التقنية |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mllp 4.22.0 (متأثر؛ مُصلَح في 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-mllp (Camel 4.15.0، متأثر؛ ضابط مُصلَح CQ 3.40.0 / Camel 4.22.1) |
يُظهر كلا الوحدتين السلوك المتأثر والمُصلَح.
يستقبل مستهلك MLLP (خادم TCP) رسائل HL7. يسجّل المكوّن الحمولة المستلمة عند مستوى DEBUG (لذا تُرفع مسجّلات MLLP إلى DEBUG، وتُكتب السجلات إلى mllp-phi.log). يعمل برنامج التشغيل كمرسل HL7: حيث يؤطّر رسالة HL7 يحمل حقل PID (اسم المريض) فيها علامة غير ضارة PHI-MARKER-DOE-JANE-5E1F داخل غلاف MLLP ويرسلها، ثم يقرأ ملف السجل.
تُرسَل رسالتان على الاتصال نفسه عن قصد: يعالج المستهلك الأولى من قراءة التحقق الخاصة به، والثانية عبر حلقة الاستقبال لديه — وهو المسار الذي يسجّل الحمولة المستلمة.
logPhi هي true، لذا يحتوي السجل على Received 170 byte message MSH|…PID|…| PHI-MARKER-DOE-JANE-5E1F^Jane… — بيانات المريض حرفيًا.logPhi هي false، لذا يُظهر السجل <PHI suppressed> بدلًا من ذلك.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: PHI in the log; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85260-mllp-phi-logging-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: <PHI suppressed>; >>> 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): PHI in the log
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: <PHI suppressed>
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-mllp (القيمة الافتراضية لـ logPhi؛ TcpSocketConsumerRunnable، MllpSocketBuffer، Hl7Util) |
| CWE | CWE-532 (إدراج معلومات حساسة في ملف السجل) |
| الخطورة | متوسطة |
| ناقل الهجوم | رسائل HL7 التي يتلقاها مستهلك MLLP يعمل بالإعدادات الافتراضية مع تسجيل DEBUG |
| التأثير | كتابة المعلومات الصحية المحمية (بيانات المرضى) في سجلات التطبيق العادية |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24454 |
| الفضل | Claude Security Scan Tool |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-85260.html
يغيّر الإصلاح القيمة الافتراضية لـ logPhi من true إلى false في
MllpComponent، ويوجّه تسجيل الحمولة عبر دوال مساعدة جديدة convertToLoggableString/toLoggableStringAndReset
(إضافةً إلى PHI_SUPPRESSED_REPLACEMENT_VALUE = "<PHI suppressed>" في Hl7Util)، بحيث أصبحت المسارات التي كانت
تتجاهل هذا العلم سابقًا تحترمه الآن. هذه قيمة افتراضية متغيّرة: يجب على أي نشر كان يعتمد على تسجيل الحمولة أن
يضبط logPhi=true صراحةً الآن.
اضبط logPhi=false، وكن على علم بأن مسارين سيستمران في تسجيل محتوى الحمولة حتى يتم تطبيق الإصلاح —
قيّد الوصول إلى السجلات وفقًا لذلك.
نُشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. رسالة HL7 وبيانات "المريض" الخاصة بها هي بيانات تجريبية محلية خاملة ومُختلقة. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.