最近有人用最新的Flash 0day漏洞cve-2018-15982和自带自毁功能的专属木马程序进行攻击,Adobe官方及时回应修复更新。Adobe Flash 0day漏洞补丁可以快速安全地修复这次全国性的网络攻击,极大地保护了用户的安全。Adobe Flash 0day漏洞补丁安全可靠。如果你正在使用Adobe Flash,来Adobe Flash 0day漏洞修复吧!
Adobe Flash 0day漏洞分析通过分析,我们发现CVE-2018-15982 0day漏洞是Flash包中的一个UAF漏洞.将字符串类型对象(属于RCObject)保存到元数据类对象的键集成员时,元数据类的SetObject不使用drcwb(延迟引用计数,带写屏障)。攻击者利用了这一点,通过强制GC获得了一个悬空指针,然后被UAF混淆了几次类型。然后,通过两个自定义类的交互操作读写任意地址。在此基础上,ByteArray的虚拟表指针被泄露,从而绕过了ASLR。最后,通过黑客团队泄漏代码,绕过DEP/CFG并执行shellcode。
Adobe flash 0day漏洞原因分析在触发漏洞的过程中,flash中元数据的实例化对象地址。
调用元数据的setObject方法后,元数据对象的键集成员。
键集成员的部分值。
强制垃圾回收后由密钥集成员释放的内存部分。
新的Class5重用内存后,会导致类型混乱。
后续攻击者还通过判断String对象的长度属性是否为24来确定该漏洞利用是否成功。(如果成功利用会造成类型混乱,此时获取String对象的length属性实际上就是获取Class5的第一个成员变量的值24。).
通过进一步反编译和深入分析,我们可以发现Metadata类的setObject对应的Native函数存在于setObject_impl中。
在Object_impl中,传入的键(字符串对象)将直接保存到元数据的键集成员中。
缓冲区结构定义如下(键集成员的结构不同)。
Add_keySet保存传入的密钥(字符串对象)。
此时垃圾收集机制认为传入的密钥没有被引用,从而恢复相应的内存。但是,Metadata对象的keySet成员仍然保留恢复的内存的指针,然后通过新的Class5重用恢复的内存,从而导致UAF漏洞。