Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-5281 — CVE-2026-5281 (Chrome Dawn WebGPU UAF) 分析、实验室验证工具,以及用于漏洞版本与已修补版本对比的可复现环境。 | Kitploit
工具/GitHubGitHub/themalwareguardian/cve-2026-5281
漏洞分析漏洞利用学习与教育二进制利用实验室与实践Archived
GitHubthemalwareguardian/cve-2026-5281

CVE-2026-5281

CVE-2026-5281 (Chrome Dawn WebGPU UAF) 分析、实验室验证工具,以及用于漏洞版本与已修补版本对比的可复现环境。

查看仓库
2155个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

⚡ CVE-2026-5281 - Chrome Dawn WebGPU 释放后使用

CWE Status Fixed In

此漏洞影响到了我们提供服务的一家客户。本仓库是我们对原始研究的贡献:为团队提供一个集中起点,以便当影响该组件的类似漏洞再次出现时,我们已有前期基础。它汇集了漏洞背后的理论、原始研究员发现的文档化总结,以及一组用于在实验室环境中验证暴露情况的实用工具。

注意:我本想分享更多研究内容,但由于公司限制,我无法进一步披露。这里包含的所有内容都已通过审查,且不违反我所受的任何协议。因此,本仓库以其当前状态归档。




📑 目录

  • 背景与目的
  • 什么是 WebGPU?
  • 什么是 Dawn?

  • 内存基础(栈、堆、显存)
  • 什么是释放后使用?
  • 漏洞
  • 📂
    • 我们从公开来源获知的信息
    • 从 JavaScript 到硬件
    • UAF 在 GPU 内存上的行为
    • 影响与利用条件

  • 时间线
  • 原始研究
  • 📂
    • 利用策略
    • 观察到的结果

  • 实验室结果
  • 📂
    • 截图
    • 拒绝服务(DoS)
    • 研究状态

  • 资源
  • 联系方式



📌 背景与目的

2026 年 4 月 1 日,Google 发布了一次 Chrome 安全更新,修复了 21 个漏洞,其中 CVE-2026-5281 在披露时已被野外积极利用。三天后,CISA 将其列入已知被利用漏洞目录,并发布了一项具有约束力的操作指令,要求联邦机构进行修补。到那时,它已经影响到了我们。

本仓库的存在只有一个原因:当下次发生类似情况时,我们有一个起点,而不是从零开始。它汇集了:

  • 理论:WebGPU 和 Dawn 是什么、释放后使用在硬件层面的含义,以及为什么这个特定漏洞很危险。
  • 研究:原始研究员利用策略和观察结果的文档化总结。
  • 工具:一个版本检测器、一个探测完整 WebGPU 攻击链的漏洞检查器、一个本地扫描器、一个用于批量 CSV 审计的资产群扫描器,以及一个用于实验室验证的 UAF 触发器。



🌐 什么是 WebGPU?

想理解一个漏洞为何存在,就要从系统的设计目的及其所基于的假设入手。

  • W3C WebGPU 规范

    WebGPU 通过 API 在图形处理单元(GPU)上执行渲染和计算等操作。WebGPU 并不是要对外暴露 OpenGL 或 OpenGL ES(嵌入式系统)。它是一个基于 Direct3D 12、Metal 和 Vulkan 等现代 API 思想构建的全新 API。

WebGPU 是 WebGL(浏览器多年来使用的旧 GPU API)的现代替代品。关键区别在于,WebGPU 从设计之初就着眼于安全性和显式资源管理。你需要自己声明每个缓冲区、纹理和管线的生命周期。浏览器充当 JavaScript 与 GPU 硬件之间的验证层。

处于此漏洞中心的对象,按创建顺序如下:``` GPUAdapter ← represents a physical GPU or software fallback └─ GPUDevice ← your logical connection to the adapter; owns everything ├─ GPUBuffer ← a chunk of GPU-accessible memory ├─ GPUShaderModule ← a compiled WGSL shader program ├─ GPUComputePipeline ← a shader wired to a pipeline layout ├─ GPUBindGroup ← binds buffers as inputs to a pipeline ├─ GPUCommandEncoder ← records a sequence of GPU commands └─ GPUQueue ← submits recorded commands to hardware

The rule that matters here: every object is owned by the GPUDevice. Destroying a buffer while the device still has commands in flight that reference it is explicitly illegal under the spec. The Dawn implementation is supposed to detect and reject that. CVE-2026-5281 is a case where it did not.



---
---
---



<div id='whatisdawn'/>

## ***⚙️ 什么是 Dawn?***

- **[Dawn - 开源 WebGPU 实现](https://dawn.googlesource.com/dawn)**

	> Dawn 是正在制定中的 WebGPU 标准的开源跨平台实现。它提供了一个原生 C++ API,镜像了 WebGPU IDL,并带有一些扩展。

Dawn 是 Chrome 内部的 C++ 库,负责将 WebGPU JavaScript 调用转换为平台原生的 GPU 命令。在 Windows 上,它面向 D3D12;在 macOS 上,面向 Metal;在 Linux 上,面向 Vulkan。它位于 Chrome 的 JavaScript 引擎与硬件驱动程序之间,负责四件事:验证 API 调用、序列化命令、跟踪对象生命周期,以及将错误返回给 JavaScript。

CVE-2026-5281 存在于生命周期跟踪部分。具体来说,问题在于当引用缓冲区对象的命令仍在硬件队列中等待执行时,Dawn 将这些 GPU 缓冲区对象保持存活的时长。```
JavaScript (V8)
	│  WebGPU API calls
	▼
