Electron contextIsolation RCE via preload code
Przykład 1
Ten kod otwiera linki http(s) w domyślnej przeglądarce:
Coś w rodzaju file:///C:/Windows/systemd32/calc.exe
mogłoby zostać użyte do uruchomienia kalkulatora, jednak SAFE_PROTOCOLS.indexOf
temu zapobiega.
Dlatego atakujący mógłby wstrzyknąć ten kod JS poprzez XSS lub dowolną nawigację strony:
Jako wywołanie SAFE_PROTOCOLS.indexOf
zawsze zwróci 1337, atakujący może ominąć zabezpieczenie i uruchomić kalkulator. Ostateczny exploit:
Sprawdź oryginalne slajdy w poszukiwaniu innych sposobów uruchamiania programów bez konieczności pytania o uprawnienia.
Podobno innym sposobem ładowania i uruchamiania kodu jest dostęp do czegoś w rodzaju file://127.0.0.1/electron/rce.jar
Przykład 2: Discord App RCE
Przykład z https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Podczas sprawdzania skryptów preload, odkryłem, że Discord ujawnia funkcję, która pozwala na wywołanie niektórych zezwolonych modułów za pomocą DiscordNative.nativeModules.requireModule('MODULE-NAME')
, na stronie internetowej.
Tutaj nie mogłem użyć modułów, które mogą być używane do zdalnego wykonania kodu, takich jak moduł child_process, ale znalazłem kod, w którym zdalne wykonanie kodu może być osiągnięte poprzez nadpisanie wbudowanych metod JavaScript i ingerowanie w wykonanie ujawnionego modułu.
Poniżej znajduje się PoC. Udało mi się potwierdzić, że aplikacja calc wyskakuje, gdy wywołuję funkcję getGPUDriverVersions
, która jest zdefiniowana w module o nazwie "discord_utils" z narzędzi deweloperskich, podczas nadpisywania RegExp.prototype.test
i Array.prototype.join
.
Funkcja getGPUDriverVersions
próbuje wykonać program, korzystając z biblioteki "execa", w sposób następujący:
Zazwyczaj execa próbuje wykonać "nvidia-smi.exe", który jest określony w zmiennej nvidiaSmiPath
, jednakże z powodu nadpisanych RegExp.prototype.test
i Array.prototype.join
, argument jest zamieniany na "calc" wewnętrznej obróbce _execa_**.
Konkretnie, argument jest zamieniany poprzez zmianę następujących dwóch części.
Last updated