Electron contextIsolation RCE via preload code
Esempio 1
Questo codice apre i link http(s) con il browser predefinito:
Qualcosa come file:///C:/Windows/systemd32/calc.exe
potrebbe essere utilizzato per eseguire una calcolatrice, il SAFE_PROTOCOLS.indexOf
lo sta impedendo.
Pertanto, un attaccante potrebbe iniettare questo codice JS tramite XSS o navigazione arbitraria della pagina:
Poiché la chiamata a SAFE_PROTOCOLS.indexOf
restituirà sempre 1337, l'attaccante può aggirare la protezione ed eseguire il calcolatore. Exploit finale:
Controlla le diapositive originali per altri modi per eseguire programmi senza che venga richiesta un'autorizzazione.
Apparentemente un altro modo per caricare ed eseguire codice è accedere a qualcosa del tipo file://127.0.0.1/electron/rce.jar
Esempio 2: RCE dell'app Discord
Esempio da https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Nel verificare gli script di caricamento anticipato, ho scoperto che Discord espone la funzione, che consente di chiamare alcuni moduli consentiti tramite DiscordNative.nativeModules.requireModule('NOME-MODULO')
, nella pagina web.
Qui, non ho potuto utilizzare moduli che possono essere utilizzati direttamente per RCE, come il modulo child_process, ma ho trovato un codice in cui è possibile ottenere RCE sovrascrivendo i metodi incorporati di JavaScript e interferendo con l'esecuzione del modulo esposto.
Di seguito è riportata la PoC. Sono riuscito a confermare che l'applicazione calc viene aperta quando chiamo la funzione getGPUDriverVersions
che è definita nel modulo chiamato "discord_utils" da devTools, mentre sovrascrivo il RegExp.prototype.test
e Array.prototype.join
.
La funzione getGPUDriverVersions
cerca di eseguire il programma utilizzando la libreria "execa", come segue:
Di solito execa cerca di eseguire "nvidia-smi.exe", che è specificato nella variabile nvidiaSmiPath
, tuttavia, a causa dell'override di RegExp.prototype.test
e Array.prototype.join
, l'argomento viene sostituito con "calc" nel processo interno di _execa_**.
Nello specifico, l'argomento viene sostituito modificando le seguenti due parti.
Last updated