TechPowerUp ThrottleStop.sys 驱动(CVE-2025-7771)的完整概念验证。
一个已签名、仍可加载的内核驱动通过两个 IOCTL 暴露了未经验证的物理内存读和
写。本仓库将该原语转化为可用的管理员到 SYSTEM 本地权限提升,并记录了一个设备命名怪癖,
该怪癖会破坏大多数基于路径和文件名的检测。
针对相同 IOCTL 的 PoC 已经存在(见致谢)。这是一个独立的完整 利用链,而非原语演示。
| 字段 | 值 |
|---|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| 版本 | 3.0.0.0(“Low-Level Driver”,2004-2020) |
| 签名者 | TechPowerUp LLC,DigiCert EV Code Signing |
| 证书指纹 | 524EDA9C819321C66E22C7BABEB23DAEAFFB2182 |
| 证书有效期 | 2019-08-10 至 2022-06-15 |
证书已于 2022 年过期,但签名带有受信任的副署 时间戳,因此 Windows 仍会加载它。吊销仅在其日期早于 签名时间时才有帮助,而对于此类旧驱动来说这种情况很少见。
版本资源没有 CompanyName、OriginalFilename 或 InternalName,因此
无法从文件自身的元数据将其归属于某个供应商。
两个 IOCTL 在没有任何边界或地址验证的情况下读写物理内存:
| IOCTL | 操作 |
|---|---|
0x80006498 | 物理读 |
0x8000649C | 物理写 |
两者都是 METHOD_BUFFERED,因此不存在用户指针解引用;缺陷在于
缺少对调用方提供的物理地址的验证,而不是未检查的指针。
值得指出的是:写处理程序 0x8000649C 被声明为 FILE_READ_ACCESS。以只读方式
打开的句柄仍可发出物理写操作,因此声明的访问掩码与
处理程序实际执行的操作不匹配。
打开设备需要管理员权限,因此这本身并非权限边界 跨越。它给已经是管理员的攻击者带来的是从用户态进行任意内核 读写,这击败了本应在管理员之上保持的防护:HVCI 代码完整性、PPL 以及 EDR/AV 自我保护。典型的自带 易受攻击驱动。
作为具体演示,PoC 使用该读写原语窃取 SYSTEM 令牌 并生成一个 SYSTEM shell。
CVSS 4.0:AV:L/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H(8.7,高)。
一切都在用户态针对驱动的物理读写 IOCTL 运行。不涉及 页表遍历,也不涉及 CR3;两个进程都通过直接扫描物理 内存来定位:
ImageFileName 为
System 且 UniqueProcessId 为 4 的 EPROCESS。扫描范围限定于从固件
HARDWARE\RESOURCEMAP\...\Physical Memory 注册表项读取的已填充 RAM 范围,
而不是猜测的窗口,因此 MMIO 空洞永远不会被触及,已安装 RAM 之上的内容
也不会被遗漏。Token 字段(EPROC_TOKEN)。Token
槽位。该令牌是一个 _EX_FAST_REF,因此默认会屏蔽低位引用计数位(--mask
选择该行为)。cmd.exe;whoami 返回 NT AUTHORITY\SYSTEM。偏移量(EPROC_TOKEN、EPROC_PID、EPROC_IMG_NAME 等)针对特定构建,
必须根据目标 Windows 版本上的 dt nt!_EPROCESS 进行确认。
可执行文件名很重要。第 3 步通过匹配物理内存中的
ImageFileName 来定位我们自己的进程,而该字段上限为 15 个字符,扫描匹配前 8 个。
保持编译后的名称简短且独特;如果你重命名
二进制文件,请保持在该限制内,否则自扫描将找不到该进程。
驱动不使用固定的设备名。它从注册所用的服务名派生设备对象名称;
磁盘上的文件名无关紧要。无论磁盘上的文件叫什么,将
二进制文件注册在服务 TRIXX 下都会产生 \\.\TRIXX。
因此,任何以 \Device\ThrottleStop 或 ThrottleStop.sys 为关键的检测都可以被轻易
绕过。检测必须基于文件哈希或签名证书:
SHA256: 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0
Thumbprint: 524EDA9C819321C66E22C7BABEB23DAEAFFB2182
Subject: CN=TechPowerUp LLC, O=TechPowerUp LLC, L=Spokane, S=Washington, C=US
源代码中的 DEVICE_NAMES 列表只是对已知产品安装的探测。将
设备名作为参数传入,以针对你自己注册的服务。
| CVE | 驱动 |
|---|---|
| CVE-2019-7245 | GPU-Z.sys |
| CVE-2025-5324 | GPU-Z.sys |
| CVE-2025-7771 | ThrottleStop.sys(本仓库) |
此处不附带该二进制文件。请对照上面的 SHA256 验证任何副本。该样本 已编入 LOLDrivers。
cl /nologo /EHsc /W4 /O2 src\ThrottleStop.cpp /Fe:myLittleLpe.exe /link advapi32.lib
仅供实验室使用。在具有可回滚快照的隔离 VM 中运行。
sc.exe create <name> type= kernel binPath= C:\path\to\ThrottleStop.sys
sc.exe start <name>
myLittleLpe.exe
sc.exe stop <name>
sc.exe delete <name>
该二进制文件不接受任何参数。它打印物理内存映射,扫描 SYSTEM
和本地 EPROCESS,交换令牌,并生成以
NT AUTHORITY\SYSTEM 运行的 cmd.exe。

针对同一驱动的其他公开工作,供比较:
为防御性研究和检测工程而发布。该漏洞已作为 CVE-2025-7771 公开。 此处的一切均在作者拥有的系统上测试。请勿在你不拥有或未获授权测试的系统上运行此程序。