Windows RDP 协议堆溢出漏洞分析(CVE-2019-1181 & CVE-2019-1182)

2019年8月,微软公布了一系列RDP漏洞的补丁更新,其中两个是可蠕虫的RDP漏洞,从Windows 7到Windows 10,漏洞CVE-2019-1181和CVE-2019-1182会影响这之间的所有操作系统。

RDP客户端和服务器中都存在易受攻击的代码,因此可以在任一方进行漏洞利用。

0x01 补丁比较

img

BinDiff下分析RDPCoreTS.dll(在Windows 7上的RDP相关文件)。

从以前分析RDP的经验来看,DecodeFormatData和SendFormatDataRequest函数只能是在身份验证后才可调用,修复后仅保留解压缩功能。

img

未修补和修补丁的解压缩功能之间的比较。

原始代码(左)有些混乱,因为它已被优化为了一个if语句,补丁代码(右)也有些混乱,并且具有一些附加的验证。

第24行添加了代码,用于检查v11 + 0x2000是否小于v11。如果条件为真,则会设置一个错误代码,随后将导致函数中止。

如何将0x2000添加到整数使其比以前更小?答案是:通过整数溢出漏洞。

无符号整数是4个字节,可以保存0到0xFFFFFFFF之间的任何值(4,294,967,295‬)。如果整数增加到超过最大值,则循环到零。因此,如果v11为0xFFFFFFFF,则向其添加0x2000将导致最终值0x1FFF,该值小于原始值。

v11用作通过“ new”运算符执行的堆分配的大小,这里的假设是,如果我们可以溢出v11,它将导致分配的大小小于解压缩的数据,从而导致堆溢出。

0x03 动态调试

为了更好地理解如何利用整数溢出,我需要知道我控制的值以及如何调用易受攻击的函数。为此,我对DecompressUnchopper :: DecompressUnchopper(DecompressUnchopper类的初始化函数)进行了堆栈回溯,找到利用此类的函数:CRdpDynVCMgr :: HandleIncomingDvcData。

从我以前对RDP的分析,我知道DynVC是“ Dynamic Virtual Channel”的缩写,DVC接口允许客户端和服务器上的模块之间进行通信,并支持原始数据和压缩数据,发送压缩数据可能会破坏易受攻击的“解压缩”功能。

我已经编写了用于利用BlueKeep的自定义RDP客户端,我添加了代码以打开DVC通道并发送一些测试数据。

img

将字符串“ MalwareTech123”发送到DVC通道。

将调试器附加到RDP服务器进程后,我在DecompressUnchopper :: Decompress上设置了一个断点并运行了我的代码。

imgDecompressUnchopper :: Decompress上的断点。

rdx(第二个参数)是我发送的测试数据,而r8(第三个参数)是数据长度,现在知道了函数参数,便可以清理反编译的代码了。

img

清理后的代码。

可以触发崩溃。

0x03 堆溢出分析

为了通过使RDP服务器崩溃来测试漏洞,我制作了一个恶意DVC数据包。

img

构建恶意DVC数据包。

我将uncompressedSize字段设置为1 – 0x2000(0xFFFFE001‬),以便在添加0x2000时它将循环到1,然后将压缩数据设置为字母’A’重复0x200次,这将导致堆缓冲区被0x1FF字节溢出。

现在我可以将任意大小的任意数据写入相邻的堆分配了,该漏洞之所以严重,是因为对象实例存储在同一堆中,从而有可能覆盖它们。

例如,我更改了对象的VTable指针,以便应用程序通过地址0x1337133713371337执行ptr调用。

img


   转载规则


《Windows RDP 协议堆溢出漏洞分析(CVE-2019-1181 & CVE-2019-1182)》 0xbird 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Apache Tomcat Ghostcat漏洞详细分析(CVE-2020-1938) Apache Tomcat Ghostcat漏洞详细分析(CVE-2020-1938)
在Apache Tomcat中发现的Ghostcat漏洞(CVE-2020-1938,CNVD-2020-10487)最近成为了关注的焦点,研究员发现此漏洞可以实现远程代码执行(RCE)。 Apache Tomcat是流行的开源Java s
2020-04-02
下一篇 
微软SMBv3远程代码执行漏洞分析(CVE-2020-0796) 微软SMBv3远程代码执行漏洞分析(CVE-2020-0796)
0x01 漏洞描述Microsoft通过Microsoft Server Message Block 3.1.1(SMBv3)协议处理某些请求的方式中存在一个远程执行代码漏洞,成功利用此漏洞的攻击者可以在目标SMB服务器或SMB客户端上执
2020-03-16
  目录