Krytyczna luka w Next.js ImageResponse: spreparowany SVG może prowadzić do zdalnego wykonania kodu - Security Bez Tabu

Krytyczna luka w Next.js ImageResponse: spreparowany SVG może prowadzić do zdalnego wykonania kodu

Cybersecurity news

Wprowadzenie do problemu / definicja

W ekosystemie Next.js ujawniono krytyczną podatność związaną z mechanizmem ImageResponse, wykorzystywanym do generowania obrazów Open Graph oraz innych dynamicznych grafik podglądowych. Problem pojawia się wtedy, gdy aplikacja przekazuje do procesu renderowania dane kontrolowane przez użytkownika i osadza je w treści, atrybutach lub stylach SVG.

W określonych warunkach taki scenariusz może doprowadzić do zdalnego wykonania kodu po stronie serwera. To szczególnie groźne dla aplikacji publicznie dostępnych, które generują obrazy na żądanie na podstawie parametrów z adresu URL lub innych zewnętrznych źródeł danych.

W skrócie

  • Podatność została oznaczona jako CVE-2026-94545.
  • Dotyczy implementacji ImageResponse w next/og działającej w środowisku Node.js.
  • Zagrożone są wersje Next.js od 16.2.0 do 16.3.5.
  • Poprawka została opublikowana w wersji 16.3.6.
  • Problem nie obejmuje wariantu Edge runtime.
  • Linia Next.js 15 nie jest objęta tym samym zakresem podatności, ale dla serii 15.5 udostępniono dodatkowe utwardzenie w wersji 15.5.26.
  • Źródłem błędu jest biblioteka Satori odpowiedzialna za konwersję układu obrazu do SVG.

Kontekst / historia

ImageResponse jest szeroko stosowany w nowoczesnych aplikacjach opartych o Next.js do dynamicznego generowania grafik używanych przez media społecznościowe, karty udostępnień i podglądy treści. Mechanizm ten często korzysta z danych pochodzących bezpośrednio z żądania HTTP, takich jak tytuł artykułu, nazwa użytkownika, identyfikator zasobu czy parametry marketingowe.

Z perspektywy bezpieczeństwa jest to obszar szczególnie wrażliwy, ponieważ łączy dane wejściowe pochodzące od użytkownika z renderowaniem dokumentu SVG, który następnie trafia do dalszego łańcucha przetwarzania. Producent frameworka opublikował poprawkę 22 września 2026 roku, a publiczne informacje wskazują, że luka wynika z błędu upstream w bibliotece Satori. Oznacza to, że problem dotyczy nie tylko samego frameworka, ale także jego zależności odpowiedzialnej za generowanie SVG.

Analiza techniczna

Podatność wynika z nieprawidłowego escapowania części danych wejściowych podczas generowania kodu SVG. Jeżeli aplikacja przekazuje do ImageResponse wartość kontrolowaną przez atakującego i umieszcza ją w miejscu interpretowanym jako zawartość SVG, możliwe staje się wstrzyknięcie spreparowanej struktury zamiast zwykłego tekstu.

W typowym przepływie ImageResponse wykorzystuje bibliotekę Satori do przekształcenia deklaratywnego układu w SVG, a następnie generuje końcowy obraz PNG. Jeżeli na tym etapie nie dochodzi do właściwej neutralizacji znaków specjalnych, powstały SVG może zostać zinterpretowany jako aktywny fragment dokumentu. W środowisku Node.js taki rezultat może następnie wejść w interakcję z innymi bibliotekami zależnymi od Next.js, otwierając drogę do eskalacji skutków aż do zdalnego wykonania kodu.

Nie każda aplikacja używająca next/og jest automatycznie narażona. Największe ryzyko dotyczy wdrożeń, które dynamicznie generują obrazy na podstawie danych z żądania i przekazują te dane do treści SVG, atrybutów lub stylów bez ścisłej walidacji oraz sanitizacji.

  • importują ImageResponse z next/og,
  • generują obrazy dynamicznie na podstawie danych z żądania,
  • wprowadzają te dane do treści SVG, atrybutów lub stylów bez odpowiednich zabezpieczeń.

