Lenovo Diagnostics Driver 的不正确访问控制允许低权限用户发布设备 IOCTL 以任意物理/虚拟内存读取/写入。
感谢 ch3rn0byl 提供的帮助(我完全 100% 撕掉了他的两个函数)。
IOCTL 0x222000:
rdmsr
IOCTL 0x222008/0x22200C:
HalGet/SetBusData
IOCTL 0x222010:
通过 MmMapIoSpace 读取
IOCTL 0x222014:
通过 MmMapIoSpace 写入
IOC 将输入此披露中提供的指针中的值复制到映射的物理内存中
为了解决 MmPteBase 和其他先决条件,通过在物理内存范围0x1000 - 0x10000
中找到 8 个零字节来物理“交换”空间。
该空间,虚拟内存将通过 IOCTL 0x222014 复制到该交换空间,并使用 IOC 0x22200 读回。
就像现在一样,所有虚拟读取都使用这个“交换”空间完成的。
这是进行虚拟学习的最佳方式吗?可能不是。
它有效吗?是的。
哦,注意你的偏移量——这是在禁止 HVCI 的 Windows 11 21H2 上测试的。
点击阅读原文-跳转至项目地址
https://github.com/alfarom256/CVE-2022-3699/