2021年4月13日,安全分析技术人员RajvArcdshiAgardwal在Twitter上发布了本周首个远程代码执行漏洞0Day(RCE),能够在谷歌Chrome当前的版本(89.0.4389.114)上成功开启。该漏洞由V8JavaScript引擎在依托于Chromium内核的浏览器中提供,它是一个远程代码执行漏洞,同时也提供了PoC。
2021年4月14日,360高级防御实验室安全分析技术人员frust发布了这周的第二个Chromium0day(Issue1195777)和poc视频验证Chrome89.0.4389.114。这一漏洞将影响最新版本的GoogleChrome90.0.4430.72以及MicrosoftEdge和其它依托于Chromium的浏览器。
这个漏洞能够被Chrome浏览器沙盒拦截。但是如果这个漏洞和其他的结合在一起,就有可能绕过Chrome沙箱。现在memoir1126249,memoir1050593,memoir1196682,memoir1195777都采用了同样的绕过缓解措施策略(截至文章发表,后面两个memoir还没有公布),详情请参阅本文。
其基本思想是创建一个数组,然后调用shift函数来构造length为-1的数组,这样就实现了相对任意地址的读写。下面显示了memoir1196682中的关键利用代码。请参阅memoir1126249,memoir1050593,这两个文件中的关键poc代码显示了避免绕过可能使用的相同方法。从严格意义上讲,这两个漏洞不是0day,相关的漏洞在V8版本中已经被修复,但是在公开版chrome中却没有更新。因为Chrome本身具有沙箱保护功能,这个漏洞不能在沙箱中被成功利用,一般情况下,仍然需要配合提权或沙箱逃逸漏洞才能做到沙箱外执行代码的意义。但许多其他依托于组件的app(包括Android),特别是那些没有沙箱保护的软件,如v8,仍然存在潜在的安全风险。
在漏洞修正和应用代码修正之间的时间间隔为攻击者提供了机会。Chrome还不够,其他依赖于v8等组件的APP更不用说,用1day甚至Nday就可以做到0day的效果。除了安全分析之外,作为应用开发人员,也应该关注组件的漏洞,并及时进行修复,以避免黑客趁虚而入。同时,我们还敦促主要软件厂商、最终用户、监管机构等采取及时更新、防范措施;要求使用Chrome浏览器的用户及时更新,要求使用其他Chrome内核浏览器的用户提高安全意识,防范攻击。
著名的分析技术人员gengming和@dydh1Twitter将在zer0pwn会议上发表主题演讲CVE-2020-1604[0|1],讲述如何绕过缓解机制。这篇文章不再赘述。此处要说明的是,由于chrome80以上版本支持地址压缩,地址高4字节,所以能够在构造的array后面找到固定偏移位置。首先泄漏corrupt_buffer的地址,然后根据下面的计算地址能够计算出高达4字节。在0x02步实现了相对读写和对象泄漏,实现了绝对地址读写。在memoir1196682中构造了length为-1数组之后,@r4j0x00通过伪造对象实现了任意地址的读写。然后,因为WASM内存拥有RWX权限,所以能够复制shellcode到WASM所在的内存,实现任意代码执行。