React2Shell atakuje aplikacje Next.js. Zautomatyzowana kampania kradnie poświadczenia i sekrety chmurowe - Security Bez Tabu

React2Shell atakuje aplikacje Next.js. Zautomatyzowana kampania kradnie poświadczenia i sekrety chmurowe

Cybersecurity news

Wprowadzenie do problemu / definicja

React2Shell to krytyczna podatność typu pre-auth RCE związana z mechanizmami React Server Components, która może prowadzić do zdalnego wykonania kodu bez wcześniejszego uwierzytelnienia. W praktyce zagrożenie dotyczy przede wszystkim publicznie dostępnych aplikacji webowych, zwłaszcza opartych na Next.js, gdzie odpowiednio spreparowany ładunek przesłany do endpointu funkcji serwerowej może doprowadzić do przejęcia procesu Node.js.

Najnowsze obserwacje pokazują, że luka nie jest już wyłącznie problemem teoretycznym ani badawczym. Została wykorzystana w zautomatyzowanej kampanii nastawionej na masowe pozyskiwanie poświadczeń, kluczy API, sekretów środowiskowych i danych dostępowych do usług chmurowych.

W skrócie

  • Atakujący wykorzystują React2Shell do przejmowania publicznie dostępnych aplikacji Next.js i podobnych wdrożeń.
  • Po kompromitacji uruchamiany jest zautomatyzowany łańcuch zbierania sekretów, kluczy SSH, tokenów chmurowych i artefaktów Kubernetes.
  • Operacja ma charakter masowy i obejmuje setki hostów w różnych regionach oraz u wielu dostawców chmury.
  • Wykradzione dane trafiają do panelu operatorskiego, gdzie mogą być dalej analizowane i wykorzystywane w kolejnych etapach ataku.

Kontekst / historia

React2Shell bardzo szybko stał się jednym z ważniejszych tematów bezpieczeństwa w ekosystemie JavaScript, ponieważ łączy nowoczesny model aplikacyjny z wyjątkowo niebezpiecznym skutkiem w postaci zdalnego wykonania kodu jeszcze przed logowaniem użytkownika. To sprawia, że podatność jest szczególnie atrakcyjna dla grup nastawionych na automatyczne skanowanie internetu i szybkie przejmowanie podatnych instancji.

W przypadku aplikacji Next.js problem jest szczególnie istotny ze względu na architekturę opartą na komponentach serwerowych oraz funkcjach wykonywanych po stronie backendu. Każda ekspozycja takiej aplikacji do internetu zwiększa powierzchnię ataku, a dobrze przygotowany exploit może umożliwić nie tylko wejście na host, ale również natychmiastowe rozpoczęcie eksfiltracji danych.

Analizy kampanii wskazują, że atakujący nie koncentrują się na jednej branży, kraju czy typie ofiary. Wzorzec działania sugeruje szerokie, zautomatyzowane poszukiwanie podatnych systemów, po którym następuje niemal w pełni bezobsługowy proces kompromitacji i zbierania informacji.

Analiza techniczna

Techniczny mechanizm nadużycia React2Shell opiera się na przetwarzaniu i deserializacji danych wejściowych kierowanych do endpointów Server Function. Jeśli aplikacja korzysta z podatnej implementacji React Server Components lub frameworka budowanego wokół tego modelu, napastnik może dostarczyć złośliwy serializowany ładunek HTTP. Po jego obsłużeniu dochodzi do arbitralnego wykonania kodu w procesie serwera Node.js.

Po uzyskaniu dostępu uruchamiany jest lekki dropper, którego zadaniem jest pobranie i wykonanie właściwego skryptu kolekcjonującego. Badacze obserwowali użycie katalogu /tmp, losowych ukrytych nazw plików oraz narzędzia nohup, co pozwala utrzymać działanie procesu również po rozłączeniu sesji i utrudnia szybką identyfikację incydentu.

Zbieranie danych przebiega etapowo i obejmuje szerokie spektrum informacji z hosta, procesów oraz środowiska wykonawczego. Atakujący koncentrują się nie tylko na standardowych sekretach aplikacyjnych, ale również na materiałach, które umożliwiają ruch lateralny, eskalację uprawnień oraz przejęcie infrastruktury chmurowej.

  • zrzut zmiennych środowiskowych procesów,
  • ekstrakcję informacji o środowisku uruchomieniowym JavaScript,
  • zbieranie kluczy prywatnych SSH i wpisów authorized_keys,
  • wyszukiwanie tokenów i sekretów w plikach oraz pamięci procesu,
  • pobieranie historii poleceń powłoki,
  • odpytywanie usług metadanych AWS, GCP i Azure,
  • odczyt tokenów kont serwisowych Kubernetes,
  • enumerację kontenerów Docker,
  • listowanie argumentów uruchomionych procesów.

