关键信息 漏洞描述 CVE编号: CVE-2025-51060 漏洞类型: 内核模式任意代码执行 受影响软件: cpuvirt.sys 驱动程序 利用方式: 通过未验证的 和 IOCTLs 利用过程 1. 获取 KSystemCall64 地址 - 使用未验证的 DeviceIoControl(0x9C402440) 来读取 KSystemCall64 地址。 - 地址也可以通过查询而无需 。 2. 覆盖 KSystemCall64 地址 - 使用未验证的 DeviceIoControl(0x9C402444) 将 ROP 链地址写入 ,以覆盖 KSystemCall64。 3. 设置 ROP 链 - 在调用 syscall 之前,将特定的小工具推入堆栈以操纵返回地址并执行所需的 opcodes。 - 堆栈推送顺序: - SnapoffQueryry - MovCr8RexRetGadget - SyscallHandler (用户定义函数地址) - PopRcxRetGadget - Kernel (syscall 后返回地址) - SysretGadget 4. ROP 链执行流程 - KSystemCall64: 修改为指向 pop rcx; ret; gadget,通过 syscall 初始化 ROP 链。 - pop rcx; ret; Loads SnapoffQueryry rcx 并返回到 MovCr8RexRetGadget。 - SmepOff: Writes rcx (SnapoffQueryry) to cr8 以禁用 SMEP,返回到 SyscallHandler。 - SyscallHandler: 执行用户定义的函数,恢复 msg_list_addr 和 cr8 到原始值,返回到 PrepareSysret。 - PrepareSysret: 将 kernel 地址加载到 rcx,返回到 SysretGadget。 - GoFinish: 执行 sysret,返回存储在 rcx 中的内核地址。 - Finish: 通过 popfs, pop, 和 ret 终止 ROP 链。