(9.1分)CVE-2026-89055:WooCommerce评论插件未授权删媒体文件"

admin 2026-10-16 08:10:27 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

(9.1分) CVE-2026-89055:WooCommerce评论插件未授权删媒体文件

红队安全圈
红队安全圈

红队安全圈

2026年9月25日 21:30
重庆

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

一个 WordPress 评论插件,让任何没有账号的人可以删掉你媒体库里的任意文件——产品图、Logo、文档都行。

今天这条 CVE-2026-89055 值得所有做 WooCommerce 独立站的朋友认真看一下。Customer Reviews for WooCommerce 这个插件装机量不小,作用是收集客户评论、让买家上传晒图。问题出在它的本地评论表单链路上:未认证攻击者可以永久删除媒体库中的任意附件,CVSS 3.1 评分 9.1(CRITICAL)。

01  漏洞速览

漏洞编号CVE-2026-89055

影响产品Customer Reviews for WooCommerce

影响版本≤ 5.120.0(全部版本)

漏洞类型授权绕过 → 任意附件删除

危害等级CVSS 9.1 CRITICAL

攻击前提无需账号,需一个公开表单链接

公开 PoC暂无,利用路径已完整披露

02  漏洞成因

整个链条分三步,每一步单独看都不算大问题,叠起来就是 9.1 分。

第一步:nonce 泄露。插件的本地评论表单页面(由 13 位 hex 的 formId 标识)会把 nonce 直接渲染在页面里。只要拿到这个表单链接,任何人就拿到了进入 AJAX handler 的通行证——nonce 校验形同虚设,因为它保护的是\"有链接的人\"而不是\"有权限的人\"。

第二步:媒体 ID 注入。提交评论时,submit\_form() 会把用户提交的 media 数组(附件 ID 列表)经过 intval 后原样写入评论的 meta。致命点是:没有任何检查确认这些附件 ID 是当前用户上传的。攻击者可以随手填管理员的附件 ID。

看关键代码(class-cr-endpoint.php,本地表单分支):

if( isset( $body2->order

->items[$i]->media )

&& is\_array(

$body2->order

->items[$i]->media ) ) {

// media 只做了 intval

// 没校验附件归属

$media\_meta[] = array(

'meta' =>

CR\_Reviews::

REVIEWS\_META\_LCL\_IMG,

'value' => intval(

$body2->order->items[$i]

->media[$m] )

);

}

而且本地表单分支还会顺手执行 wp\_update\_post 把这些附件挂到商品下——相当于攻击者把管理员的文件\"过户\"到了自己的评论里。

第三步:删除钩子。插件在 delete\_comment 钩子上挂了清理逻辑(class-cr-reviews.php 1871 行附近):评论被删除时,遍历 meta 里记录的所有附件 ID,只要类型是 attachment 就直接强制删除——绕过回收站、永久删除,不检查附件所有者。

foreach ( $meta\_values

as $attachment\_id ) {

$attachment\_id = absint(

$attachment\_id );

if ( 'attachment' ===

get\_post\_type(

$attachment\_id ) ) {

// 强制删除,不进回收站

wp\_delete\_attachment(

$attachment\_id, true );

}

}

完整攻击路径:拿到表单链接 → 抓页面里的 nonce → 提交评论并在 media 字段塞入目标附件 ID → 评论入库并绑定这些附件 → 触发评论删除 → 钩子把管理员的附件连文件一起干掉。

03  影响范围

受影响:Customer Reviews for WooCommerce 5.120.0 及之前所有版本,即当前所有版本。

已修复:官方已发布修复版本,升级到 5.120.0 之后的版本即可(修复 changeset 见文末)。

影响面:所有启用了本地评论表单(邮件邀评)功能的 WooCommerce 站点。没开这个功能的站点攻击面会小很多,因为攻击前提是拿到 formId。

04  危害推演

目前没有成熟的公开 EXP,但攻击路径完全清晰,推演一下真实场景:

