React2Shell - CVE-2025-55182 - ryzyko RCE

React2Shell: CVE-2025-55182 i ryzyko RCE dla Next.js

TL; DR

React2Shell (CVE-2025-55182) tworzy krytyczną Ryzyko RCE w poprzek Komponenty serwera React (RSC) i struktury, które je osadzają, w tym Next.jsPonieważ podatność tkwi w RSC warstwa serializacji i deserializacji, atakujący mogą wysłać spreparowane żądanie HTTP i wywołać nieuwierzytelnione zdalne wykonanie kodunawet gdy zespoły korzystają z domyślnych konfiguracji frameworka. Next.js aplikacje są najbardziej narażone, ponieważ akceptują i przetwarzają Reaguj na lot ładunki domyślnie przez HTTP.

Wada dotyczy wielu wersji Pakiety serwera React, a atakujący nie potrzebują niestandardowej logiki aplikacji, aby ją wykorzystać. Badacze bezpieczeństwa wykazują niemal 100% niezawodność, a wczesne skanowanie ujawnia, że ​​wiele środowisk chmurowych jest podatnych na ataki. Next.js instancje. Zespoły muszą natychmiast dokonać aktualizacji i zweryfikować cały swój ekosystem, aby zmniejszyć React2Shell (CVE-2025-55182) ryzyko RCE.

Krytyczna luka w zabezpieczeniach zgłoszona 29 listopada za pośrednictwem programu bug bounty Meta wywołała pilną reakcję w całym ekosystemie JavaScript.

Wyznaczony CVE-2025-55182, ujawnione 3 grudnia, obecnie określane jako React2Shell jest luką o maksymalnym stopniu zagrożenia, która ma wpływ Komponenty serwera React wraz z frameworkami, które je zawierają. Początkowo przypisano oddzielny identyfikator luki w zabezpieczeniach Next.js (CVE-2025-66478), ale NVD później skonsolidował go z głównym identyfikatorem luki w zabezpieczeniach React CVE jako duplikat.

Podstawowym problemem jest ta sama, niebezpieczna obsługa zserializowanych ładunków RSC, które mogą zostać wyzwolone za pomocą żądania HTTP. Otwiera to drogę dla złośliwego podmiotu do wysłania zmanipulowanego żądania HTTP, które skutkuje uruchomieniem dowolnego kodu JavaScript na serwerze po jego wykryciu. deserializowane przez React.

Omówienie CVE-2025-55182

Komponenty React Server są głęboko zintegrowane z nowoczesnymi frameworkami i w wielu przypadkach są domyślnie włączone. Z tego powodu aplikacje mogą być narażone na React2Shell (CVE-2025-55182) nawet jeśli nigdy nie zdefiniują jawnie punktu końcowego funkcji serwera. Implementacja RSC jest nadal obecna i to samo w sobie wystarczy, aby aktywować podatne ścieżki kodu i stworzyć znaczący problem. Ryzyko RCE.

Wada wynika ze sposobu, w jaki Protokół lotu Reactl przetwarza określone ustrukturyzowane ładunki. Starsze wersje próbowały przejść ścieżki obiektów zawarte w ładunku bez weryfikacji, czy struktura była prawidłowa lub oczekiwana. Atakujący mógł manipulować tym procesem i ostatecznie doprowadzić do wykonania kodu na serwerze. Brak uwierzytelniania, specjalnej konfiguracji i logiki specyficznej dla aplikacji. Ponieważ problem występuje w konfiguracjach gotowych do użycia, standard wdrożenia są ujawniane bez konieczności spełnienia jakichkolwiek nietypowych warunków.

Wykorzystywanie luk występuje, gdy atakujący wysyłają złośliwe żądania HTTP POST, które nadużywają „vm.runInThisContextMechanizm „za pośrednictwem akcji serwera”. Chociaż React nie ujawnia bezpośrednio podatnego punktu końcowego, Next.js to robi, tworząc prawdziwy wektor zdalnego ataku. 

Next.js przyjmuje dane Flight z dowolnego żądania, przetwarza je bez odpowiedniej walidacji i przekazuje do deserializatora Reacta. System traktuje te zewnętrzne dane wejściowe jako zaufane, co umożliwia atakującym… zdalne wykonanie kodu poprzez publicznie dostępne punkty końcowe z pełnymi uprawnieniami do procesu Node.js na serwerze docelowym. 

