【CVE-2026-93485】从评论到Shell,WordPress漏洞深度剖析

admin 2026-09-24 05:35:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 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实体 (&#10;) 可以被保留在属性值中,这是后续攻击的起点。

步骤2 & 核心步骤3:wpautop() 注入意外标签wpautop() 函数主要负责为文本添加段落标签。它会为块级元素(如 <blockquote>)添加空行,并随后将其用 <p> 标签包裹。关键在于处理换行符占位符 <!-- wpnl --> 时,函数中的正则表达式替换存在缺陷。该正则表达式模式 |<p><blockquote([^>]*)>|i 在匹配到占位符中的 > 时就停止,将 <p> 标签错误地插入到 cite 属性值的内部。

错误处理导致的结果是:

<blockquote&nbsp;cite="a<p> b"><code>...攻击载荷...</code></p></blockquote>

这里被注入的 <p> 标签破坏了HTML结构,为下一步的转换创造了条件。

步骤4:wptexturize() 编码/不编码引号当使用区块主题或某些调用了 wptexturize() 的经典主题渲染时,该函数会将普通文本中的直引号 " 转换为印刷体引号实体 &#8221;。然而,内容在 <code> 标签内的属性部分被视为纯文本,其中的引号 " 会被编码;而 <code> 标签内部的直引号则被 wptexturize() 有意排除(code 在其 $default_no_texturize_tags 列表中),从而保持原样。

步骤5:最终恶意HTML合成与执行经过上述一系列级联转换,最终的HTML变成了这样:

<blockquote&nbsp;cite="a<p> b&#8221;><code>x"&nbsp;onfocus=alert(document.domain)&nbsp;autofocus&nbsp;tabindex=0</code></p></blockquote>

现代浏览器解析时会重新解释结构,autofocus 和 onfocus 等属性被解析到 <blockquote> 标签上,实现零点击 (zero-click) 自动触发JavaScript。仅需一个页面加载动作,恶意代码立即执行。

三种绕过审核、直接触发的方式

WordPress默认设置下,并非所有评论都需要审核。至少存在三种途径可以让恶意评论无需管理员批准即可生效:

  1. 重用安装程序创建的默认评论者:WordPress新安装附带了一条来自 A WordPress Commenter ([email protected]) 的已批准评论。使用相同的昵称和邮箱提交评论,系统会立即批准。
  2. 相关设置被关闭:如果在【设置】→【讨论】中,未勾选“评论者必须有一条先前已批准的评论”,则任何新身份的评论都会直接存储为已批准状态。
  3. 评论处于待审状态但仍对特定用户可见:待审核的评论内容,仍然会呈现给持有comment_author_<COOKIEHASH> Cookie的用户(即任何曾在该站点发表过评论的人)。攻击者可以通过自身的 ?unapproved=<id>&moderation-hash=<hash> 链接来访问。

从匿名评论到代码执行全程的录屏

从XSS到服务器代码执行

当恶意脚本在管理员会话中运行时,它可以访问插件安装器。通过管理员权限上传一个包含PHP Webshell的插件压缩包,是WordPress已知的提权路径。具体流程如下:

  1. 获取上传令牌 (Nonce):通过管理员会话,脚本可以访问插件上传页面并从中提取一个安全令牌。
  2. 在内存中构造恶意插件:创建一个简单的PKZIP格式的压缩包,其中包含一个带有任意命令执行代码的PHP文件。
  3. 提交上传:将构造好的ZIP文件通过表单提交给WordPress安装器。
  4. 直接访问Webshell:上传后的插件文件无需激活,直接通过其物理路径即可访问,从而执行任意系统命令。

修复补丁详情

WordPress 7.1.1 用一行代码修复了此漏洞。修复改变了 <p><blockquote> 重写时的正则匹配模式,使其能够识别并正确处理引号内的内容,从而防止错误的标签注入。

修复对比(一行之差):

// 修复前(WordPress 7.1及更早版本):
$text = preg_replace(&nbsp;'|<p><blockquote([^>]*)>|i',&nbsp;'<blockquote$1><p>', $text );

// 修复后(WordPress 7.1.1):
$text = preg_replace(&nbsp;'!<p><blockquote((?:[^>"\']|"[^"]*"|\'[^\']*\')*)>!i',&nbsp;'<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漏洞深度剖析》

一周懿语|第九十七期 网络安全文章

一周懿语|第九十七期

文章总结: 该文档为安恒信息公众号一周懿语第九十七期推送,主要回顾往期精彩文章,包括2026全球数贸会新品发布、西湖论剑参会指南及企业数智化转型论坛看点等内容,
评论:0   参与:  0