攻击者怎么拿 formId?它通过邮件发给真实客户,属于半公开信息——员工转发、客户晒单截图、钓鱼一封邮件都可能拿到。甚至可以自己下一单,官方就会把含 formId 的邀评邮件发过来,这是最稳的获取方式。

拿到 formId 后访问表单页,源码里就有 nonce。然后枚举附件 ID(WordPress 附件 ID 是全局自增的,从 1 开始试就行),一次提交可以塞多个 ID。

触发删除后,媒体库文件被物理删除:产品图消失 → 前台商品页破图;Logo 和文档消失 → 站点视觉与运营文档受损。对电商站来说,大促前被人这么来一轮,恢复成本不小。注意这是完整性 + 可用性双杀伤(C:N/I:H/A:H):不偷数据,专门搞破坏。

05  检测与排查

确认插件及版本

curl -s https://你的站点/

wp-content/plugins/

customer-reviews-woocommerce/

README.txt \

| grep -i \"stable tag\"

后台检查:WooCommerce → 评论设置里看\"本地评论表单/邮件邀评\"是否开启。开启且版本 ≤ 5.120.0 即视为受影响。

06  修复建议

1. 立即升级插件到官方修复版本(5.120.0 之后),修复版本对附件归属做了校验,不再接受任意 attachment ID。

  1. 升级后验证:用一个未认证请求把管理员附件 ID 塞进 media 字段提交,评论删除后目标附件应完好,请求被拒。

  2. 过渡缓解(暂时不能升级的站点):关闭本地评论表单/邮件邀评功能,砍掉 formId 这个攻击前提。

  3. 对媒体库做一次备份——这类删除是强制永久删除,不进回收站,事后无法从数据库恢复文件本体。

07  红队视角

实战里这类洞的价值在于\"低成本定向破坏\":

利用门槛极低:AV:N/AC:L/PR:N/UI:N,全程无需账号,一个 curl 就能走完提交环节。唯一的门槛是 formId,而自己下一单就能拿到,等于没有门槛。

隐蔽性好:删除动作挂在正常的评论删除流程上,站点管理员看到的是\"评论被清了\",不会立刻联想到媒体文件丢失是插件漏洞导致。

横向价值:WordPress 插件生态里\"评论/表单类插件 + meta 存附件 ID + 删除钩子联动\"是个高频模式。近两年 MasterStudy LMS 等插件爆过几乎同构的任意附件删除链。遇到同类插件可以直接按这个模式审计:找 wp\_delete\_attachment 调用点,回溯 meta 来源是否校验了归属。

防御方:WAF 层可以拦 admin-ajax.php 上 cr\_local\_forms\_submit 动作里 media 数组含非本表单上传 ID 的请求,但根治还是升级。

一句话总结:评论区变删库入口,九分洞里最经典的那种。装了这个插件的,今天就去点更新。

08  POC 链接

暂无公开成熟 PoC,以下为官方修复变更与漏洞库页面:

https://plugins.trac.wordpress.org/changeset/3694303/customer-reviews-woocommerce

https://www.wordfence.com/threat-intel/vulnerabilities/id/b7bbeeea-3888-42a6-8d14-f5c39f5dcb70

https://nvd.nist.gov/vuln/detail/CVE-2026-89055

说明:官方修复 changeset / Wordfence 漏洞库 / NVD 详情页

如果文章对您有收获,欢迎关注、点赞、推荐、转发。

— END —


安卓逆向--某影视app协议sign加密" 网络安全文章

安卓逆向--某影视app协议sign加密"

本文为安卓逆向实战记录,针对某影视APP的协议sign加密进行分析。作者从谷歌商店下载应用并提取APK,发现分包机制后获取so文件,使用blutter.py对Flutter部分反编译,定位关键函数,最终通过IDA分析so文件并追踪RSA密钥。文章提供了完整逆向流程和工具链,具有实操参考价值。
评论:0   参与:  0