FlawOpen

flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026

● WordPress plugin installations (campaign observations attributed to Patchstack) · CVE-2026-93836 · 2026-10-04 · CVSS 7.2 · 高危
安全研究 · FlawOpen

WordPress 存储型 XSS 攻击活动:两个插件与一条持久化链

Patchstack 观察到攻击者尝试通过 WordPress 中两个存储型 XSS 漏洞使用同一后续植入程序。请更新两个插件并排查持久化;打补丁无法清理已被入侵的网站。[1], [2], [3], [4], [5]

💡 通俗易懂的原理解析 (ELI5)

想象两个公开的意见箱,网站管理员之后会打开里面的纸条。如果网站把纸条保存为可执行标记而不是普通文本,管理员打开时,纸条就可能借用其浏览器权限。攻击活动报告称,攻击者利用两个不同插件漏洞作为入口,随后尝试在插件更新后继续保留访问权限。[1], [8], [9]

核心概念与专有名词

存储型 XSS
攻击者可控的文本被保存,之后在浏览器中作为可执行标记呈现。本事件的关键上下文是 WordPress 管理界面。[2], [3], [8], [9]
同源会话
浏览器会自动在同源请求中附带网站会话。已在该网站源内运行的脚本可以通过页面执行操作,而无需读取 HttpOnly Cookie。[1], [17], [18]
持久化
修复初始漏洞后仍然存在的访问方式,例如未授权账户或文件。更新插件不会自动删除这些更改。[1]
CVSS 分数来源
Wordfence CNA 记录为每个 CVE 赋予 CVSS 3.1 分数 7.2。Patchstack 的 WPC Product Bundles 通告显示 7.1;本文采用 CVE 记录分数并注明来源。[2], [3], [6]
源代码线索
Wordfence CNA 引用指向 WPC Product Bundles 和 Ninja Forms 的特定版本文件,涉及验证、存储和管理界面呈现路径。这些链接是代码线索,并非已核实的修复差异。上方 PHP 代码对仅用于说明输出编码,不是从插件还原的代码。[8], [9], [10], [11], [12], [13], [14], [15], [16]

框架映射

事件演进时间线

2026-09-21 / 2026-09-22

Wordfence CNA 记录的发布日期为 9 月 21 日,而 Patchstack 称这些漏洞于 9 月 22 日已公开披露。来源相差一天;CVE 记录分别列出截至 8.6.6 和 3.15.3 的受影响插件版本。[2], [3], [8], [9], [1]

2026-10-04 至 2026-10-05

Patchstack 报告观察到相同后续攻击阶段,先通过 WPC Product Bundles,后通过 Ninja Forms。Patchstack 于 10 月 6 日发布分析。[1]

攻击执行流程分解

步骤 1

两个独立的存储型 XSS 入口

Patchstack 称,一次攻击活动利用了 WPC Product Bundles 中的 CVE-2026-93836 和 Ninja Forms 中的 CVE-2026-94504。两者是独立漏洞,报告通过后续活动将它们联系起来。[1], [2], [3], [8], [9]

步骤 2

管理员打开已存储内容

提交的数据被保存,之后显示在订单或表单提交的管理界面中。如果输出处理不安全,内容会作为标记执行;管理员访问该页面就提供了浏览器上下文。[1], [8], [9], [10], [11], [12], [13], [14]

步骤 3

脚本继承网站上下文

在 WordPress 源内执行的代码可使用管理员现有会话发送同源请求。HttpOnly 保护 Cookie 的机密性,但无法阻止同源脚本使用该会话。[1], [17], [18]

步骤 4

后续访问可能在漏洞修复后持续

Patchstack 报告称攻击者尝试安装插件并建立额外持久化。这些是活动观察结果,并非每个目标都已确认成功;更新会关闭漏洞入口,但不会撤销已做出的更改。[1], [4], [5]

源代码对比:漏洞与安全实现

这是 Ninja Forms 中 Textarea::admin_form_element() 的源代码修复,不是通用示例。3.15.3 将已存储的提交文本直接插入 textarea 的 HTML 正文;3.15.4 在输出前调用 esc_textarea(),从而避免该上下文把内容解释为标记。此处仅展示 CVE-2026-94504 的 Ninja Forms 路径,并非 WPC Product Bundles 对 CVE-2026-93836 的修复。其他 HTML 上下文应使用相应的转义函数。[13], [15], [16]

存在漏洞的实现
public function admin_form_element( $id, $value )
{
    return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}
加固后的安全修复
public function admin_form_element( $id, $value )
{
    return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}

工程与系统安全加固清单

参考来源