Poważność znacznie wzrasta, ponieważ domyślne konfiguracje pozostają podatne na React2Shell (CVE-2025-55182) i wynikające Ryzyko RCE, ZA standard Aplikacja Next.js, którą tworzysz za pomocą create-next-app Ujawnia się bez konieczności wprowadzania niestandardowego kodu ani wprowadzania zmian w konfiguracji. Badacze bezpieczeństwa potwierdzają niemal 100% niezawodność w przypadku wykorzystania luk i donoszą, że 39% środowisk chmurowych korzysta z podatnych instancji, podczas gdy 44% wszystkich środowisk korzysta z publicznie ujawnionych aplikacji Next.js, na które narażeni są użytkownicy. React2Shell.

Zrozumienie narażenia na React2Shell

Wersje podatne na ataki występują w wielu wydaniach:

SkładnikWersje, których dotyczy problem
react-server-dom-webpack19.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-parcel19.0, 19.1.0, 19.1.1, 19.2.0
React-server-dom-turbopack19.0, 19.1.0, 19.1.1, 19.2.0

Ponieważ wiele frameworków ma wbudowaną obsługę RSC, aplikacje często dziedziczą podatny kod, nie zdając sobie z tego sprawy. Każdy framework lub bundler dostarczający te pakiety może narazić aplikację na atak React2Shell (CVE-2025-55182) i związane z nim ryzyko RCE. Dotyczy to między innymi:

  • Next.js (router aplikacji)
  • Podgląd React Router RSC
  • Wtyczka Vite RSC
  • Wtyczka Parcel RSC
  • Redwood SDK
  • waku
  • Wystawa

Szczególnie zagrożony jest Next.js, ponieważ domyślnie używa punktów końcowych powiązanych z RSC przez HTTP. Wersje zaczynające się od Kompilacje 14.3.0 Canary, wraz z większością 15.x i wcześnie 16.x Wersje zawierają podatną implementację. Każdy, kto korzysta z Canary 14.3.0-canary.77 lub później powinno powrócić do stabilna wersja 14.x gałęzi do czasu opublikowania poprawionej wersji Canary.

Załatane wersje Next.js zawierać:

SkładnikWersje poprawione
Next.js15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7

Publiczne dowody koncepcji i niezawodne wykrywanie

Po ujawnieniu luki w zabezpieczeniach pojawiło się wiele rzekomych proof-of-concept. Wiele z nich było niedokładnych lub opartych na błędnych założeniach. Pierwotny autor luki, Lachlan Davidson, publicznie potwierdził… React2Shell że krążące PoC GitHub nie są zgodne z exploitem udostępnionym prywatnie osobom zarządzającym React/Next.js i zapewnił, własny PoC. 

Głównym problemem wczesnych prób publicznych jest to, że nie potrafią one rozpoznać, że wyzysk odnosi sukces wbrew standard Wdrożenia Next.js nie wymagają obecności konkretnej logiki aplikacji ani funkcji po stronie serwera.

Badacze bezpieczeństwa z wielu organizacji podkreślają, że wykrycie luki wymaga czegoś więcej niż tylko określenia obecności RSC. Zespół Assetnote opublikował niezawodna metoda wykrywania oraz Skaner zdolny do potwierdzenia problemu bez użycia jakiejkolwiek logiki exploita. Metasploit wkrótce będzie miał dostępny exploit również w przypadku tej luki. 

Podejście do wykrywania wykorzystuje sposób, w jaki React Server obsługuje odwołania do właściwości obiektów za pomocą rozdzielaczy dwukropkowych w ReactFlightClientConfigBundlerWebpack.js/requireModule() Funkcja. Gdy podatne wersje przetwarzają specjalnie ustrukturyzowany, wieloczęściowy ładunek, który próbuje przejść przez nieistniejące zagnieżdżone ścieżki obiektów, wyzwalają przewidywalne odpowiedzi błędów. Żądanie diagnostyczne wysyła wzorzec referencyjny, taki jak `$1:a:a` sparowany z pustym obiektem. Implementacje podatne na ataki próbują rozwiązać ten problem, wykorzystując zagnieżdżony dostęp do właściwości o niezdefiniowanej wartości, co skutkuje wyjątkiem. Serwer zwraca status 500 z charakterystycznym wzorcem skrótu błędu w treści odpowiedzi. 

				
					export function requireModule<T>(metadata: ClientReference<T>): T {
  let moduleExports = __webpack_require__(metadata[ID]);
  if (isAsyncImport(metadata)) {
    if (typeof moduleExports.then !== 'function') {
      // This wasn't a promise after all.
    } else if (moduleExports.status === 'fulfilled') {
      // This Promise should've been instrumented by preloadModule.
      moduleExports = moduleExports.value;
    } else {
      throw moduleExports.reason;
    }
  }
  if (metadata[NAME] === '*') {
    // This is a placeholder value that represents that the caller imported this
    // as a CommonJS module as is.
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    // This is a placeholder value that represents that the caller accessed the
    // default property of this if it was an ESM interop module.
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];
}


				
			

