mathisvickie/CVE-2021-27965
GitHub: mathisvickie/CVE-2021-27965
针对 CVE-2021-27965 的本地权限提升 PoC,利用 MsIo64.sys 驱动程序的栈缓冲区溢出漏洞将权限提升至 SYSTEM。
Stars: 12 | Forks: 4
# CVE-2021-27965
用于利用 CVE-2021-27965 实现本地权限提升 (LPE) 的简单 PoC,通过启动系统 cmd。
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27965
在经签名的 MICSYS Windows 驱动程序 (MsIo64.sys) 中发现了一个问题,该问题可能导致整个本地系统被攻破。该驱动程序的 IOCTL 派发例程在__所有__ IOCTL 代码中都存在基于栈的缓冲区溢出,并且缺乏对用户提供缓冲区的验证。
## IOCTL
任何人都可以创建句柄并向这些 IOCTL 代码发送请求,这破坏了 Windows 安全模型:
- _0x80102040_ - 将任意物理内存映射到调用进程以及未检查的指针访问(可能导致系统崩溃/DoS)
- _0x80102044_ - 取消映射物理内存以及未检查的指针访问(可能导致系统崩溃/DoS)
- _0x80102050_ - 任意端口读取(字节, 字, 双字)
- _0x80102054_ - 任意端口写入(字节, 字, 双字)
## 栈缓冲区溢出
对于每个 IOCTL 代码,驱动程序并不直接访问 _Irp->SystemBuffer_,而是使用类似 memcpy 的函数将 _Irp->SystemBuffer_ 复制到当前函数的栈帧缓冲区中,该缓冲区的大小总是固定的(然后再使用该缓冲区)。由于 _Irp->SystemBuffer_ 和 _Irp->CurrentStackLocation->InputBufferLength_ 都由调用进程控制,恶意攻击者可以发送足够大的缓冲区来溢出函数栈帧内的缓冲区。注意:即使在 DriverEntry 中存在 **__security_init_cookie()**,由于某种原因,在 IOCTL 派发中却缺少了 **__security_check_cookie()**。
## 编译 PoC
TODO
## 测试环境
TODO
标签:0day挖掘, CVE-2021-27965, IOCTL, LPE, MICSYS驱动, MsIo64.sys, NT AUTHORITY/SYSTEM, PoC, UML, Web报告查看器, Windows驱动漏洞, 任意物理内存映射, 内核安全, 客户端加密, 客户端加密, 暴力破解, 本地权限提升, 栈溢出, 系统提权, 缓冲区溢出