文章总结: WordPress核心wpautop()函数存在CVE-2026-93485存储型XSS漏洞,未认证评论经过滤器级联转换可零点击触发恶意脚本,结合提权链实现RCE。影响所有4.7及以上版本,7.1.1已修复并回溯补丁。建议立即升级至最新版本,并审查评论审核设置。 综合评分: 92 文章分类: 漏洞分析,代码审计,WEB安全,应急响应,漏洞预警
【CVE-2026-93485】从评论到Shell,Wordpress漏洞深度剖析
原创
idnsec idnsec
骨哥说事
2026年9月23日 09:00 上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
| | | — | | 声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |
#
#
防走失:https://gugesay.com/
不想错过任何消息?设置星标↓ ↓ ↓
#
#
摘要:利用一条看似无害的评论,触发连锁过滤转换,从良性的HTML标签演变为带有JavaScript事件处理程序的恶意HTML,最终导致服务器远程代码执行。WordPress 7.1.1已修复,补丁回溯到所有支持的4.7分支。
漏洞概要
- 影响版本:WordPress核心
wpautop()函数中存在未经认证的存储型跨站脚本 (Stored Cross-Site Scripting, Stored XSS) 漏洞,编号CVE-2026-93485。 - 修复版本:已在WordPress 7.1.1中修复。修复补丁已向所有支持的版本(自4.7起)进行了回溯移植。如果你的站点版本低于其对应分支的已修复版本,则仍受影响。
- 攻击方式:未经验证的访客可以构造一条评论,当站点使用区块主题 (block theme) 或特定的经典主题 (classic theme) 渲染时,该评论会从良性的HTML经过一系列过滤器转换,最终形成带有活动JavaScript事件处理程序的恶意HTML。
- 触发条件:除了加载该评论所在的页面外,无需任何交互。当管理员浏览到包含恶意评论的页面时,攻击脚本将自动执行。
- 潜在危害:结合已知的WordPress提权链,通过管理员会话上传插件文件,即可实现服务器代码执行 (Remote Code Execution, RCE)。
如果您正在使用WordPress,请务必升级至WordPress 7.1.1,或至少是您所使用版本分支的最新发布版本。
编者按 (IDNSEC):此问题由作者Rafie Muhammad(Awesome Motive Inc. 的安全研究员)通过HackerOne上的WordPress漏洞赏金计划报告,并在协调披露后得到修复。
漏洞成因:两阶段的过滤断层
WordPress在评论保存时使用其HTML清理器 (KSES-Html 消毒器) 进行清理,然后在评论显示时通过 comment_text 过滤器链进行格式化。漏洞就发生在这两个步骤之间的空隙中。
评论允许白名单 (allowlist) 仅限七种简单标签(超链接、缩写、块引用、删除、内联引用和代码)。然而,comment_text 上挂载的一系列格式化过滤器在处理这些合法标签时,存在缺陷,可以将无害的输入转换成为能执行JavaScript的恶意结构。
攻击链详解
核心利用点在于 <blockquote> 标签 cite 属性中的换行符 (\n)。它触发了一系列过滤器的不安全级联转换。下图清晰地展示了从评论提交到代码执行的演变过程:
评论Payload从提交到执行每一步的图示
步骤1:KSES允许块引用标签的 cite 属性和换行虽然KSES清理器严格限制了可用的标签和属性,但 <blockquote cite> 位于白名单中,且换行符 \n 或其HTML实体 ( ) 可以被保留在属性值中,这是后续攻击的起点。
步骤2 & 核心步骤3:wpautop() 注入意外标签wpautop() 函数主要负责为文本添加段落标签。它会为块级元素(如 <blockquote>)添加空行,并随后将其用 <p> 标签包裹。关键在于处理换行符占位符 <!-- wpnl --> 时,函数中的正则表达式替换存在缺陷。该正则表达式模式 |<p><blockquote([^>]*)>|i 在匹配到占位符中的 > 时就停止,将 <p> 标签错误地插入到 cite 属性值的内部。
错误处理导致的结果是:
<blockquote cite="a<p> b"><code>...攻击载荷...</code></p></blockquote>
这里被注入的 <p> 标签破坏了HTML结构,为下一步的转换创造了条件。
步骤4:wptexturize() 编码/不编码引号当使用区块主题或某些调用了 wptexturize() 的经典主题渲染时,该函数会将普通文本中的直引号 " 转换为印刷体引号实体 ”。然而,内容在 <code> 标签内的属性部分被视为纯文本,其中的引号 " 会被编码;而 <code> 标签内部的直引号则被 wptexturize() 有意排除(code 在其 $default_no_texturize_tags 列表中),从而保持原样。
步骤5:最终恶意HTML合成与执行经过上述一系列级联转换,最终的HTML变成了这样:
<blockquote cite="a<p> b”><code>x" onfocus=alert(document.domain) autofocus tabindex=0</code></p></blockquote>
现代浏览器解析时会重新解释结构,autofocus 和 onfocus 等属性被解析到 <blockquote> 标签上,实现零点击 (zero-click) 自动触发JavaScript。仅需一个页面加载动作,恶意代码立即执行。
三种绕过审核、直接触发的方式
WordPress默认设置下,并非所有评论都需要审核。至少存在三种途径可以让恶意评论无需管理员批准即可生效:
- 重用安装程序创建的默认评论者:WordPress新安装附带了一条来自
A WordPress Commenter([email protected]) 的已批准评论。使用相同的昵称和邮箱提交评论,系统会立即批准。 - 相关设置被关闭:如果在【设置】→【讨论】中,未勾选“评论者必须有一条先前已批准的评论”,则任何新身份的评论都会直接存储为已批准状态。
- 评论处于待审状态但仍对特定用户可见:待审核的评论内容,仍然会呈现给持有
comment_author_<COOKIEHASH>Cookie的用户(即任何曾在该站点发表过评论的人)。攻击者可以通过自身的?unapproved=<id>&moderation-hash=<hash>链接来访问。
从匿名评论到代码执行全程的录屏
从XSS到服务器代码执行
当恶意脚本在管理员会话中运行时,它可以访问插件安装器。通过管理员权限上传一个包含PHP Webshell的插件压缩包,是WordPress已知的提权路径。具体流程如下:
- 获取上传令牌 (Nonce):通过管理员会话,脚本可以访问插件上传页面并从中提取一个安全令牌。
- 在内存中构造恶意插件:创建一个简单的PKZIP格式的压缩包,其中包含一个带有任意命令执行代码的PHP文件。
- 提交上传:将构造好的ZIP文件通过表单提交给WordPress安装器。
- 直接访问Webshell:上传后的插件文件无需激活,直接通过其物理路径即可访问,从而执行任意系统命令。
修复补丁详情
WordPress 7.1.1 用一行代码修复了此漏洞。修复改变了 <p><blockquote> 重写时的正则匹配模式,使其能够识别并正确处理引号内的内容,从而防止错误的标签注入。
修复对比(一行之差):
// 修复前(WordPress 7.1及更早版本):
$text = preg_replace( '|<p><blockquote([^>]*)>|i', '<blockquote$1><p>', $text );
// 修复后(WordPress 7.1.1):
$text = preg_replace( '!<p><blockquote((?:[^>"\']|"[^"]*"|\'[^\']*\')*)>!i', '<blockquote$1><p>', $text );
关键的改进是 (?:[^>"\']|"[^"]*"|\'[^\']*\')* 这个新的子模式,它能够正确地“跳过”被引号包裹的整个字符串内容(包括其中可能包含的 >),确保匹配直到真正的标签结束符 >,这样 <p> 标签便能正确地放置在 <blockquote> 之后,而非其属性内部。
披露时间线
- 2026年9月8日:通过HackerOne上的WordPress漏洞赏金计划报告给核心团队。安全团队同日完成评估。
- 2026年9月15日:向Patchstack请求CVE编号。
- 2026年9月17日:WordPress 7.1.1 发布,包含修复程序,并向下回溯移植至 4.7.36 的所有支持分支。
- 2026年9月18日:Patchstack分配 CVE-2026-93485。
- 2026年9月21日:本技术研究文章发布。
原文:https://idnsec.com/research/comment2shell-zero-click-pre-auth-xss-to-rce-in-wordpress-core/
- END –
感谢阅读,如果觉得还不错的话,动动手指给个三连吧~
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:骨哥说事 idnsec idnsec《【CVE-2026-93485】从评论到Shell,Wordpress漏洞深度剖析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论