Dawn (C++) - validates, serializes, tracks lifetimes, reports errors
	│
	▼
D3D12 (Windows) - Metal (macOS) - Vulkan (Linux)
	│
	▼
GPU hardware driver
	│
	▼
Physical GPU - shader cores, VRAM



🧠 内存基础(栈、堆、VRAM)

在理解 Use-After-Free 之前,你需要对内存中各对象的存放位置有一个清晰的思维模型。``` High addresses ┌────────────────────────────────────┐ │ Kernel space │ The OS and drivers live here. │ │ User-mode code cannot touch it. ├────────────────────────────────────┤ │ Stack │ Function call frames. Fast. │ (grows downward) │ Freed automatically when the │ │ function returns. ├────────────────────────────────────┤ │ Heap │ Dynamic allocations - malloc, new, │ (grows upward) │ smart pointers like Ref. │ │ Freed only when you say so. ├────────────────────────────────────┤ │ BSS / Data / Text │ Globals, constants, compiled code. └────────────────────────────────────┘ Low addresses

Dawn的C++对象,例如支撑GPUBuffer的内部对象,存活于堆上。它们采用引用计数:智能指针统计有多少持有者引用了该对象。当计数降为零时,析构函数运行,内存归还给分配器。

GPUBuffer同时具有两种表示形式,一种在CPU侧,一种在GPU侧:```
CPU side (Dawn, system RAM)
	└─ C++ object - metadata, state flags, and a hardware handle
		│
		│  handle: ID3D12Resource* (D3D12) - MTLBuffer (Metal) - VkBuffer (Vulkan)
		▼
GPU side (driver, VRAM)
	└─ Actual memory allocation on the graphics card

当 JavaScript 调用 buffer.destroy() 时,预期行为是:将对象标记为已销毁,递减引用计数,释放硬件句柄,并释放 VRAM。CVE-2026-5281 中的漏洞会导致 VRAM 被释放,而 GPU 命令队列仍持有对该硬件句柄的引用,这意味着 GPU 正在主动读取或写入不再属于它的内存。




💀 什么是 Use-After-Free(释放后使用)?

  • CWE-416:释放后使用(MITRE)

    引用已释放的内存可能导致程序崩溃、使用意外值或执行代码。使用先前已释放的内存可能产生任何数量的不利后果,从破坏有效数据到执行任意代码。

Use-After-Free(释放后使用)遵循固定的三步模式,是浏览器安全中最常被利用的内存安全漏洞类别之一:```

  1. ALLOCATE - a heap object is created, and a pointer to it is stored somewhere
  2. FREE - the object is destroyed and its memory is returned to the allocator
  3. USE - the stale pointer is read or written after the memory was freed ← the bug
在第 2 步之后,分配器可以将同一块内存区域交给一个完全不同的分配。如果攻击者能够控制被释放区域中随后被放入的内容(这种技术称为堆布局操纵 heap grooming),他们就能控制悬垂指针读回的内容。这就是内存安全漏洞如何变为代码执行。

GPU 端的 UAF 比 CPU 端的 UAF 更难观察,因为:

- “分配器”是 GPU 驱动程序的 VRAM 分配器,而不是系统的 malloc。
- “悬垂指针”是仍被命令队列引用的硬件句柄。
- GPU 异步执行命令,CPU 在崩溃发生很久之前就已经继续运行了。



---
---
---



<div id='thevulnerability'/>

## ***🕳️ 漏洞***

---

<div id='thevulnerability-whatweknow'/>

### ***📋 我们从公开来源了解到的信息***

以下内容完全基于已被公开确认的信息。

- **[NVD: CVE-2026-5281](https://nvd.nist.gov/vuln/detail/CVE-2026-5281)**

	> Google Chrome 146.0.7680.178 之前版本中 Dawn 组件存在释放后使用(UAF)漏洞,允许已攻破渲染进程的远程攻击者通过特制 HTML 页面执行任意代码。

- **[The Hacker News: 2026年4月1日](https://thehackernews.com/2026/04/new-chrome-zero-day-cve-2026-5281-under.html)**

	> Google 已获悉 CVE-2026-5281 存在野外利用。

- **[Help Net Security: 2026年4月1日](https://www.helpnetsecurity.com/2026/04/01/google-chrome-zero-day-cve-2026-5281/)**

	> CVE-2026-5281 由一位化名漏洞猎人(86ac1f1587b71893ed2ad792cd7dde32)报告,此人此前还报告过两个已在 2026 年 3 月 23 日发布的 Chrome 更新中修复的漏洞:WebGL 中的堆缓冲区溢出(CVE-2026-4675)以及 Dawn 中的另一个释放后使用漏洞(CVE-2026-4676)。该漏洞猎人这次还报告了 Dawn 中的第三个释放后使用漏洞(CVE-2026-5284),该漏洞也已在此次更新中修复。

---

<div id='thevulnerability-executionlayers'/>

### ***🔗 从 JavaScript 到硬件***
下载工具