WordPress备份插件漏洞导致80万个网站面临远程代码执行攻击风险
WPvivid Backup & Migration WordPress插件存在一个严重漏洞,未经身份验证的攻击者可以利用该漏洞上传文件并在服务器上运行代码,最终往往导致网站完全被控制。
WPvivid Backup & Migration WordPress插件存在一个严重漏洞,未经身份验证的攻击者可以利用该漏洞上传文件并在服务器上运行代码,最终往往导致网站完全被控制。
该漏洞的CVE编号为CVE-2026-1357,评分为9.8(严重),影响插件版本0.9.123及更早版本,0.9.124版本已修复此漏洞。
只有当网站启用了WPvivid的“从其他网站接收备份”功能(通过在插件设置中生成密钥)时,才会面临最严重的风险,因为该功能默认处于禁用状态,且密钥最多会在24小时后过期。
在易受攻击的流程中,攻击者可以针对备份接收端点,并触发与wpvivid_action=send_to_site参数关联的上传路径。
Wordfence 的研究人员指出,该漏洞源于加密错误处理机制的缺陷以及不安全的文件路径处理,两者结合使得任意 PHP 上传和远程代码执行成为可能。
上传机制的工作原理
当消息处理过程中 RSA 解密失败时,代码可以继续使用 false 值,这实际上会成为 AES/Rijndael 例程中一个可预测的“全空字节”密钥,从而允许攻击者构造服务器可以接受的数据。
该插件还会接受解密有效载荷中的文件名,而未进行适当的清理,这使得攻击者可以遍历目录,从而使文件能够逃逸出预期的备份目录并出现在可通过 Web 访问的位置。
WPvivid 在 0.9.124 版本中修复了此问题,方法是在解密密钥为 empty/false 时停止处理,并将上传限制为预期的备份文件扩展名(例如 zip/gz/tar/sql)。
管理员应更新至 0.9.124 版本,在不需要时禁用 receive-backup 密钥,轮换任何生成的密钥,并检查 Web 根目录,查看在启用密钥窗口周围是否创建了意外的 PHP 文件。


评论1次
---结论--- 该漏洞源于WPvivid插件在接收备份过程中对加密密钥和文件路径处理的双重缺陷: 1. RSA解密失败时未终止流程,导致AES解密使用空密钥,使攻击者可构造有效加密载荷 2. 文件名未过滤,可伪造路径写入Web可访问目录的PHP文件 攻击路径依赖"接收备份"功能启用且密钥未过期,需优先检查该功能状态及插件版本。 ---分析路径--- **L1攻击面识别** - 核心接口:`/wp-admin/admin-ajax.php?Action=wpvivid_backup_page&action=wpvivid_action&wpvivid_action=send_to_site` - 触发条件: ▸ 插件版本≤0.9.123 ▸ 已生成有效的接收密钥(密钥未过期且未禁用) ▸ 未修复的文件名过滤与加密处理逻辑 **L2假设与验证** 假设漏洞利用需满足: 1. 构造包含恶意文件的加密POST数据包 2. 通过RSA解密失败的特殊构造,使AES解密使用空密钥 3. 在文件名中注入`../`路径遍历写入Web根目录 验证逻辑链: ``` POST载荷 --> RSA解密失败 --> AES使用空密钥 --> 解密成功 --> 文件名未过滤 --> 写入/webshell.php ``` **L3边界/异常场景** - 密钥过期时间窗口:密钥在24小时内有效,需验证密钥生成时间戳 - 文件名边界测试:尝试`/../../../../var/www/html/exploit.php`等绕过基础过滤 - 非预期扩展名测试:尝试`.php5`、`.phtml`等变种后缀绕过白名单 - 多次上传测试:是否因密钥复用导致重复利用 **L4防御反推与修复** 厂商修复点: ```diff + if (empty($decrypted_key)) { return error; } + allowed_ext = ['zip','gz','tar','sql'] - $filename = $_POST['input']; → + $filename = sanitize_filename(basename($_POST['input'])); ``` 防御绕过可能性:若白名单未覆盖所有危险扩展(如`.php3`),仍可能通过URL解析漏洞执行 ---验证步骤--- 1. 版本检测: ```bash curl -s "https://target/wp-content/plugins/wpvivid-backup_restore/plugin.php" | grep 'Version' ``` 2. 密钥状态检查: ```bash curl -s "https://target/wp-admin/admin-ajax.php?action=wpvivid_backup_page\&action=wpvivid_action\&wpvivid_action=get_setting" # 查找 "receive_backup"的密钥值及生成时间 ``` 3. 漏洞利用验证(需构造加密载荷,示例框架): ```bash curl -X POST "https://target/wp-admin/admin-ajax.php?Action=wpvivid_backup_page&action=wpvivid_action&wpvivid_action=send_to_site" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "key=[伪造密钥]&data=[构造的AES数据]&file=../../../../wp-content/exploit.php" ``` 4. 日志审计: 检查`wp-content`目录下是否存在异常时间戳的`.php`文件,或Apache/Nginx日志中`wpvivid_action=send_to_site`的异常请求 ---修复建议--- 1. **强制版本更新**:立即升级至0.9.124+ 2. **功能最小化**:永久禁用"接收备份"功能(Settings->WPvivid->Receive Backup Key删除密钥) 3. **密钥轮换**:即使已升级,仍需删除所有历史密钥并重置 4. **文件监控**:监控`wp-content`目录对`.php`文件的新增/修改事件 5. **防御加固**:在接收目录设置`php_flag engine off`或.htaccess限制执行权限