# Electron contextIsolation RCE via IPC
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
Wenn das Preload-Skript einen IPC-Endpunkt aus der main.js-Datei freigibt, kann der Renderer-Prozess darauf zugreifen und bei einer Schwachstelle ist möglicherweise eine RCE möglich. **Die meisten dieser Beispiele stammen von hier** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Überprüfen Sie 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) (Sie haben das vollständige Beispiel, wie MS Teams von XSS bis RCE in diesen Folien missbraucht wurde, dies ist nur ein sehr einfaches Beispiel):
## Beispiel 1 Überprüfen Sie, wie `main.js` auf `getUpdate` hört und **jede URL herunterlädt und ausführt**, die übergeben wird.\ Überprüfen Sie auch, wie `preload.js` **ein beliebiges IPC**-Ereignis aus der main freigibt. ```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); }; ``` Ausnutzung: ```html ``` ## Beispiel 2 Wenn das Preload-Skript direkt eine Möglichkeit zur Aufruf von `shell.openExternal` im Renderer freigibt, ist es möglich, RCE zu erhalten. ```javascript // Part of preload.js code window.electronOpenInBrowser = (url) => { shell.openExternal(url); }; ``` ## Beispiel 3 Wenn das Preload-Skript Möglichkeiten zum vollständigen Kommunizieren mit dem Hauptprozess freilegt, wird ein XSS in der Lage sein, beliebige Ereignisse zu senden. Die Auswirkungen hängen davon ab, was der Hauptprozess in Bezug auf IPC freilegt. ```javascript window.electronListen = (event, cb) => { ipcRenderer.on(event, cb); }; window.electronSend = (event, data) => { ipcRenderer.send(event, data); }; ```
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.