影响版本
Windows v0.19.9版本以下
漏洞复现
漏洞程序连接:
https://github.com/Fndroid/clash_for_windows_pkg/releases
poc.yaml
1 | port: 7890 |
在Profiles里面import导入poc后,激活
之后启用节点(Proxies)
相关日志
漏洞分析
1.使用PoC进行分析
看PoC的写法是不是特别像XSS,因为偶Clash For Windows采用electron编写,使用asar
安装asar
1 | npm install -g asar |
解包
1 | asar e app.asar app_name |
对其进行解包后:
原作者对render采用了一定的混淆,虽然变量名混淆对分析造成了极大的干扰,但是最大的麻烦还是一行的js代码,这里可以使用 https://beautifier.io/ 反混淆,替换掉原有的renderer.js文件
打包
1 | asar pack app_name app.asar |
之后使用Debugtron进行调试,找到前端相关的代码
下个断点一步步看吧
这里就已经触发漏洞了
最终发现漏洞代码
renderer.js在加载配置文件的时候,创造元素并加载时并没有对元素进行检查或转义,从而导致XSS
然后XSS中,利用 img 元素的报错处理实现RCE
2.版本对比分析
其实后续分析时,尤其是作者已经修复漏洞的时候最应该使用这个方法。
这样我们就不用一步步的调试了,但是这里采用了混淆也是不好分析。
下载已修复版本,我这里使用的是 Clash.for.Windows-0.19.9-win,测了下确实没有洞
继续使用degtron进行调试
这里的尖括号被替换了,应该就是更新了过滤法则,直接转义成字符串了
挖掘思路
根据上面的分析,怀疑是漏洞挖掘者通过测试.yaml
配置文件测试出来的xss,进一步导致rce
引用
http://www.yongsheng.site/2022/02/28/clash for windows rce/