
Wprowadzenie do problemu / definicja luki
3 grudnia 2025 r. zespół React ujawnił krytyczną podatność typu pre-auth RCE w protokole Flight dla React Server Components (RSC), śledzoną jako CVE-2025-55182 (CVSS 10.0). Dotyczy ona pakietu react-server i implementacji RSC w wersjach React 19.0–19.2.0 oraz bibliotekach react-server-dom-* (webpack/parcel/turbopack). Równolegle Next.js opublikował własne ogłoszenie (CVE-2025-66478), które następnie zostało odrzucone jako duplikat CVE-2025-55182.
W skrócie
- Co to jest? Błąd nieserializowania bezpiecznego (unsafe deserialization) w obsłudze żądań Flight dla RSC prowadzący do zdalnego wykonania kodu bez uwierzytelnienia.
- Kogo dotyczy? React 19 (pakiety react-server-dom-* w wersjach 19.0/19.1.0/19.1.1/19.2.0) oraz frameworki korzystające z RSC, m.in. Next.js 15.x/16.x (App Router).
- Status Next.js: CVE-2025-66478 → duplikat CVE-2025-55182.
- Wykryte nadużycia: CISA dodała CVE-2025-55182 do katalogu KEV (Known Exploited Vulnerabilities); Unit 42 opisuje realne działania poeksploatacyjne (skanowanie, web-shelle, kryptokoparki, próby Cobalt Strike).
- Naprawa: aktualizacja do React 19.0.1 / 19.1.2 / 19.2.1 oraz do bieżących wersji Next.js z poprawkami.
Kontekst / historia / powiązania
Reakcja społeczności była natychmiastowa: oprócz oficjalnych biuletynów React i Next.js, w krótkim czasie pojawiły się alerty CISA oraz vendorów bezpieczeństwa. Vercel wydał podsumowanie i narzędzie ułatwiające podbicie projektów Next.js do wersji łatających błąd. 6 grudnia Vercel opublikował wpis z instrukcją i narzędziem npx fix-react2shell-next do automatycznej aktualizacji zależności w aplikacjach Next.js. 8 grudnia Unit 42 zaktualizowało swój raport, potwierdzając obserwacje działań atakujących.
Analiza techniczna / szczegóły luki
Rdzeń problemu: parser/warstwa deserializacji w RSC Flight akceptuje złośliwe, specjalnie spreparowane ładunki HTTP kierowane do Server Functions, co pozwala wpływać na logikę wykonania po stronie serwera i osiągnąć RCE. Co istotne, domyślna konfiguracja popularnych szablonów (np. świeżo utworzonego Next.js) była podatna bez modyfikacji kodu.
Zakres wersji:
- React / RSC: react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack w wersjach 19.0.0 / 19.1.0 / 19.1.1 / 19.2.0.
- Next.js: głównie gałęzie 15.x i 16.x (App Router) oraz wybrane wydania canary od 14.3.0; projektowe domyślne wdrożenia były atakowalne.
Dlaczego to groźne dla „niewykorzystujących” Server Functions? choćby jeżeli aplikacja nie definiuje własnych endpointów Server Functions, obsługa RSC może być włączona „po drodze”, co utrzymuje powierzchnię ataku.
Praktyczne konsekwencje / ryzyko
- Łatwość ataku: brak uwierzytelnienia, niski poziom złożoności, wysoka niezawodność exploita; podatność w konfiguracji domyślnej.
- Skala: React/Next.js mają ogromny udział w rynku — CISA oznaczyła CVE jako znaną, wykorzystywaną; Unit 42 raportuje już poeksploatacyjne działania napastników (skrypty Bash, web-shelle, kryptokoparki, próby wdrożenia Cobalt Strike i aktywność IAB).
- Potencjalny wpływ: przejęcie procesu serwerowego (Node.js), kradzież tajemnic (klucze, zmienne środowiskowe), pivot w sieci, trwale osadzone backdoory i dalsze kampanie (np. cryptojacking).
Rekomendacje operacyjne / co zrobić teraz
- Natychmiastowa aktualizacja (patch now):
- React: do 19.0.1 / 19.1.2 / 19.2.1 (lub nowszych).
- Next.js: do najnowszych wersji z poprawką; w projektach Next.js skorzystaj z narzędzia npx fix-react2shell-next (Vercel).
- Przegląd zależności: wymuś podbicie react, react-dom, react-server, react-server-dom-*, a w Next.js — aktualny next oraz bundlery (Turbopack/Webpack) w zgodnych wersjach. (Weryfikuj lockfile.)
- Twarde ograniczenia sieciowe: izoluj serwery renderujące (SSR/RSC), kontroluj wychodzące połączenia z Node.js (blokuj „curl/wget do Internetu”, egres tylko do potrzebnych usług). Obserwuj anomalie DNS/HTTP. (Wnioski z TTP napastników).
- Detekcja IOC/TTP: szukaj poleceń Base64 z potokami | base64 -d | sh, skryptów typu sex.sh, podejrzanych web-shelli „React File Manager”, prób pobrania C2, śladów Cobalt Strike/Mirai/NOODLERAT.
- Higiena sekretów: rotuj klucze/tokenty środowiskowe (CI/CD, .env), sprawdź uprawnienia ról w chmurze — traktuj serwer jako potencjalnie skompromitowany, jeżeli był podatny i publicznie dostępny w okresie 3–8 grudnia 2025 r. (po ujawnieniu).
- Twardnienie buildów: włącz ograniczenia --frozen-lockfile, SCA w CI, testy E2E po aktualizacji; rozważ WAF z regułami blokującymi sekwencje Flight/RSC nietypowe dla twojej aplikacji. (Dodatkowe wskazówki społeczności).
Różnice / porównania z innymi przypadkami
- Wzorzec błędu: klasyczne unsafe deserialization znane z ekosystemów Java/.NET teraz uderza w RSC/Node.js — wektor to niestandardowy protokół (Flight) i domyślna obsługa w popularnych frameworkach.
- CVE w Next.js: początkowo wydzielone jako CVE-2025-66478, ale scalone do Reactowego CVE-2025-55182 — z punktu widzenia ryzyka operacyjnego to jedna podatność w warstwie RSC.
Podsumowanie / najważniejsze wnioski
- To najpoważniejsza luka w ekosystemie React/Next.js od lat: CVSS 10.0, pre-auth RCE, domyślne konfiguracje atakowalne. Aktualizacje są dostępne — wdrażaj natychmiast.
- Dowody nadużyć już istnieją (CISA KEV, telemetryczne obserwacje Unit 42). Reaguj jak na incydent: patch + poszukiwanie TTP/IOC + rotacja sekretów.
Źródła / bibliografia
- React — Critical Security Vulnerability in React Server Components (03.12.2025). (React)
- Next.js — Security Advisory: CVE-2025-66478 (06.12.2025). (Next.js)
- NVD — CVE-2025-55182 (ostatnia aktualizacja ~3 dni temu). (nvd.nist.gov)
- CISA — dodanie CVE-2025-55182 do KEV (05.12.2025). (CISA)
- Unit 42 (Palo Alto Networks) — Exploitation of Critical Vulnerability in React Server Components (akt. 08.12.2025) — obserwacje skanowania i działań poeksploatacyjnych. (Unit 42)