W praktyce szczególnej kontroli wymagają handlery tras generujące obrazy na żądanie oraz pliki typu opengraph-image, jeśli wykorzystują dane z parametrów URL, nagłówków, identyfikatorów użytkownika lub innych zewnętrznych źródeł.

Konsekwencje / ryzyko

Najpoważniejszą konsekwencją jest możliwość zdalnego wykonania kodu na serwerze aplikacyjnym. Dla organizacji utrzymujących publicznie dostępne aplikacje Next.js oznacza to ryzyko przejęcia procesu aplikacji, dostępu do sekretów środowiskowych, pivotingu do innych usług wewnętrznych oraz dalszych działań poeksploatacyjnych, takich jak kradzież danych czy wdrożenie trwałych mechanizmów dostępu.

Ryzyko rośnie szczególnie w środowiskach, w których funkcje generowania obrazów są publicznie dostępne bez uwierzytelnienia, dane z URL są bezpośrednio mapowane do zawartości obrazów, a proces aplikacji dysponuje szerokimi uprawnieniami do systemu plików, sieci lub sekretów. Dodatkowym problemem jest utrudnione wykrywanie historycznych nadużyć, zwłaszcza jeśli organizacja nie logowała szczegółowo parametrów wejściowych dla endpointów odpowiedzialnych za generowanie obrazów.

Rekomendacje

Podstawowym działaniem naprawczym jest aktualizacja Next.js do wersji 16.3.6. Organizacje korzystające bezpośrednio z biblioteki Satori powinny równolegle wdrożyć poprawioną wersję 0.33.5. Jeżeli środowisko pozostaje na linii 15.5, warto zastosować wydanie 15.5.26, które wprowadza dodatkowe utwardzenie bezpieczeństwa dla next/og.

  • zinwentaryzować wszystkie aplikacje wykorzystujące ImageResponse z next/og,
  • zidentyfikować miejsca, w których dane z żądania trafiają do generatora obrazów,
  • usunąć możliwość przekazywania niesanitowanych danych do treści, atrybutów i stylów SVG,
  • wprowadzić ścisłą walidację wejścia opartą na allowliście znaków i długości,
  • ograniczyć uprawnienia procesu aplikacji oraz dostęp do sekretów środowiskowych,
  • monitorować nietypowe żądania do tras generujących obrazy,
  • wdrożyć reguły detekcyjne dla anomalii w parametrach URL związanych z endpointami OG image.

Jeżeli szybka aktualizacja nie jest możliwa, tymczasowym obejściem powinno być całkowite wyeliminowanie wartości kontrolowanych przez użytkownika z fragmentów SVG renderowanych przez podatny komponent. W praktyce może to oznaczać czasowe uproszczenie szablonów obrazów lub wyłączenie dynamicznych funkcji personalizacyjnych i marketingowych.

Podsumowanie

CVE-2026-94545 to poważna podatność w łańcuchu renderowania obrazów w Next.js, pokazująca, jak niebezpieczne może być łączenie danych wejściowych użytkownika z generowaniem SVG po stronie serwera. Problem dotyczy ImageResponse w środowisku Node.js i może prowadzić do zdalnego wykonania kodu, jeśli aplikacja osadza niesanitowane dane w strukturze SVG.

Kluczowe działania obejmują szybką aktualizację do bezpiecznej wersji, przegląd wykorzystania next/og oraz wdrożenie rygorystycznej walidacji danych wejściowych. Dla zespołów bezpieczeństwa i DevSecOps to również sygnał, by dokładniej analizować zależności odpowiedzialne za generowanie treści po stronie serwera.

Źródła

  1. https://thehackernews.com/2026/09/critical-nextjs-imageresponse-flaw-can.html
  2. https://github.com/vercel/next.js/security/advisories/GHSA-vcvr-r3jv-pc5j
  3. https://github.com/vercel/satori/security/advisories/GHSA-wx4j-mvgx-mqwp
  4. https://nextjs.org/blog/next-16-3