对 Viper RGB 驱动多个缓冲区溢出漏洞的解析
发布时间:2021-11-14 04:47:25 所属栏目:安全 来源:互联网
导读:0x01 漏洞信息 漏洞类型:基于堆栈的缓冲区溢出[ CWE-121 ],暴露的IOCTL(访问控制不足)[ CWE-782 ] 影响:代码执行允许特权提升 远程可利用:否 本地可利用:是 CVE名称: CVE-2019-19452 0x02 漏洞描述 Patriot Memory是一家总部位于美国的技术公司,设计
0x01 漏洞信息 漏洞类型:基于堆栈的缓冲区溢出[ CWE-121 ],暴露的IOCTL(访问控制不足)[ CWE-782 ] 影响:代码执行允许特权提升 远程可利用:否 本地可利用:是 CVE名称: CVE-2019-19452 0x02 漏洞描述 Patriot Memory是一家总部位于美国的技术公司,设计和制造内存模块,闪存驱动器,移动配件和游戏设备。 在处理IoControlCode 0x80102040时,在Viper驱动程序RGB 1.1版中发现缓冲区溢出漏洞。本地攻击者可以利用此漏洞,因此获得NT AUTHORITY SYSTEM特权。 IOCTL代码0x80102050和0x80102054允许具有低特权的用户从IO端口读取或向其写入1/2/4字节。可以通过多种方式来利用它来最终以提升的特权运行代码。 0x03 安全建议 1.1版和所有以前的版本在每个受支持的Windows版本中都容易受到攻击(安装程序:Patriot Viper RGB v1.1.exe) 解决方案和解决方法: Patriot Memory已发布版本MSIO_191231_v1.2,该版本已修复报告中的漏洞。 这些漏洞是由Core Security Exploit团队的Ricardo Narvaja和Lucas Dominikow发现的。 0x04 漏洞分析和利用验证 基于堆栈的缓冲区溢出特权提升 CVE-2019-19452 对版本1.0的漏洞的利用验证发现了溢出漏洞的存在,该溢出可以覆盖ZwOpenSection和ZwMapViewOfSection的参数。 1.0版和1.1版之间的二进制代码差异表明,尽管对这些函数的参数进行了检查,但先前的溢出漏洞仍存在未进行修补,而CoreLabs在随后研究中能够控制其大小。 可以在下面找到有关版本1.0的信息: https://github.com/active-labs/Advisories/blob/master/ACTIVE-2019-012.md https://www.activecyber.us/activelabs/viper-rgb-driver-local-privilege-escalation-cve-2019-18845 在版本1.1中,控制器分析IoControlCodes并到达此位置,将IoControlCode与0x80102040进行比较。 .text:0000000000001518 lea rcx, aIrpMjDeviceCon ; "IRP_MJ_DEVICE_CONTROL" .text:000000000000151F call DbgPrint .text:0000000000001524 mov r11d, [rbp+18h] .text:0000000000001528 cmp r11d, 80102040h .text:000000000000152F jz loc_16D4 如果比较结果正确,则会调用由CoreLabs控制的MaxCount(要复制的大小)和SRC(源缓冲区)的memmove,没有进行验证以确保数据适合目标缓冲区,从而导致堆栈溢出。 .text:00000000000016E8 lea rcx, [rsp+78h+Src] ; Dst .text:00000000000016ED mov r8, rbx ; MaxCount .text:00000000000016F0 mov rdx, rsi ; Src .text:00000000000016F3 call memmove 由于驱动程序尚未使用安全cookie保护函数的堆栈,因此可以成功执行任意代码。 可以通过调用CreateFileA来获取驱动程序的句柄,然后通过发送受控数据来调用DeviceIoControl来实现此功能。下面将使用针对Windows 7 SP1 x64设计PoC,演示针对x64版本驱动程序的代码执行。该代码将需要改编为其他Windows版本。 (编辑:西双版纳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |