W komponentach serwerowych frameworka webowego React (RSC, React Server Components) usunięto lukę (CVE-2025-55182), która umożliwiała wykonanie dowolnego kodu na serwerze poprzez wysyłanie żądań do serwerowego przetwarzacza. Uznano ją za krytyczną (10 na 10). Luka występuje w eksperymentalnych komponentach react-server-dom-webpack, react-server-dom-parcel i react-server-dom-turbopack, stosowanych do realizacji funkcji oraz tworzenia elementów interfejsu na serwerze, a nie po stronie klienta.
Problem spowodowany jest niebezpieczną deserializacją danych uzyskiwanych w żądaniach HTTP do serwerowych przetwarzaczy. Przetworniki „vm#runInThisContext”, „vm#runInNewContext”, „child_process#execFileSync” i „child_process#execSync” mogą być używane do uruchamiania poleceń w systemie lub wykonywania kodu JavaScript w kontekście bieżącego procesu (z omijaniem izolacji sandbox). Możliwe jest również wykorzystanie przetworników „fs#readFileSync” i „fs#writeFileSync” do odczytu i zapisu dowolnych plików na serwerze, w zakresie dozwolonym przez bieżące uprawnienia. Do przeprowadzenia ataku nie jest wymagana autoryzacja. Dostępny jest prototyp exploit. # Uruchomienie polecenia whoami curl -X POST http://localhost:3002/formaction \ -F '$ACTION_REF_0=' \ -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}' # Wykonanie JavaScriptu 1+1 curl -X POST http://localhost:3002/formaction \ -F '$ACTION_REF_0=' \ -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["1+1"]}' # Odczyt pliku /etc/passwd curl -X POST http://localhost:3002/formaction \ -F '$ACTION_REF_0=' \ -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'
Podatność systemów na luki zależy od wykorzystania w nich podatnych komponentów serwerowych react-server-dom-webpack, react-server-dom-parcel i react-server-dom-turbopack. Aplikacje, które nie korzystają z react-server, nie są narażone na tę lukę. Stopień zasięgu luki w aktywnych systemach, w których używany jest React, nie jest jeszcze jasny. Z jednej strony, React jest jednym z najpopularniejszych frameworków webowych (używany w około 6% serwisów internetowych), a podatne komponenty są rozwijane głównie w głównym repozytorium i wchodzą w skład wydań. Podatne komponenty są również wspierane w frameworkach opartych na React, takich jak Next.js i react-router. Według danych firmy Wiz Research, podatne instancje wykryto w 39% analizowanych środowisk chmurowych.
Z drugiej strony, generowanie treści na serwerze poprzez React Server Komponenty to rzadko wykorzystywana funkcja (większość stron React renderuje interfejs wyłącznie po stronie klienta), a podatne komponenty są oznaczone jako eksperymentalne i nie gwarantują poprawnego działania. Te komponenty mają stosunkowo niewielką liczbę bezpośrednich pobrań z repozytorium NPM: react-server-dom-webpack — 670 tysięcy tygodniowo, react-server-dom-parcel — 7 tysięcy oraz react-server-dom-turbopack — 32 tysiące; dla porównania, pakiet NPM React ma 45 mln pobrań tygodniowo.
Podatność występuje w wersjach React 9.0.0, 19.1.0, 19.1.1 i 19.2.0 i została usunięta w aktualizacjach React 19.0.1, 19.1.2 i 19.2.1. Podatne komponenty są również wykorzystywane w pakietach Next.js (16 mln pobrań tygodniowo), react-router (20 mln pobrań tygodniowo), waku, @parcel/rsc, @vitejs/plugin-rsc i rwsdk.
W frameworku Next.js podatność (CVE-2025-66478) dotyczy aplikacji wykorzystujących App Router oraz gałęzie Next.js 15.x i 16.x. Twierdzi się, że podatność objawia się w domyślnej konfiguracji Next.js (standardowa aplikacja tworzona za pomocą narzędzia create-next-app jest narażona na atak). Użytkownikom zaleca się jak najszybsze zainstalowanie aktualizacji Next.js 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 lub 16.0.7.
Źródło: opennet.ru
