अगर preload स्क्रिप्ट main.js फ़ाइल से IPC एंडपॉइंट को उजागर करता है, तो रेंडरर प्रक्रिया इसे एक्सेस कर सकती है और यदि वंशावली है, तो RCE संभावित हो सकता है।
देखें कैसे main.jsgetUpdate पर सुनता है और किसी भी URL को डाउनलोड और एक्सीक्यूट करेगा।
देखें भी कैसे preload.jsमुख्य से कोई भी IPC घटना को उजागर करता है।
// 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 के संदर्भ में क्या उजागर करती है।