Electron Desktop Apps
WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące dane.
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:
Wstęp
Electron łączy lokalny backend (z NodeJS) i frontend (Chromium), chociaż brakuje mu niektórych mechanizmów bezpieczeństwa nowoczesnych przeglądarek.
Zwykle kod aplikacji Electron znajduje się w aplikacji .asar
, aby uzyskać kod, musisz go wyodrębnić:
W źródłowym kodzie aplikacji Electron, wewnątrz packet.json
, można znaleźć określony plik main.js
, w którym ustawione są konfiguracje zabezpieczeń.
Electron ma 2 typy procesów:
Proces główny (ma pełny dostęp do NodeJS)
Proces renderera (powinien mieć ograniczony dostęp do NodeJS ze względów bezpieczeństwa)
Proces renderera będzie oknem przeglądarki wczytującym plik:
Ustawienia procesu renderera można skonfigurować w głównym procesie w pliku main.js. Niektóre z konfiguracji będą zapobiegać uzyskaniu RCE przez aplikację Electron lub innym podatnościom, jeśli ustawienia są poprawnie skonfigurowane.
Aplikacja Electron może uzyskać dostęp do urządzenia za pomocą interfejsów Node, chociaż można to skonfigurować, aby temu zapobiec:
nodeIntegration
- domyślnie jest wyłączone. Jeśli jest włączone, umożliwia dostęp do funkcji Node z procesu renderera.contextIsolation
- domyślnie jest włączone. Jeśli jest wyłączone, procesy główny i renderera nie są izolowane.preload
- domyślnie jest puste.sandbox
- domyślnie jest wyłączone. Ograniczy działania, które może wykonać NodeJS.Integracja Node w Workerach
nodeIntegrationInSubframes
- domyślnie jest wyłączone.Jeśli
nodeIntegration
jest włączone, umożliwiłoby to korzystanie z API Node.js na stronach internetowych, które są ładowane w ramkach w aplikacji Electron.Jeśli
nodeIntegration
jest wyłączone, to pliki preload będą ładowane w ramce.
Przykład konfiguracji:
Kilka ładunków RCE z tutaj:
Przechwytywanie ruchu
Zmodyfikuj konfigurację start-main i dodaj użycie serwera proxy, na przykład:
Wstrzykiwanie lokalnego kodu w Electron
Jeśli możesz lokalnie wykonać aplikację Electron, istnieje możliwość wykonania arbitralnego kodu JavaScript. Sprawdź jak to zrobić:
pagemacOS Electron Applications InjectionRCE: XSS + nodeIntegration
Jeśli nodeIntegration jest ustawione na on, JavaScript strony internetowej może łatwo korzystać z funkcji Node.js, wywołując require()
. Na przykład, sposób na uruchomienie kalkulatora w systemie Windows to:
RCE: preload
Skrypt wskazany w tej konfiguracji jest załadowany przed innymi skryptami w rendererze, więc ma nieograniczony dostęp do interfejsów API Node:
Dlatego skrypt może eksportować funkcje węzła do stron:
Jeśli contextIsolation
jest włączone, to nie zadziała
RCE: XSS + contextIsolation
contextIsolation wprowadza oddzielone konteksty między skryptami strony internetowej a wewnętrznym kodem JavaScript Electrona, dzięki czemu wykonanie JavaScript każdego kodu nie wpływa na siebie nawzajem. Jest to konieczna funkcja eliminująca możliwość RCE.
Jeśli konteksty nie są izolowane, atakujący może:
Wykonać dowolny JavaScript w rendererze (XSS lub nawigacja do zewnętrznych stron)
Nadpisać wbudowaną metodę, która jest używana w kodzie preload lub wewnętrznym kodzie Electrona na własną funkcję
Wywołać użycie nadpisanej funkcji
RCE?
Istnieją 2 miejsca, w których można nadpisać wbudowane metody: W kodzie preload lub wewnętrznym kodzie Electrona:
pageElectron contextIsolation RCE via preload codepageElectron contextIsolation RCE via Electron internal codepageElectron contextIsolation RCE via IPCOminięcie zdarzenia kliknięcia
Jeśli są nałożone ograniczenia podczas kliknięcia linku, możesz je ominięć, klikając środkowym przyciskiem myszy zamiast zwykłego lewego przycisku.
RCE poprzez shell.openExternal
Aby uzyskać więcej informacji na temat tych przykładów, sprawdź https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8 oraz https://benjamin-altpeter.de/shell-openexternal-dangers/
Podczas wdrażania aplikacji desktopowej Electron, zapewnienie poprawnych ustawień dla nodeIntegration
i contextIsolation
jest kluczowe. Ustalono, że zdalne wykonanie kodu (RCE) po stronie klienta ukierunkowane na skrypty preload lub kod natywny Electrona z procesu głównego jest skutecznie zapobiegane przy zachowaniu tych ustawień.
Po interakcji użytkownika z linkami lub otwarciu nowych okien, wyzwalane są określone nasłuchiwacze zdarzeń, które są kluczowe dla bezpieczeństwa i funkcjonalności aplikacji:
Te słuchacze są nadpisane przez aplikację desktopową, aby zaimplementować własną logikę biznesową. Aplikacja ocenia, czy nawigowany link powinien być otwarty wewnętrznie czy w zewnętrznej przeglądarce internetowej. Decyzja ta jest zazwyczaj podejmowana za pomocą funkcji openInternally
. Jeśli ta funkcja zwraca false
, oznacza to, że link powinien być otwarty zewnętrznie, wykorzystując funkcję shell.openExternal
.
Oto uproszczony pseudokod:
Najlepsze praktyki związane z bezpieczeństwem w Electron JS zalecają unikanie akceptowania niezaufanej zawartości za pomocą funkcji openExternal
, ponieważ może to prowadzić do RCE poprzez różne protokoły. Systemy operacyjne obsługują różne protokoły, które mogą wywołać RCE. Dla szczegółowych przykładów i dalszego wyjaśnienia na ten temat, można odwołać się do tego zasobu, który zawiera przykłady protokołów systemu Windows zdolnych do wykorzystania tej podatności.
Przykłady wykorzystania protokołów systemu Windows obejmują:
Odczytywanie plików wewnętrznych: XSS + contextIsolation
Wyłączenie contextIsolation
umożliwia użycie tagów <webview>
, podobnie jak <iframe>
, do odczytywania i eksfiltracji lokalnych plików. Przykład pokazuje, jak wykorzystać tę podatność do odczytania zawartości plików wewnętrznych:
Ponadto udostępniona jest inna metoda odczytywania pliku wewnętrznego, podkreślająca krytyczną podatność na odczytanie lokalnego pliku w aplikacji desktopowej Electron. Polega to na wstrzyknięciu skryptu w celu wykorzystania aplikacji i eksfiltracji danych:
RCE: XSS + Stare Chromium
Jeśli chromium używany przez aplikację jest stary i istnieją na nim znane podatności, może być możliwe wykorzystanie go i uzyskanie RCE poprzez XSS. Przykład można zobaczyć w tym opisie: https://blog.electrovolt.io/posts/discord-rce/
XSS Phishing poprzez bypassowanie wewnętrznego URL regex
Załóżmy, że znalazłeś XSS, ale nie możesz wywołać RCE ani ukraść wewnętrznych plików, możesz spróbować go użyć do ukradzenia poświadczeń poprzez phishing.
Po pierwsze, musisz wiedzieć, co się dzieje, gdy próbujesz otworzyć nowy URL, sprawdzając kod JS w interfejsie front-end:
Wywołanie openInternally
zadecyduje, czy link zostanie otwarty w oknie pulpitu, jako że jest to link należący do platformy, czy czy zostanie otwarty w przeglądarce jako zewnętrzny zasób.
W przypadku gdy wyrażenie regularne używane przez funkcję jest podatne na obchodzenie zabezpieczeń (na przykład przez nieeksportowanie kropek poddomen) atakujący mógłby wykorzystać XSS do otwarcia nowego okna, które znajdowałoby się w infrastrukturze atakującego i prosiłoby o poświadczenia od użytkownika:
Narzędzia
Electronegativity to narzędzie służące do identyfikowania błędnych konfiguracji i antywzorców bezpieczeństwa w aplikacjach opartych na Electron.
Electrolint to otwarte rozszerzenie dla VS Code do aplikacji Electron, które wykorzystuje Electronegativity.
nodejsscan do sprawdzania podatności na błędy w bibliotekach innych firm.
Electro.ng: Musisz go kupić
Laboratoria
Na stronie https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s znajdziesz laboratorium do wykorzystania podatnych aplikacji Electron.
Niektóre polecenia, które pomogą Ci w laboratorium:
Referencje
Więcej badań i opisów dotyczących bezpieczeństwa Electron znajdziesz w https://github.com/doyensec/awesome-electronjs-hacking
WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci nie zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.
Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:
Last updated