针对 TechPowerUp ThrottleStop.sys 驱动(CVE-2025-7771)的完整概念验证(PoC)。
一个已签名且仍可加载的内核驱动通过两个 IOCTL 暴露了未经校验的物理内存读写。
本仓库将该原语转化为可用的从管理员到 SYSTEM 的本地权限提升,并记录了一个设备命名怪癖,
该怪癖可绕过大多数基于路径和文件名的检测。
针对相同 IOCTL 的 PoC 早已存在(见致谢)。这是一个独立的完整利用链,而非原语演示。
| 字段 | 值 |
|---|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| 版本 | 3.0.0.0(“Low-Level Driver”,2004-2020) |
| 签名者 | TechPowerUp LLC,DigiCert EV 代码签名 |
| 证书指纹 | 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 自我保护。典型的自带易受攻击驱动(BYOVD)。
作为具体演示,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
仅供实验室使用。请在带有快照的隔离虚拟机中运行,以便回滚。
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 公开。此处所有内容均在作者自有系统上测试。请勿在非您所有或未经授权测试的系统上运行。