我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 97.1% 的成绩。 了解更多

深度解析

深度解析

Chrome XSLT 释放后使用漏洞被在野利用(CVE-2026-125350)

Chrome 内置 libxslt 的释放后使用漏洞可破坏内存;CVE-2026-125350 已被在野利用,并在 157.0.8103.50 中修复。

TL;DR

  • Chrome 的 XML 和 XSLT 处理中存在释放后使用漏洞,精心构造的页面可破坏渲染器内存。Google 将 CVE-2026-125350 评为 High,并称在野存在利用。
  • 157.0.8103.50 之前的所有桌面 Chrome 版本都受影响。Statcounter 显示,2026 年 10 月 Chrome 在全球桌面浏览器中的份额为 66.98%。
  • 截至 2026 年 11 月 10 日,CVE-2026-125350 未列入 CISA 的 Known Exploited Vulnerabilities(KEV)目录。
  • 该缺陷位于 Chrome 内置 libxslt 的直接模式匹配缓存中。同一修复还关闭了 2026 年 10 月 12 日另行报告的 CVE-2026-125346。
  • 将 Chrome 更新到 157.0.8103.50 或 157.0.8103.51,然后重启浏览器。基于 Chromium 的浏览器需要其厂商的更新。参见“如何修复?”。

我受影响吗?

以下条件全部成立时,你受影响:

  • 你在 Windows、macOS 或 Linux 上运行早于 157.0.8103.50 的桌面 Google Chrome。
  • 你打开攻击者控制的页面,或加载攻击者控制的 XML 和 XSLT 的页面。漏洞解析器运行不需要进一步交互。
  • 该版本尚未包含 libxslt 修复。Google 于 2026 年 11 月 9 日在桌面版 157.0.8103.50 和 157.0.8103.51 中发布了修复。

该公告针对桌面 Chrome。基于 Chromium 的浏览器共享引擎,但各厂商发布自己的版本和自己的修复时间表。在假定某个 Chromium 浏览器已修复前,请向厂商确认。

分支 受影响版本 修复版本
Windows 和 macOS 版 Chrome 157.0.8103.50/.51 之前的所有版本 157.0.8103.50 或 157.0.8103.51
Linux 版 Chrome 157.0.8103.50 之前的所有版本 157.0.8103.50

从浏览器检查已安装版本:

# Open this URL in Chrome and read the version line
chrome://version

在终端中,包管理器会报告已安装的构建:

# Debian and Ubuntu
dpkg-query -W -f='${Version}\n' google-chrome-stable

# Fedora and RHEL
rpm -q google-chrome-stable

# macOS
defaults read "/Applications/Google Chrome.app/Contents/Info.plist" CFBundleShortVersionString

将结果与 157.0.8103.50 比较。早于该编号的构建受影响。

如何修复?

  1. 将 Chrome 更新到 157.0.8103.50 或更高版本。在 Windows 和 macOS 上,打开三点菜单,选择“帮助”,然后选择“关于 Google Chrome”,让更新安装。在 Linux 上更新软件包: sudo apt update && sudo apt install --only-upgrade google-chrome-stable
  2. 重启浏览器。已下载但未应用的更新会让旧渲染器继续运行。
  3. 如果通过企业策略管理 Chrome,确认允许更新,并且每个端点的版本报告显示 157.0.8103.50 或更高版本。
  4. 如果使用基于 Chromium 的浏览器,检查其公告和更新通道。不要假定 Chrome 的版本号适用。
  5. 如果无法立即更新,将浏览限制在可信站点,并在代理处阻止不可信的 XML 和 XSLT 内容。这能降低暴露,但不是修复。

没有配置开关可以在保持 XSLT 可用的同时禁用存在漏洞的模式缓存。Google 的版本就是修复。

根本原因是什么?

该缺陷是 libxslt 模式匹配器中 xsltTestCompMatchDirect() 的重入问题。该函数将直接模式求值产生的节点集缓存到转换上下文的运行时扩展中,并在求值模式之前读取缓存的指针。

缓存的存在是为了让同一文档上重复的直接模式测试复用同一个节点集,而不是为每个节点重新求值 XPath。它以第一步的运行时扩展为键:列表指针、构建列表时使用的文档和索引。该设计假定求值不会改变缓存。XSLT 允许延迟求值,因此全局变量或模板参数可以在外层求值仍在栈上时执行嵌套转换指令。嵌套的 xsl:number 可以准备或替换同一缓存槽,从而打破该假定。

以下是修复前 Chromium 树中 third_party/libxslt/src/libxslt/pattern.c 的漏洞代码:

list = (xmlXPathObjectPtr)
    XSLT_RUNTIME_EXTRA_LST(ctxt, sel->lenExtra);

if ((list == NULL) || (prevdoc != doc)) {
    ...
    newlist = xmlXPathEval(comp->pattern, ctxt->xpathCtxt);
    ...
    if (nocache == 0) {
        if (list != NULL)
            xmlXPathFreeObject(list);
        list = newlist;

        XSLT_RUNTIME_EXTRA_LST(ctxt, sel->lenExtra) =
            (void *) list;
        ...
    } else
        list = newlist;
}

