jeffaf/CVE-2025-3464-AsIO3-LPE
GitHub: jeffaf/CVE-2025-3464-AsIO3-LPE
针对华硕 AsIO3.sys 驱动的本地提权利用,结合 TOCTOU 绕过认证和 PreviousMode 减一技术实现 SYSTEM 权限获取。
Stars: 8 | Forks: 2
# CVE-2025-3464-AsIO3-LPE
CVE-2025-3464:针对 ASUS AsIO3.sys 的非特权 LPE 漏洞利用 - TOCTOU 认证绕过 + PreviousMode 减一
# CVE-2025-3464: AsIO3.sys 本地权限提升
此漏洞利用仅在 Windows 11 22H2 或更早版本上有效。Microsoft 已修复了 PreviousMode 相关的技巧。
针对 ASUS AsIO3.sys 驱动程序的本地权限提升漏洞利用。获取 `NT AUTHORITY\SYSTEM` 权限。
## 概述
此漏洞利用将认证绕过 (CVE-2025-3464) 与减一原语 (decrement primitive) 链接起来,将任何本地用户的权限提升至 SYSTEM。
| 属性 | 值 |
|----------|-------|
| **CVE** | CVE-2025-3464 |
| **类型** | 本地权限提升 |
| **驱动** | AsIO3.sys (ASUS) |
| **测试环境** | Windows 11 22H2 (Build 22621) |
## 漏洞详情
### CVE-2025-3464 - 通过 TOCTOU 绕过认证
AsIO3.sys 驱动程序通过检查调用进程的可执行路径是否包含 `AsusCertService` 并验证 SHA256 哈希来验证调用进程。此检查容易受到使用 NTFS 硬链接的 Time-of-Check-Time-of-Use (TOCTOU) 竞争条件攻击。
**攻击流程:**
1. 在包含 `AsusCertService` 的路径创建指向漏洞利用程序可执行文件的硬链接
2. 通过硬链接生成子进程(进程映像路径现在通过了子字符串检查)
3. 将硬链接交换为指向 `AsusCertService.exe`
4. 子进程打开设备句柄
5. 授权授予受攻击者控制的进程
**注意:** 驱动程序仅通过子字符串匹配检查路径是否 *包含* `AsusCertService`。任何用户可写的路径都有效(例如 `C:\Users\Public\AsusCertService\`),这使得无需管理员权限即可利用此漏洞。
### 减一原语 (IOCTL 0xA0402450)
该驱动程序暴露了一个 IOCTL,它在用户控制的指针上调用 `ObfDereferenceObject`。这会在 `(ObjectPtr - 0x30)` 处执行 8 字节原子减一,提供了一个任意减一原语。
**通过 PreviousMode 进行利用:**
- 通过 `NtQuerySystemInformation(SystemHandleInformationEx)` 泄露 KTHREAD 地址
- 目标:`KTHREAD + 0x232` (PreviousMode 字段)
- 将 PreviousMode 从 1 (UserMode) 减一至 0 (KernelMode)
- 当 PreviousMode=0 时,`NtReadVirtualMemory`/`NtWriteVirtualMemory` 可以访问内核内存
- 遍历 EPROCESS 链表,窃取 SYSTEM token
- 在生成 shell 之前将 PreviousMode 恢复为 1
## 用法
```
# 编译 (Linux 交叉编译)
x86_64-w64-mingw32-gcc -O2 -o AsIO3_FullExploit.exe AsIO3_FullExploit.c -lntdll -lshlwapi
```
# 在目标机器上(需要加载 AsIO3.sys)
AsIO3_FullExploit.exe
前置条件:
- AsIO3.sys 驱动程序已加载(随 ASUS Armoury Crate、AI Suite 等附带)
- AsusCertService.exe 可访问(搜索常见的 ASUS 安装路径)
结构偏移 (Windows 11 22H2)
KTHREAD + 0x232 = PreviousMode
KTHREAD + 0x220 = Process (EPROCESS 指针)
EPROCESS + 0x440 = UniqueProcessId
EPROCESS + 0x448 = ActiveProcessLinks
EPROCESS + 0x4B8 = Token
注意:偏移量因版本而异。请针对您的目标 Windows 内部版本进行验证。Windows 23H2 会抛出 PREVIOUS_MODE_MISMATCH (0x1f9)。这是针对这些 PreviousMode 技巧的一种缓解措施。
技术说明
- 在 KTHREAD+0x232 处的 8 字节减一会影响相邻字段 (UserAffinityPrimaryGroup, BasePriority)
- 关键:在调用 CreateProcess 或任何用户模式地址空间操作之前,必须将 PreviousMode 恢复为 1
- 未能恢复 PreviousMode 会导致进程创建期间在 nt!PspLocateInPEManifest 中发生 BSOD
参考
- https://blog.talosintelligence.com/decrement-by-one-to-rule-them-all/
- ASUS Armoury Crate / AI Suite 驱动程序组件
免责声明
此代码仅用于授权的安全研究和教育目的。请仅针对您拥有或明确获得测试许可的系统使用。未经授权访问计算机系统是违法的。
## 概述
此漏洞利用将认证绕过 (CVE-2025-3464) 与减一原语 (decrement primitive) 链接起来,将任何本地用户的权限提升至 SYSTEM。
| 属性 | 值 |
|----------|-------|
| **CVE** | CVE-2025-3464 |
| **类型** | 本地权限提升 |
| **驱动** | AsIO3.sys (ASUS) |
| **测试环境** | Windows 11 22H2 (Build 22621) |
## 漏洞详情
### CVE-2025-3464 - 通过 TOCTOU 绕过认证
AsIO3.sys 驱动程序通过检查调用进程的可执行路径是否包含 `AsusCertService` 并验证 SHA256 哈希来验证调用进程。此检查容易受到使用 NTFS 硬链接的 Time-of-Check-Time-of-Use (TOCTOU) 竞争条件攻击。
**攻击流程:**
1. 在包含 `AsusCertService` 的路径创建指向漏洞利用程序可执行文件的硬链接
2. 通过硬链接生成子进程(进程映像路径现在通过了子字符串检查)
3. 将硬链接交换为指向 `AsusCertService.exe`
4. 子进程打开设备句柄
5. 授权授予受攻击者控制的进程
**注意:** 驱动程序仅通过子字符串匹配检查路径是否 *包含* `AsusCertService`。任何用户可写的路径都有效(例如 `C:\Users\Public\AsusCertService\`),这使得无需管理员权限即可利用此漏洞。
### 减一原语 (IOCTL 0xA0402450)
该驱动程序暴露了一个 IOCTL,它在用户控制的指针上调用 `ObfDereferenceObject`。这会在 `(ObjectPtr - 0x30)` 处执行 8 字节原子减一,提供了一个任意减一原语。
**通过 PreviousMode 进行利用:**
- 通过 `NtQuerySystemInformation(SystemHandleInformationEx)` 泄露 KTHREAD 地址
- 目标:`KTHREAD + 0x232` (PreviousMode 字段)
- 将 PreviousMode 从 1 (UserMode) 减一至 0 (KernelMode)
- 当 PreviousMode=0 时,`NtReadVirtualMemory`/`NtWriteVirtualMemory` 可以访问内核内存
- 遍历 EPROCESS 链表,窃取 SYSTEM token
- 在生成 shell 之前将 PreviousMode 恢复为 1
## 用法
```
# 编译 (Linux 交叉编译)
x86_64-w64-mingw32-gcc -O2 -o AsIO3_FullExploit.exe AsIO3_FullExploit.c -lntdll -lshlwapi
```
# 在目标机器上(需要加载 AsIO3.sys)
AsIO3_FullExploit.exe
前置条件:
- AsIO3.sys 驱动程序已加载(随 ASUS Armoury Crate、AI Suite 等附带)
- AsusCertService.exe 可访问(搜索常见的 ASUS 安装路径)
结构偏移 (Windows 11 22H2)
KTHREAD + 0x232 = PreviousMode
KTHREAD + 0x220 = Process (EPROCESS 指针)
EPROCESS + 0x440 = UniqueProcessId
EPROCESS + 0x448 = ActiveProcessLinks
EPROCESS + 0x4B8 = Token
注意:偏移量因版本而异。请针对您的目标 Windows 内部版本进行验证。Windows 23H2 会抛出 PREVIOUS_MODE_MISMATCH (0x1f9)。这是针对这些 PreviousMode 技巧的一种缓解措施。
技术说明
- 在 KTHREAD+0x232 处的 8 字节减一会影响相邻字段 (UserAffinityPrimaryGroup, BasePriority)
- 关键:在调用 CreateProcess 或任何用户模式地址空间操作之前,必须将 PreviousMode 恢复为 1
- 未能恢复 PreviousMode 会导致进程创建期间在 nt!PspLocateInPEManifest 中发生 BSOD
参考
- https://blog.talosintelligence.com/decrement-by-one-to-rule-them-all/
- ASUS Armoury Crate / AI Suite 驱动程序组件
免责声明
此代码仅用于授权的安全研究和教育目的。请仅针对您拥有或明确获得测试许可的系统使用。未经授权访问计算机系统是违法的。标签:0day, 0day挖掘, Arbitrary Decrement, AsIO3.sys, ASUS, CVE-2025-3464, Exploit, Gophish, LPE, NTFS硬链接, PoC, PreviousMode, TOCTOU, Web报告查看器, Windows 11, 内核安全, 协议分析, 子域名枚举, 客户端加密, 暴力破解, 本地提权, 权限提升, 竞态条件, 系统安全, 认证绕过, 驱动漏洞