Po każdej fazie dane są przesyłane do infrastruktury dowodzenia i kontroli, gdzie trafiają do panelu operatorskiego określanego jako NEXUS Listener. Taki panel umożliwia przegląd przejętych hostów, podział danych według kategorii oraz ocenę skuteczności kampanii. Szczególnie alarmujący jest fakt, że w analizowanych przypadkach znajdowano tam klucze API platform AI, sekrety systemów płatności, dane dostępowe do AWS i Azure, tokeny GitHub oraz GitLab, ciągi połączeń do baz danych zawierające hasła, a także tokeny botów i webhooków.

Konsekwencje / ryzyko

Skutki takiej kampanii daleko wykraczają poza jednorazowe przejęcie serwera aplikacyjnego. Gdy napastnik uzyskuje dostęp do sekretów środowiskowych, może przejąć konta w usługach zewnętrznych, uzyskać dostęp do repozytoriów kodu, systemów płatności, baz danych czy zasobów chmurowych. W środowiskach public cloud skala zagrożenia zależy od uprawnień przypisanych rolom instancji, ale nawet umiarkowane uprawnienia mogą wystarczyć do dalszej ekspansji.

Szczególne ryzyko wiąże się z kluczami SSH i tokenami Kubernetes. Pierwsze mogą posłużyć do ruchu lateralnego pomiędzy systemami, które ufają tej samej tożsamości kryptograficznej, drugie zaś mogą otworzyć drogę do kontenerów, workloadów i sekretów klastra. W praktyce oznacza to, że incydent zaczynający się od aplikacji webowej może bardzo szybko przerodzić się w naruszenie całego środowiska operacyjnego.

Nie można też pominąć wymiaru supply chain. Jeśli z hostów wykradzione zostaną tokeny do platform deweloperskich, rejestrów pakietów lub systemów CI/CD, atakujący mogą próbować opublikować złośliwe komponenty pod zaufaną tożsamością organizacji albo wykorzystać zdobyte dane do kolejnych kampanii ukierunkowanych.

Rekomendacje

Organizacje korzystające z Next.js i React Server Components powinny potraktować ryzyko związane z React2Shell priorytetowo. Sama poprawka aplikacji może być niewystarczająca, jeśli doszło już do eksfiltracji sekretów. Konieczne jest połączenie działań naprawczych, dochodzeniowych i prewencyjnych.

  • przeprowadzenie pilnego przeglądu wszystkich publicznie dostępnych aplikacji pod kątem podatnych komponentów i endpointów Server Function,
  • natychmiastowe wdrożenie poprawek bezpieczeństwa oraz aktualizacji zależności,
  • pełna rotacja poświadczeń w przypadku nawet częściowego podejrzenia ekspozycji, w tym kluczy API, tokenów chmurowych, haseł baz danych, webhooków i kluczy SSH,
  • ograniczenie uprawnień ról instancji i usług zgodnie z zasadą najmniejszych uprawnień,
  • weryfikacja konfiguracji kontenerów i środowisk Kubernetes pod kątem nadmiarowego dostępu do sekretów oraz zbyt szerokich ról RBAC,
  • segmentacja środowisk i rezygnacja ze współdzielenia kluczy SSH między systemami,
  • wdrożenie monitoringu wykrywającego procesy uruchamiane z /tmp, użycie nohup, nietypowe połączenia wychodzące HTTP/S i odwołania do usług metadanych,
  • zastosowanie reguł WAF lub ochrony runtime dopasowanej do wzorców ataków na aplikacje Next.js,
  • audyt zmiennych środowiskowych oraz ograniczenie liczby sekretów dostępnych dla procesów aplikacyjnych.

Z perspektywy detekcji warto szukać artefaktów takich jak losowo nazwane skrypty w katalogach tymczasowych, niestandardowe zadania wykonywane poza typowym pipeline’em aplikacyjnym, wzmożone odczyty historii poleceń oraz ślady dostępu do tokenów Kubernetes i metadanych instancji chmurowych.

Podsumowanie

Kampania wykorzystująca React2Shell pokazuje, jak szybko nowoczesne podatności w ekosystemie JavaScript mogą zostać przekształcone w przemysłowy model ataku. Celem nie jest wyłącznie przejęcie pojedynczego hosta, lecz zbudowanie zautomatyzowanego łańcucha pozyskiwania sekretów, który otwiera drogę do infrastruktury chmurowej, repozytoriów kodu, systemów płatności i środowisk kontenerowych.

Dla zespołów bezpieczeństwa i administratorów oznacza to konieczność traktowania każdego incydentu związanego z React2Shell jako potencjalnego naruszenia tożsamości, chmury i zaplecza developerskiego jednocześnie. Szybkie łatanie, pełna rotacja sekretów oraz dokładna analiza śladów kompromitacji powinny być absolutnym minimum reakcji.

Źródła

  1. Cybersecurity Dive – React2Shell vulnerability helps hackers steal credentials, AI platform keys and other sensitive data — https://www.cybersecuritydive.com/news/credential-harvesting-campaign-react2shell-cisco/816726/
  2. Cisco Talos – UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications — https://blog.talosintelligence.com/uat-10608-inside-a-large-scale-automated-credential-harvesting-operation-targeting-web-applications/