Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Αν το σενάριο προφόρτωσης εκθέτει ένα σημείο IPC από το αρχείο main.js, η διεργασία αποτύπωσης θα μπορεί να τον έχει πρόσβαση και αν είναι ευάλωτο, μπορεί να είναι δυνατή μια RCE.
Ελέγξτε πώς το main.js ακούει το getUpdate και θα κατεβάσει και θα εκτελέσει οποιοδήποτε URL περάσει.
Ελέγξτε επίσης πώς το preload.jsεκθέτει οποιοδήποτε IPC event από το main.
// Part of code of main.jsipcMain.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') +'/'+ filenameconsole.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')}elseif (state ==='progressing') {if (item.isPaused()) console.log('Download is paused')elseconsole.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());});}elseconsole.log(`Download failed: ${state}`)})})
// Part of code of preload.jswindow.electronSend= (event, data) => {ipcRenderer.send(event, data);};
Εάν το σενάριο φόρτωσης εκθέτει απευθείας στον αποδοχέα έναν τρόπο να καλέσει το shell.openExternal, είναι δυνατή η λήψη RCE.
// Part of preload.js codewindow.electronOpenInBrowser= (url) => {shell.openExternal(url);};
Παράδειγμα 3
Αν το σενάριο φόρτωσης εκθέτει τρόπους για πλήρη επικοινωνία με την κύρια διαδικασία, ένα XSS θα μπορούσε να στείλει οποιοδήποτε συμβάν. Η επίδραση αυτής της ευπάθειας εξαρτάται από το τι εκθέτει η κύρια διαδικασία σε όρους IPC.