[业内新闻动态] [【转载】] WordPress备份插件漏洞导致80万个网站面临远程代码执行攻击风险

#1
abbr_8fcf67f4433b1c5baf4ca73d2b5cffae.jpg
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 文件。
2026-02-13
#2

---结论---
该漏洞源于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防御反推与修复
厂商修复点:

+ if (empty($decrypted_key)) { return error; }  
+ allowed_ext = ['zip','gz','tar','sql']  
- $filename = $_POST['input']; → + $filename = sanitize_filename(basename($_POST['input']));  

防御绕过可能性:若白名单未覆盖所有危险扩展(如.php3),仍可能通过URL解析漏洞执行

---验证步骤---

  1. 版本检测:

    curl -s "https://target/wp-content/plugins/wpvivid-backup_restore/plugin.php" | grep 'Version'  
  2. 密钥状态检查:

    curl -s "https://target/wp-admin/admin-ajax.php?action=wpvivid_backup_page\&action=wpvivid_action\&wpvivid_action=get_setting"  
    # 查找 "receive_backup"的密钥值及生成时间  
  3. 漏洞利用验证(需构造加密载荷,示例框架):

    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限制执行权限
2026-02-13
#3
伪造的密钥 构造的加密数据 然后再拿poc验证, wordpress 最近也依次爆出来了 好多漏洞啊。
2026-03-16
#4
安装这个插件的wp, 除了批量跑有其他的识别方式没?