# Electron contextIsolation RCE via IPC
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras maneiras de apoiar o HackTricks: * Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
Se o script de pré-carregamento expõe um ponto de extremidade IPC do arquivo main.js, o processo de renderização poderá acessá-lo e, se vulnerável, um RCE pode ser possível. **A maioria desses exemplos foi retirada daqui** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Verifique o vídeo para mais informações. ## Exemplo 0 Exemplo de [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) (você tem o exemplo completo de como o MS Teams estava abusando de XSS para RCE nesses slides, este é apenas um exemplo muito básico):
## Exemplo 1 Verifique como o `main.js` escuta em `getUpdate` e irá **baixar e executar qualquer URL** passado.\ Verifique também como `preload.js` **expõe qualquer evento IPC** do main. ```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); }; ``` Exploração: ```html ``` ## Exemplo 2 Se o script de pré-carregamento expõe diretamente ao renderizador uma maneira de chamar `shell.openExternal`, é possível obter RCE. ```javascript // Part of preload.js code window.electronOpenInBrowser = (url) => { shell.openExternal(url); }; ``` ## Exemplo 3 Se o script de pré-carregamento expõe maneiras de se comunicar completamente com o processo principal, um XSS será capaz de enviar qualquer evento. O impacto disso depende do que o processo principal expõe em termos de IPC. ```javascript window.electronListen = (event, cb) => { ipcRenderer.on(event, cb); }; window.electronSend = (event, data) => { ipcRenderer.send(event, data); }; ```
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras maneiras de apoiar o HackTricks: * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.