该函数在 xmlXPathEval 之前从缓存读取 list。求值可以针对同一缓存槽重入 xsltTestCompMatchDirect(),例如通过一个值会执行 xsl:number 的延迟求值全局变量。嵌套调用释放或替换缓存对象。外层调用随后释放已经过时的 list 指针,造成双重释放,并使缓存指向已释放内存。

Chromium 的修复提交描述了同样的顺序。缓存节点集在求值前被读取,嵌套调用可能释放并替换它,外层调用随后再次释放它。

如何被利用?

攻击者需要一个 Chrome 按 XML 解析并带有 XSLT 样式表的文档。该样式表将模式匹配器带入重入缓存路径。

  1. 受害者打开一个页面,该页面加载带有 xml-stylesheet 处理指令的攻击者控制 XML 文档,或攻击者控制的 XSLT 样式表。
  2. 模板匹配或 xsl:number 模式使用延迟求值的构造,例如值会执行 xsl:number 的全局变量。
  3. 直接模式匹配缓存为该模式准备,随后 xmlXPathEval 针对同一缓存槽重入 xsltTestCompMatchDirect()。
  4. 嵌套调用释放或替换缓存节点集。外层调用释放过时指针,并改为存储 newlist。
  5. 转换继续使用指向已释放内存的缓存条目,从而在渲染器中产生释放后使用。

Google 称 CVE-2026-125350 的在野利用存在。它尚未公开利用代码、攻击链、受影响站点或攻击者身份。本文撰写时 CVE 记录不在公共 CVE 数据库中,Google 在用户更新期间限制缺陷细节。

同一修复还关闭了 CVE-2026-125346,这是 Neonix Security 的 Arni Hardarson 于 2026 年 10 月 12 日报告的 XML 释放后使用。Google 未称该漏洞被利用。两份报告针对同一缓存缺陷。

攻击如何展开?

精心构造的 XML 和 XSLT 文档触发重入的模式缓存求值,嵌套调用释放缓存节点集,外层调用再次释放它,使渲染器处于释放后使用状态。

flowchart LR A["受害者打开攻击者页面"] --> B["Chrome 解析带 XSLT 样式表的 XML"] B --> C["准备直接模式匹配缓存"] C --> D["xmlXPathEval 重入同一缓存槽"] D --> E["嵌套调用释放或替换节点集"] E --> F["外层调用释放过时指针"] F --> G["渲染器中的释放后使用"]

攻击者能做什么?

触发该缺陷的攻击者会破坏 Chrome 渲染器内存。Google 将该缺陷评为 High,并称在野存在利用。该公司未说明利用是否逃逸渲染器沙箱、针对哪个进程,或代码执行后做什么。

条件是影响的一部分:

  • 攻击者需要让受害者加载其控制的 XML 或 XSLT。普通页面访问就足够。
  • 漏洞代码在渲染器中运行。在链接第二个缺陷或沙箱逃逸之前,那里的代码执行受 Chrome 沙箱限制。Chrome 在每个桌面平台都对渲染器进行沙箱隔离。Google 报告的利用可能止步于渲染器,也可能是更大链条的一部分,公开记录没有说明是哪种。渲染器内存破坏原语是大多数浏览器利用链的第一步,因此无论哪种情况更新都紧急。
  • 没有公开的利用代码。在野利用来自 Google 的声明,而不是公开样本。

不要把“在野利用”理解为“设备完全被控”。Google 未公开该链条,渲染器沙箱是另一道边界。

为什么修复有效?

修复在 xmlXPathEval 之后重新读取缓存槽,因此外层调用释放的是当前位于缓存中的对象,而不是嵌套调用之前读取的指针。以下是 Chromium 提交 61cab3f77203 添加的代码:

