Electron contextIsolation RCE via preload code
Primer 1
Ovaj kod otvara http(s) linkove sa podrazumevanim pregledačem:
Nešto poput file:///C:/Windows/systemd32/calc.exe
može se koristiti za izvršavanje kalkulatora, SAFE_PROTOCOLS.indexOf
to sprečava.
Stoga, napadač bi mogao da ubaci ovaj JS kod putem XSS-a ili proizvoljne navigacije stranice:
Kako će poziv SAFE_PROTOCOLS.indexOf
uvek vratiti 1337, napadač može zaobići zaštitu i izvršiti kalkulator. Konačan eksploatacioni kod:
Proverite originalne slajdove za druge načine izvršavanja programa bez traženja dozvola.
Navodno, još jedan način učitavanja i izvršavanja koda je pristup nečemu poput file://127.0.0.1/electron/rce.jar
Primer 2: Discord aplikacija RCE
Primer sa https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Prilikom provere preload skripti, otkrio sam da Discord izlaže funkciju, koja omogućava pozivanje određenih dozvoljenih modula putem DiscordNative.nativeModules.requireModule('IME-MODULA')
, na veb stranici.
Ovde nisam mogao koristiti module koji se mogu direktno koristiti za RCE, poput modula child_process, ali pronašao sam kod gde se RCE može postići preusmeravanjem ugrađenih JavaScript metoda i mešanjem u izvršavanje izloženog modula.
Sledeći je PoC. Potvrdio sam da se aplikacija calc pojavljuje kada pozovem funkciju getGPUDriverVersions
koja je definisana u modulu nazvanom "discord_utils" iz devTools-a, dok preusmeravam RegExp.prototype.test
i Array.prototype.join
.
Funkcija getGPUDriverVersions
pokušava da izvrši program koristeći "execa" biblioteku, kao u sledećem:
Obično execa pokušava da izvrši "nvidia-smi.exe", koji je naveden u promenljivoj nvidiaSmiPath
, međutim, zbog prekoračenih RegExp.prototype.test
i Array.prototype.join
, argument je zamenjen sa "calc" u internom procesiranju _execa_**.
Konkretno, argument je zamenjen promenom sledećih dva dela.
Last updated