<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Electron łączy lokalny backend (z **NodeJS**) i frontend (**Chromium**), chociaż brakuje mu niektórych mechanizmów bezpieczeństwa nowoczesnych przeglądarek.
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ń.
Ustawienia **procesu renderera** mogą być **skonfigurowane** w **głównym procesie** w pliku main.js. Niektóre z konfiguracji będą **zapobiegać zdalnemu wykonaniu kodu (RCE)** lub innym podatnościom, jeśli **ustawienia są poprawnie skonfigurowane**.
* Jeśli **`nodeIntegration`** jest **włączone**, umożliwi 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
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 aplikacji kalkulatora w systemie Windows to:
_**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 są nałożone ograniczenia podczas kliknięcia linku, możesz próbować je ominąć, **klikając środkowym przyciskiem myszy** zamiast zwykłego lewego przycisku.
Aby uzyskać więcej informacji na temat tych przykładów, sprawdź [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) oraz [https://benjamin-altpeter.de/shell-openexternal-dangers/](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 efektywnie zapobiegane, gdy te ustawienia są wdrożone.
Po interakcji użytkownika z linkami lub otwarciu nowych okien, wyzwalane są określone słuchacze 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`.
Najlepsze praktyki bezpieczeństwa 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](https://positive.security/blog/url-open-rce#windows-10-19042), który zawiera przykłady protokołów systemu Windows zdolnych do wykorzystania tej podatności.
**Wyłączenie `contextIsolation` umożliwia użycie tagów `<webview>`, podobnych do `<iframe>`, do odczytywania i eksfiltracji plików lokalnych**. 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ąc krytyczną podatność na odczyt plików lokalnych w aplikacji desktopowej Electron. Polega to na wstrzyknięciu skryptu w celu wykorzystania aplikacji i eksfiltracji danych:
Jeśli **chromium** używany przez aplikację jest **stary** i istnieją na nim **znane****podatności**, może być możliwe **wykorzystanie go do uzyskania RCE poprzez XSS**.\
Załóżmy, że znalazłeś XSS, ale **nie możesz wywołać RCE ani ukraść wewnętrznych plików**, możesz spróbować go wykorzystać do **ukradzenia poświadczeń poprzez phishing**.
Wywołanie **`openInternally`** zadecyduje, czy **link** zostanie **otwarty** w **oknie pulpitu**, jako 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** (na przykład przez **nieekranowanie kropek poddomen**) atakujący mógłby wykorzystać XSS, aby **otworzyć nowe okno**, które znajdzie się w infrastrukturze atakującego, **prosząc o poświadczenia** od użytkownika:
* [**Electronegativity**](https://github.com/doyensec/electronegativity) to narzędzie do identyfikowania błędnych konfiguracji i antywzorców bezpieczeństwa w aplikacjach opartych na Electron.
* [**Electrolint**](https://github.com/ksdmitrieva/electrolint) to otwarte rozszerzenie dla VS Code do aplikacji Electron, które wykorzystuje Electronegativity.
Na [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s) znajdziesz laboratorium do wykorzystania podatnych aplikacji Electron.
* Więcej badań i opisów dotyczących bezpieczeństwa Electron znajdziesz na stronie [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.