@@ -581,6 +581,15 @@ xsltTestCompMatchDirect(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp,
        nocache = 1;

    if (nocache == 0) {
+       /*
+        * xmlXPathEval can re-enter this function for the same cache
+        * slot, e.g. through a lazily evaluated global variable whose
+        * value runs xsl:number. The nested call may free or replace
+        * the cached object, so re-read it instead of using the value
+        * read before the evaluation.
+        */
+       list = (xmlXPathObjectPtr)
+       XSLT_RUNTIME_EXTRA_LST(ctxt, sel->lenExtra);
        if (list != NULL)
        xmlXPathFreeObject(list);
        list = newlist;

该修复对 Chromium 的副本是完整的。它关闭 CVE-2026-125350 和 CVE-2026-125346,提交还添加了一个在 iframe 中加载构造 XSLT 的回归测试。

上游 libxslt 项目尚未采纳该更改。上游 master 分支的 libxslt/pattern.c 仍在 xmlXPathEval 之前读取 list,并在调用之后释放它。Chromium 将修复作为 third_party/libxslt/chromium 中的补丁保留。包含 libxslt 的软件,包括服务器端 XML 管道和其他浏览器,应向厂商确认该副本是否已修复。

如何检查是否已遭入侵?

Google 未发布 CVE-2026-125350 的入侵指标。浏览器利用在磁盘上留下的痕迹很少,因此可靠的检查是确认浏览器版本,并将使用受影响构建的时期视为暴露。

  • 确认每个桌面 Chrome 安装运行 157.0.8103.50 或更高版本。本地使用 chrome://version,其余使用端点管理清单。
  • 检查受影响时期的浏览器崩溃报告,寻找加载 XML 或 XSLT 的页面上的渲染器崩溃。崩溃是线索,不是利用的证据。
  • 检查代理和 DNS 日志中来自用户通常不访问主机的 XML 或 XSLT 内容。Google 未公开域名或哈希。
  • 如果怀疑被利用,在擦除机器之前保留浏览器配置文件、崩溃转储和代理日志,然后重建。

成功的利用可能不留下崩溃或文件。没有崩溃并不能证明主机未被暴露。

时间线

  • 2026-10-12:Neonix Security 的 Arni Hardarson 报告 XML 释放后使用漏洞 CVE-2026-125346。
  • 2026-11-06:一名匿名研究人员报告 XML 释放后使用漏洞 CVE-2026-125350,Google 后来称该漏洞被在野利用。
  • 2026-11-07:Chromium 合入提交 61cab3f77203,修复 libxslt 直接模式匹配缓存中的两个缺陷。
  • 2026-11-09:Google 发布 Windows 和 macOS 版 Chrome 157.0.8103.50/.51,以及 Linux 版 157.0.8103.50。

从两份报告到 Chrome 稳定版发布历经 28 天
图 1:第一份报告、第二份报告和修复在 28 天内完成。来源:Chrome Releases 稳定通道文章和 Chromium 提交 61cab3f77203,2026 年 11 月 10 日检查

常见问题

CVE-2026-125350 是否已在野利用?

是。Google 的稳定通道文章称已知 CVE-2026-125350 的利用存在于野。Google 未说明谁在使用、哪些站点提供利用,或是否逃逸渲染器沙箱。

有公开利用吗?

没有。Google 未公开利用代码,本文撰写时 CVE 记录也未公开。在野利用来自 Google 的声明,而不是样本。

这影响 Android 上的 Chrome 吗?

Google 的公告针对桌面稳定通道。它未列出 Android 版 Chrome。应将 Android 视为未确认而不是安全,并通过 Play 商店保持更新。

其他 Chromium 浏览器受影响吗?

在其厂商发布相同的 libxslt 修复之前,很可能受影响。Chrome 的版本号不适用于 Edge、Brave、Opera 或 Vivaldi。请检查各厂商的公告和更新通道。

直接模式匹配缓存是什么?

它是 libxslt 中按转换维护的缓存,保存直接 XPath 模式求值产生的节点集。它避免为每个节点重新求值同一模式。由于缓存位于转换上下文中,嵌套求值可以到达同一槽并替换已保存的对象。

libxslt 本身修复了吗?

没有。上游 libxslt 的 master 分支仍包含漏洞读取,Chromium 将修复作为本地补丁保留。包含 libxslt 的应用程序应跟踪上游项目和其厂商。

更新有多紧急?

现在更新。该缺陷可通过普通页面访问触发,Chrome 是桌面浏览器的大多数,Google 称利用存在。更新需要重启。

参考文献

  • Chrome Releases,“Stable Channel Update for Desktop”,2026 年 11 月 9 日,修复版本、九项安全修复、CVE-2026-125350、CVE-2026-125346 和在野利用声明:https://chromereleases.googleblog.com/2026/11/stable-channel-update-for-desktop_018223192.html (2026 年 11 月 10 日检查)
  • Chromium 提交 61cab3f77203671e09402e68738aa217632aed8d,“Fix use-after-free in libxslt direct pattern match cache”,修复和回归测试:https://github.com/chromium/chromium/commit/61cab3f77203671e09402e68738aa217632aed8d (2026 年 11 月 10 日检查)
  • 修复前 third_party/libxslt/src/libxslt/pattern.c 中的漏洞函数 xsltTestCompMatchDirect():https://github.com/chromium/chromium/blob/6eade082d6e5/third_party/libxslt/src/libxslt/pattern.c (2026 年 11 月 10 日检查)
  • 上游 libxslt master 分支的 libxslt/pattern.c,仍包含修复前的顺序:https://github.com/GNOME/libxslt/blob/master/libxslt/pattern.c (2026 年 11 月 10 日检查)
  • Statcounter Global Stats,2026 年 10 月全球桌面浏览器市场份额:https://gs.statcounter.com/browser-market-share/desktop/worldwide (2026 年 11 月 10 日检查)
  • CISA Known Exploited Vulnerabilities 目录 JSON 源,2026 年 11 月 10 日核查 CVE-2026-125350(未列出):https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json (2026 年 11 月 10 日检查)