CVE-2020-0796漏洞realworld场景实现改进说明

在此前跟进CVE-2020-0796的过程中,我们发现公开代码的利用稳定性比较差,经常出现蓝屏的情况,通过研究,本文分享了CVE-2020-0796漏洞实现在realworld使用过程中遇到的一些问题以及相应的解决方法。 Takeaways我们分析了exp导致系统蓝屏的原因,并尝试对其进行了改进;相对于重构前exp,重构后的exp执行效率与稳定性都有显著提高;关于漏洞原理阐述,Ricerca Security在2020年4月份发布的一篇blog中已非常清晰,有兴趣的读者可以移步阅读,本文不再赘述。初步选择和测试公开exp可用性测试环境:VMWare,Win10专业版1903,2G内存,2处理核心 为了测试和说明方便,我们可以将exp的执行分为3个阶段: 漏洞利用到内核shellcode代码开始执行内核shellcode代码执行用户层shellcode执行根据实际情况,我们测试了chompie1337和ZecOps的漏洞利用代码。根据各自项目的说明文档,两份代码初步情况如下: ZecOpsZecOps的利用代码是在单个处理器的目标计算机系统上测试的;在后续的实际测试中,发现其代码对多处理器系统的支持不足,虽然在测试环境中进行了多次测试中,系统不会产生BSOD,但漏洞无法成功利用(即exp执行第一阶段失败)。 chompie1337chompie1337的代码在漏洞利用阶段则表现得十分稳定,但在内核shellcode执行时会造成系统崩溃。 因此,我们决定将chompie1337的利用代码作为主要测试对象。 内核shellcode问题定位我们在win10 1903中测试了chompie1337的exp代码,绝大部分的崩溃原因是在漏洞利用成功后、内核shellcode代码执行(即exp执行的第二阶段)时,申请用户空间内存的API zwAllocateVirtualMemory调用失败。在我们的多次测试中,崩溃现场主要包括以下两种: Crash_A backtraceCrash_B…

微软字体解析服务远程代码执行漏洞分析

3月23日,微软公司发布了一份编号ADV200006的紧急漏洞通告,通告表示有在野攻击行动使用了位于Adobe Type Manager Library中的两个远程代码执行0Day漏洞,由于漏洞严重,发布该通告指导用户在补丁发布前规避风险。 4月15日的补丁日中,微软发布了针对此风险通告的补丁外,还对一个字体库漏洞CVE-2020-0687进行修复,诺亚实验室第一时间对补丁进行了比对分析,并确认了漏洞的利用性,两个漏洞均属于高危远程代码执行漏洞,由于CVE-2020-0938/CVE2020-1020已有安全团队验证并形成POC,本文将会着笔于vincss报告的CVE-2020-0687进行简要技术分析。 根本原因漏洞产生于字体处理库fontsub.dll的ReadTableIntoStructure中,由于循环逻辑中读取数据赋值检查不严格,在数据拷贝到目的堆后超过原申请的堆内存大小,形成堆溢出漏洞。 补丁细节分析通过补丁比对,我们很快确认了问题函数 __int64 __fastcall ReadTableIntoStructure(__int16 *a1, _WORD *a2, unsigned __int16 *a3) 通过前后差异判别,可以看出补丁代码将while循环的一个返回条件放到了循环入口处,其目的是为了防止当变量v5中的变量大于v3[4]中保存的的变量时,会执行一次while循环的第一句赋值代码。 故原始漏洞代码中存在判断不严谨的情况,将会导致ReadGeneric中读取到的4字节数据,放入至一个结构体数组中: 通过跟踪v3和v5返回上层调用函数可知,v3在上层函数MergeEblcEbdtTables中,是作为一个从新申请的堆内存的大小参数进行传递的;而v5则是作为ReadTableIntoStructure中第三个参数,可以理解为一个类似Table大小的变量。 而此处的堆空间大小则是由v92来决定,根据跟踪的情况,…