mein-0/cve-2026-29923

GitHub: mein-0/cve-2026-29923

CVE-2026-29923 的概念验证,利用 pstrip64.sys 驱动缺乏物理内存映射权限校验的缺陷实现 Windows 本地权限提升至 SYSTEM。

Stars: 0 | Forks: 0

# CVE-2026-29923 — pstrip64.sys 本地权限提升 这是 CVE-2026-29923 的一个最小概念验证。该漏洞存在于 `pstrip64.sys` 内核驱动程序(EnTech Taiwan PowerStrip ≤ 3.90.736)中,允许非特权 用户态进程提权至 `NT AUTHORITY\SYSTEM`。 ## 漏洞详情 `pstrip64.sys` 暴露了一个 IOCTL(`0x80002008`),该 IOCTL 接收用户提供的物理 地址,并通过打开 `\Device\PhysicalMemory` 并使用当前 进程句柄调用 `ZwMapViewOfSection`,将其直接映射到调用进程的虚拟地址空间中。 该操作没有任何权限检查,除了 `HalTranslateBusAddress` 强制执行的验证外没有任何地址验证,且对符号链接 `\\.\PSTRIP64` 也没有进行任何访问控制。 结果导致非特权进程获得了不受限制的物理内存读写原语。 ## 漏洞利用 有了任意的物理内存读写能力,漏洞利用分为四个步骤进行。 **1. 扫描 EPROCESS 结构** 以 2 MB 为块单位遍历物理 RAM。扫描每个块以寻找内核池 标记 `Proc`(`0x636F7250`),该标记用于标识包含进程 `_EPROCESS` 结构的池分配项。在信任 PID 之前,会使用三种轻量级启发式方法验证候选命中项: - `PriorityClass == 0x2` — 所有活动进程都在 Normal 优先级下运行 - `ProcessLock == 0x0` — 稳定进程的锁字段是清零的 - `ImageFileName[0]` 是可打印的 ASCII 字符 — 垃圾内存很少能满足这一点 **2. 定位两个 token 指针** 需要两个目标: - 我们自己进程在 `_EPROCESS` 中 `Token` 字段的**物理地址** - System 进程(`PID 4`)`_EPROCESS` 中存储的 **token 值** **3. 覆盖我们的 token** 映射包含我们 `Token` 字段的 4 KB 页面,并使用 System token 值覆盖该 字段。从此时起,Windows 内核会将我们的进程视为 `NT AUTHORITY\SYSTEM`。 **4. 启动 shell** 通过 `CreateProcessA` 启动 `cmd.exe`。由于子进程会继承 父进程的 token,因此生成的 shell 将以 SYSTEM 身份运行。 ## MMIO 注意事项 在 x86 系统上,3 GB 到 4 GB 的物理地址窗口保留给 MMIO 使用。 尝试映射此范围内的页面会导致驱动程序返回错误代码 `74` (`HalTranslateBusAddress` 失败)。扫描会跳过此窗口并在 `0x100000000` 处恢复,以捕获 Windows 放置在 4 GB 标记之上的内核结构。 ## 32 位要求 驱动程序的映射处理程序将返回的虚拟地址写入一个 `DWORD` 字段 (`LowPart`),从而将 64 位的 VA 截断为 32 位。64 位构建版本会接收到 损坏的指针并立即崩溃。**必须编译为 x86 架构。** ## 受影响软件 | 软件 | 版本 | |---|---| | EnTech Taiwan PowerStrip | ≤ 3.90.736 | 驱动程序哈希值 (SHA-256): ``` ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e ``` ## EPROCESS 偏移量 硬编码的偏移量针对的是 **Windows 10 22H2 x64**。其他构建版本需要 更新这些值 — 请在 WinDbg 中使用 `dt nt!_EPROCESS` 进行确认。 | 字段 | 偏移量 | |---|---| | `PriorityClass` | `0x5B7` | | `ProcessLock` | `0x438` | | `UniqueProcessId` | `0x440` | | `ImageFileName` | `0x5A8` | | `Token` | `0x4B8` | ## 构建说明 打开 Visual Studio 的 x86 开发者命令提示符并运行: ``` cl /EHsc /O2 exploit.c /Fe:poc.exe ``` 或者在 Visual Studio 中将平台目标设置为 **x86**,并以 Release 模式构建。 该二进制文件除了 Windows SDK 外不需要任何外部依赖。 ## 使用说明 首先加载 `pstrip64.sys`(需要管理员权限来加载驱动程序,一旦加载完毕, 运行漏洞利用程序本身则不需要管理员权限),然后执行: ``` poc.exe ``` 此时将打开一个新的 `cmd.exe` 窗口,并以 `NT AUTHORITY\SYSTEM` 身份运行。 ## 缓解措施 **阻止加载驱动程序(首选)** - 将上面的驱动程序哈希值添加到您所在组织的黑名单中 - 通过 WDAC 启用 [Microsoft 的易受攻击驱动程序黑名单](https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules) - 启用 Hypervisor-Protected Code Integrity (HVCI) **检测正在进行的漏洞利用** - 针对未知驱动程序二进制文件的新内核模式服务安装发出警报 - 监控产生 `SYSTEM` 级别子进程的低/中等完整性级别进程 - 标记任何在合法的身份验证事件之外将 token 更改为 `NT AUTHORITY\SYSTEM` 的进程 ## 免责声明 此代码仅出于教育和防御性研究目的发布。 请仅在您拥有或获得明确书面许可进行测试的系统上使用它。 作者对任何滥用行为不承担责任。 ## 参考 - [Microsoft 易受攻击驱动程序黑名单](https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules) - [WDAC 概述](https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/appcontrol) - [Windows EPROCESS 内部机制](https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/ntos/ps/eprocess/index.htm) - [HalTranslateBusAddress — MSDN](https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/nf-ntddk-haltranslatebusaddress) - [ZwMapViewOfSection — MSDN](https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-zwmapviewofsection)
标签:0day挖掘, PoC, Web报告查看器, Windows, Windows驱动, 内核安全, 客户端加密, 暴力破解, 本地提权