CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

2019年,checkpoint研究人员发现了Remote Desktop Protocol (RDP) 客户端中的安全漏洞——CVE-2019-0887。研究人员在测试MacOS RDP客户端过程中发现不仅可以绕过微软的发布的补丁,还可以绕过任意的路径规范化检查。

CVE-2019-0887补丁

微软2019年就发布了CVE-2019-0887漏洞的安全补丁。该补丁非常简单,根据最佳实践,基于PathCchCanonicalize函数加入了一个验证检查,如图1所示:

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 1: PathCchCanonicalize用于计算文件名的规范化形式

如果成功,规范化的输出就会与原始文件名进行比较,如果不匹配就会产生错误。也就是说如果文件名中含有. 或 ..这样的字符串,当转化为规范化形式时,有效性检查就会失败。但是该补丁确实修复了路径遍历漏洞。

MacOS RDP 客户端

研究人员Chris发现CVE-2019-0887漏洞也可以应用于Microsoft RDP客户端。Checkpoint研究人员就对macOS RDP客户端进行了测试,发现漏洞利用可以绕过微软发布的补丁。

PathCchCanonicalize

研究人员随后对微软的主路径规范化函数——PathCchCanonicalize进行了简单的测试。如图2所示:

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 2: 用\测试PathCchCanonicalize

测试输出的结果为: “The canonical string is: Evil.bat, and the status code: 0.”

之后,研究人员用/进行了同样的测试,结果如图3所示:

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 3: 用/测试PathCchCanonicalize

测试后的结果为:“The canonical string is: ../../Evil.bat, and the status code: 0.”

从以上结果可以得出结论:遵循了Windows最佳实践的PathCchCanonicalize函数好像忽略了 /分割的字符。之后,研究人员通过逆向该函数确认了这点:该函数只搜索了\分割的路径,而忽略了/。

PathCcCanonicalize函数称只在MSDN中实现,但是实际上由于潜在的缓存溢出漏洞而被强烈反对。

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 4: MSDN解释如何使用WinAPI来拦截路径遍历

研究人员让高级软件开发人员实现一个接受文件路径作为输入、奇热验证要写入之前预定义好的文件夹的文件的内容的函数。也就是用Windows API和最佳实践来拦截路径遍历攻击。得到的结果如图5所示

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 5: 使用PathCchCanonicalize的路径处理样本代码

换句话说,在遵循微软的最佳实践时,一些高级开发人员使用了有漏洞的函数来处理/和\分割的路径。也就是说全球有很多个类似的样本存在着路径遍历攻击的风险。

Windows Paths 101

在基于Unix的系统中,使用的路径分割字符是/,而在Windows系统中使用的是分割字符为\。但Windows最早是支持/和\的。因此,执行任何文件操作都会遇到这两个分隔符。

研究人员发现的漏洞是一个检查的实现漏洞。许多核心Windows功能的开发人员可能忘记了Windows系统也支持/字符,所以会重新实现只支持\的文件路径逻辑。

CVE-2020-0655

研究人员联系了微软,并通知了其CVE-2019-0887漏洞补丁引发的新漏洞的技术细节。微软在2月的补丁日发布了该漏洞的补丁,并将该漏洞命名为CVE-2020-0655。

PathCchCanonicalize位于KernelBase.dll中,但是在2月的Windows更新中该文件并没有更新。如图6所示,kerberos.dll在2月的补丁中更新了,但是KernelBase.dll并没有。

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 6: 表明KernelBase.dll没有更新的Windows dll文件时间戳

研究人员分析补丁中更新的文件发现mstscax.dll可能是潜在的补丁文件。如果真的是这样的话,微软可能只修复了RDP客户端的攻击场景,忽略了有漏洞的API函数的使用。

如图7所示,可以看到作为CVE-2019-0887漏洞补丁一部分的函数CFormatDataPacker::ValidateFilePaths也再次被修改了:

CVE-2020-0655:CVE-2019-0887补丁引发新漏洞

图 7: RDP中将/ chars替换为\ chars的补丁

可以得到一个结论,研究人员最初的猜测是正确的,微软通过在有漏洞的PathCchCanonicalize函数中加入了一个变通的方法来修复之前发布的CVE-2019-0887漏洞补丁中的问题。

目前还没有关于警告用户不要使用有漏洞的路径规范化的安全公告,微软MSDN仍然建议用户在尝试对恶意输入进行处理时使用该函数。

研究人员分析后认为,PathCchCanonicalize是拦击使用/的潜在路径遍历攻击的补丁的最佳位置。

微软响应

在分析了微软的补丁后,研究人员联系了微软SRC,但目前还没有接到来自微软的反馈。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读