这是一个基础的概念验证(PoC),用于利用 Lenovo Dispatcher 驱动程序(LnvMSRIO.sys)(CVE-2025-8061)。该漏洞由 Luis Casvella 发现(来源:https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html)。
这个 PoC 的主要思路是仅利用读写原语,从 ntoskrnl.exe 中窃取系统令牌(system token)。为此,PoC 使用 Superfetch/PFN(https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/)在用户态将虚拟地址转换为物理地址。
通过使用 Superfetch,我们可以将虚拟地址转换为物理地址,并直接将其提供给易受攻击的驱动程序,从而实现对任意地址的读写。基于此,该 PoC 会用一小段 shellcode 覆盖 ntoskrnl.exe 中 NtAddAtom 函数的开头,以跳转到我们在 Rust 代码(base.rs 中的 steal_kernel_token_shellcode_fn)中通过内联汇编定义的用户态 shellcode。这段小 shellcode 在 generate_jmp_user_shellcode 中生成,可以看到,它会清除 CR4 中的第 20 位以禁用 SMEP,然后调用我们的用户态 shellcode(用于窃取系统令牌),最后重新启用 SMEP。
通过上述所有步骤,我们将获得一个系统权限的 cmd。
重要提示:查询 Superfetch 需要以管理员身份运行。
该 PoC 已在 Windows 10(22h2)和 Windows 11(25h2)上测试通过。请根据你的 Windows 版本调整相应的偏移量(offsets)。