Natychmiastowe działania dla organizacji borykających się z React2Shell (CVE-2025-55182) i ryzykiem RCE

Przeprowadź kompleksowe skanowanie swojej bazy kodu i wdrożonych aplikacji Aby zlokalizować podatne wersje pakietów. Zwróć szczególną uwagę na bezpośrednie zależności pakietów serwera React, implementacje RSC na poziomie frameworka (Next.js, Waku, Redwood itp.), aplikacje zbudowane za pomocą `create-next-app` lub podobnych narzędzi szkieletowych oraz aplikacje konteneryzowane, które mogą zawierać nieaktualne obrazy bazowe.

Analiza składu oprogramowania (SCA) narzędzia takie jak Xygeni'ego SCA może automatycznie wykrywać zależności, których dotyczy inwentarz oprogramowania. 

Natychmiast załataj:

Zaktualizuj do poprawionych wersji, takich jak React (19.0.1, 19.1.2, 19.2.1), Next.js (15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7) oraz do wszystkich pakietów frameworka zawierających RSC. Te aktualizacje wprowadzają ścisłą walidację obsługi danych RSC i zapobiegają niebezpiecznemu dereferencjom właściwości, które umożliwia eksploatację. 

Zautomatyzowane narzędzia naprawcze, takie jak Funkcja automatycznej naprawy Xygeni, może przyspieszyć proces w przypadku dużych baz kodu.

Wdrażanie tymczasowych zabezpieczeń WAF:

Podczas gdy poprawki rozprzestrzeniają się w całym wdrożeniu pipelineAktywuj reguły zapory sieciowej aplikacji internetowych, aby zapewnić natychmiastową ochronę. Wiodący dostawcy usług chmurowych opublikowali zestawy reguł awaryjnych, Cloudflare:Automatyczna ochrona dla wszystkich poziomów, gdy ruch React jest obsługiwany przez serwer proxy, a także AWS, Akamai, Fastly, Google Cloud mają dostępne podobne zasady obronne Włącz te elementy sterujące natychmiast, aby utworzyć warstwę ochronną na czas okresu przejściowego.

Monitoruj podejrzany ruch HTTP:

Skonfiguruj rejestrowanie i alerty dotyczące wskaźników prób wykorzystania luk w zabezpieczeniach: Nieprawidłowo sformatowane lub nieoczekiwane ładunki protokołu RSC Flight, nietypowe wzorce błędów 500 na punktach końcowych RSC, żądania POST z podejrzanymi nagłówkami „Next-Action” lub „Next-Router-State-Tree”, powtarzające się żądania do ścieżek „/_next/” z ładunkami wieloczęściowymi

Zweryfikuj listę materiałów swojego oprogramowania:

Wiele frameworków łączy zależności RSC w sposób transparentny, dzięki czemu są one niewidoczne podczas przeglądów zależności na poziomie powierzchniowym. Przeanalizuj swoje kompletne SBOM aby zapewnić: Brak zależności przechodnich od podatnych na ataki pakietów serwera React, aktualizacje struktury nie wprowadziły przypadkowo starszych implementacji RSC.

Myśli końcowe

React2Shell plasuje się wśród najpoważniejszych luk w ekosystemie JavaScript w ostatnich latach, nie ze względu na złożoność exploita, ale ze względu na to, że RSC jest tak głęboko zakorzeniony w dzisiejszych narzędziach. Teraz, gdy poprawki są dostępne w całym ekosystemie, zespoły muszą wdrażać aktualizacje w środowisku produkcyjnym tak szybko, jak to możliwe.

Jeśli Twoja aplikacja korzysta z funkcji serwerowych React, bezpośrednio lub pośrednio, musisz traktować tę lukę jako kwestię priorytetową i ją naprawić.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz rozwój i dostarczanie oprogramowania

z pakietem produktów Xygeni