文章总结: CVE-2026-89055是WordPress插件CustomerReviewsforWooCommerce的严重漏洞,CVSS评分9.1。未认证攻击者可通过泄露的nonce和未校验附件归属的media字段,在删除评论时强制永久删除媒体库任意附件。影响所有版本,官方已发布修复。建议立即升级插件,关闭本地评论表单作为临时缓解,并备份媒体库。
综合评分: 88
文章分类: 漏洞分析,WEB安全,代码审计,应急响应
(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。
-
升级后验证:用一个未认证请求把管理员附件 ID 塞进 media 字段提交,评论删除后目标附件应完好,请求被拒。
-
过渡缓解(暂时不能升级的站点):关闭本地评论表单/邮件邀评功能,砍掉 formId 这个攻击前提。
-
对媒体库做一次备份——这类删除是强制永久删除,不进回收站,事后无法从数据库恢复文件本体。
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 —
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:红队安全圈 红队安全圈
红队安全圈《(9.1分) CVE-2026-89055:WooCommerce评论插件未授权删媒体文件》