<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ź [**PLAN SUBSKRYPCJI**](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 lokalne środowisko (z **NodeJS**) i frontend (**Chromium**), chociaż brakuje mu niektórych mechanizmów bezpieczeństwa nowoczesnych przeglądarek.
Ustawienia **procesu renderera** mogą być **skonfigurowane** w **głównym procesie** w pliku main.js. Niektóre z konfiguracji **zapobiegną wystąpieniu RCE** lub innych podatności w aplikacji Electron, jeśli **ustawienia są poprawnie skonfigurowane**.
* **`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 włączone, procesy główny i renderera nie są izolowane.
* **`preload`** - domyślnie jest puste.
* [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - domyślnie jest wyłączone. Ogranicza działania, które może wykonać NodeJS.
* Integracja Node w wątkach roboczych
* **`nodeIntegrationInSubframes`** - domyślnie jest wyłączone.
* Jeśli **`nodeIntegration`** jest **włączone**, umożliwia to korzystanie z **API Node.js** na stronach internetowych, które są **ładowane w ramkach iframe** w aplikacji Electron.
* Jeśli **`nodeIntegration`** jest **wyłączone**, preloady zostaną załadowane w iframe.
Jeśli opcja **nodeIntegration** jest ustawiona na **on**, kod JavaScript strony internetowej może łatwo korzystać z funkcji Node.js, po prostu wywołując `require()`. Na przykład, sposób wykonania aplikacji kalkulatora w systemie Windows to:
_**contextIsolation**_ wprowadza **oddzielone konteksty między skryptami strony internetowej a wewnętrznym kodem JavaScript Electrona**, tak aby wykonanie JavaScriptu każdego kodu nie wpływało na siebie nawzajem. Jest to niezbędna funkcja do wyeliminowania możliwości RCE.
Jeśli są zastosowane ograniczenia podczas kliknięcia linku, możesz je ominięć, **klikając środkowym przyciskiem myszy** zamiast standardowego 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) i [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Podczas wdrażania aplikacji desktopowej Electron, ważne jest zapewnienie poprawnych ustawień dla `nodeIntegration` i `contextIsolation`. Ustalono, że te ustawienia skutecznie zapobiegają **zdalnemu wykonaniu kodu (RCE)** po stronie klienta, które jest ukierunkowane na skrypty preload lub natywny kod Electrona z procesu głównego.
Po interakcji użytkownika z linkami lub otwarciu nowych okien, są wywoływane określone nasłuchiwacze zdarzeń, które są kluczowe dla bezpieczeństwa i funkcjonalności aplikacji:
Te słuchacze są **nadpisywane przez aplikację desktopową**, aby zaimplementować jej 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, przy użyciu funkcji `shell.openExternal`.
Najlepsze praktyki dotyczące bezpieczeństwa w Electron JS odradzają akceptowanie 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 źródła](https://positive.security/blog/url-open-rce#windows-10-19042), które 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 lokalnych plików. Przykład przedstawia, jak wykorzystać tę podatność do odczytywania zawartości wewnętrznych plików:
Ponadto, udostępniona jest inna metoda **odczytywania wewnętrznego pliku**, która podkreśla krytyczną podatność na odczyt lokalnego pliku w aplikacji desktopowej Electron. Polega to na wstrzyknięciu skryptu w celu wykorzystania aplikacji i eksfiltracji danych:
Jeśli **chromium** używane przez aplikację jest **stare** i istnieją na nim **znane podatności**, istnieje możliwość **wykorzystania ich i uzyskania RCE za pomocą XSS**.\
Przykład można zobaczyć w tym **opisie**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
Załóżmy, że znalazłeś XSS, ale **nie możesz wywołać RCE ani kraść wewnętrznych plików**, możesz spróbować go wykorzystać do **kradzieży poświadczeń za pomocą phishingu**.
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 **regex** używany przez funkcję jest **podatny na obejścia** (na przykład przez **nieekranowanie kropek w subdomenach**), atakujący może wykorzystać XSS, aby **otworzyć nowe okno**, które znajdzie się w infrastrukturze atakującego, **prosząc o uwierzytelnienie** 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.
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) do sprawdzania podatnych bibliotek innych firm.
* [**Electro.ng**](https://electro.ng/): Musisz go kupić.
Na stronie [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ć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](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 trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.