Średnia

@angular/platform-server: Open Redirect poprzez adresy URL względne względem protokołu w Server-Side Rendering (SSR)

  • Ujawniono: 20.10.2026
  • Aktualizacja: 20.10.2026 18:18

Zidentyfikowano podatność typu open redirect w @angular/platform-server, gdy włączone jest Server-Side Rendering (SSR).

Gdy Angular SSR przetwarza przychodzące żądanie, translacja URL i nawigacja platformy są zarządzane przez ServerPlatformLocation przy użyciu resolveUrl (lub parseUrl w v20). Chociaż resolveUrl odrzucał adresy URL względne względem protokołu, których surowy ciąg znaków zaczynał się bezpośrednio od //, weryfikacja ta była wykonywana przed normalizacją WHATWG URL.

Gdy adres URL żądania zawiera segment z kropkami cofającymi ścieżkę, po którym następuje wiele ukośników (taki jak /.//evil.test lub zserializowany z definicji tras routera, np. /.;/(//evil.test)), dane wejściowe omijały wstępne sprawdzenie urlStr.startsWith('//'). Dalsze przetwarzanie WHATWG URL rozwiązywało segmenty kropek i skutkowało wartością pathname rozpoczynającą się od // (//evil.test).

W konsekwencji ServerPlatformLocation zapisywał pathname = '//evil.test'. Gdy @angular/ssr wykrywał niezgodność między wyrenderowanym adresem URL a ostatecznym stanem lokalizacji routera, emitował nienormalizowaną ścieżkę w nagłówku odpowiedzi HTTP Location, generując przekierowanie HTTP 302 z Location: //evil.test, które przeglądarki interpretują jako nawigację względną względem protokołu poza domenę źródłową.

Wpływ

Skuteczne wykorzystanie podatności pozwala nieuwierzytelnionemu zdalnemu atakującemu na spreparowanie adresów URL, które zmuszają Angular SSR do przekierowania użytkowników na dowolną zewnętrzną domenę.

  • Obejście zabezpieczeń na poziomie aplikacji: Standardowe procedury walidacji aplikacji (np. sprawdzanie !returnUrl.startsWith('//') przed wywołaniem router.navigateByUrl) akceptują /.//evil.test lub /.;/(//evil.test) jako bezpieczną ścieżkę względną, co pozwala atakującym na obejście reguł allowlisty przekierowań.
  • Brak wpływu na aplikacje SPA po stronie klienta: Aplikacje Angular działające wyłącznie po stronie klienta (Single Page Applications bez SSR) nie są podatne, ponieważ ServerPlatformLocation jest wykorzystywane tylko w środowiskach uruchomieniowych po stronie serwera.

Warunki wstępne ataku i podatne konfiguracje

Aplikacja jest podatna, jeśli spełnione są następujące warunki:

  • Włączone SSR: Aplikacja działa w środowisku Server-Side Rendering z wykorzystaniem @angular/platform-server i @angular/ssr.
  • Wzorce tras z parametrami: Router zawiera trasy z parametrami, symbolami wieloznacznymi lub segmentami podrzędnymi (np. /:tenant pasujące do . i serializujące dodatkowe grupy outletów (//evil.test) do /.//evil.test) lub przekazuje cele nawigacji dostarczone przez użytkownika (np. returnUrl).
  • Przepuszczanie przez Reverse Proxy: Zewnętrzne serwery reverse proxy (Nginx, Cloudflare, ALB) przekazują średniki (;) lub segmenty z kropkami bez ich usuwania lub normalizacji.

Przykład żądania eksploitującego

Atakujący wysyła żądanie skierowane na trasę z parametrami i segmentami podrzędnymi:

http
GET /.;/(//evil.test) HTTP/1.1
Host: example.com

Odpowiedź:

http
HTTP/1.1 302 Found
Location: //evil.test

Przeglądarka klienta interpretuje //evil.test w sposób względny względem protokołu i przekierowuje użytkownika z example.com do evil.test.

Poprawki

Problem rozwiązano poprzez aktualizację resolveUrl (oraz parseUrl w v20) w @angular/platform-server, aby upewnić się, że znormalizowana ścieżka URL nie zaczyna się od //, gdy allowProtocolRelative ma wartość false.

  • 22.2.1
  • 21.2.25
  • 20.3.33

Obejścia i mitygacje

Jeśli nie można natychmiast dokonać aktualizacji do załatanej wersji, należy wdrożyć jedno z poniższych rozwiązań na brzegu sieci (reverse proxy lub WAF):

  1. Odrzucanie ścieżek z segmentami kropek poprzedzającymi ukośniki: Skonfiguruj serwer reverse proxy (np. Nginx, Cloudflare, AWS WAF), aby blokował żądania zawierające /.//, /..// lub /.;/:
    nginx
    # Nginx example: reject suspicious path normalization sequences
    if ($request_uri ~* "(\n/\.\/|\/\.\;)") {
        return 400;
    }
  2. Sanityzacja nagłówków przekierowań: Upewnij się, że serwery proxy lub bramy API przepisują lub blokują nagłówki odpowiedzi Location względne względem protokołu (//) pochodzące z upstreamu SSR.

Co trzeba zrobić

Zaktualizuj pakiet @angular/platform-server do wersji 22.2.1, 21.2.25 lub 20.3.33.

Jeśli natychmiastowa aktualizacja nie jest możliwa, zastosuj obejścia na serwerze reverse proxy lub WAF:

  • Blokuj żądania zawierające segmenty kropek poprzedzające ukośniki (/.//, /..// lub /.;/).
  • Sanityzuj lub odrzucaj nagłówki odpowiedzi Location względne względem protokołu wysyłane przez serwer SSR.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka npm @angular/platform-server >= 22.0.0, < 22.2.1, >= 21.0.0, < 21.2.25, >= 20.0.0, < 20.3.33, <= 19.2.25 22.2.1, 21.2.25, 20.3.33

Odnośniki

Ocena CVSS -
Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Słabość (CWE)
CWE-601
Platforma
npm
Paczka
@angular/platform-server
Ujawniono
20.10.2026
Aktualizacja
20.10.2026 18:18

Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.

OSV / GitHub Advisory Database - GHSA-w739-gvwx-grc3 - CC BY 4.0

Historia podatności: @angular/platform-server

Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (12) w archiwum
Wszystkich wpisów
12
Pierwsza → ostatnia
09.2025 10.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Wysoka 11
  • Średnia 1

Ujawnienia w latach

  1. 2025: 1
  2. 2026: 11
Istotność:
  1. @angular/platform-server: Open Redirect poprzez adresy URL względne względem protokołu w Server-Side Rendering (SSR) ten wpis
    Średnia CVE-2026-111754 >= 22.0.0, < 22.2.1, >= 21.0.0, < 21.2.25, >= 20.0.0, < 20.3.33, <= 19.2.25 22.2.1, 21.2.25, 20.3.33
  2. Wysoka CVE-2026-101895 >= 22.0.0, < 22.1.6, >= 21.0.0, < 21.2.23, >= 20.0.0, < 20.3.31, <= 19.2.25 22.1.6, 21.2.23, 20.3.31
  3. Wysoka CVE-2026-88058 >= 22.0.0, < 22.1.4, >= 21.0.0, < 21.2.22, >= 20.0.0, < 20.3.30, <= 19.2.25 22.1.4, 21.2.22, 20.3.30
  4. Wysoka CVE-2026-88060 >= 22.0.0, < 22.1.4, >= 21.0.0, < 21.2.22, >= 20.0.0, < 20.3.30, <= 19.2.25 22.1.4, 21.2.22, 20.3.30
  5. Wysoka CVE-2026-88056 >= 22.0.0, < 22.1.4, >= 21.0.0, < 21.2.22, >= 20.0.0, < 20.3.30, <= 19.2.25 22.1.4, 21.2.22, 20.3.30
  6. Wysoka CVE-2026-69149 >= 22.0.0-next.0, < 22.0.7, >= 21.0.0-next.0, < 21.2.19, >= 20.0.0-next.0, < 20.3.27, <= 19.2.25 22.0.7, 21.2.19, 20.3.27
  7. Wysoka CVE-2026-50556 >= 22.0.0-next.0, < 22.0.0-rc.2, >= 21.0.0-next.0, < 21.2.16, >= 20.0.0-next.0, < 20.3.24, >= 19.0.0-next.0, < 19.2.25, <= 18.2.14 22.0.0-rc.2, 21.2.16, 20.3.24, 19.2.25
  8. Wysoka · 6.1 CVE-2026-50555 >= 22.0.0-next.0, < 22.0.0-rc.2, >= 21.0.0-next.0, < 21.2.16, >= 20.0.0-next.0, < 20.3.24, >= 19.0.0-next.0, < 19.2.25, <= 18.2.14 22.0.0-rc.2, 21.2.16, 20.3.24, 19.2.25
  9. Wysoka · 8.2 CVE-2026-50168 >= 22.0.0-next.0, < 22.0.0-rc.2, >= 20.0.0-next.0, < 20.3.22, >= 19.0.0-next.0, < 19.2.23, <= 18.2.14, >= 21.0.0-next.0, < 21.2.15 22.0.0-rc.2, 20.3.22, 19.2.23, 21.2.15
  10. Wysoka · 6.1 CVE-2026-46417 >= 22.0.0-next.0, < 22.0.0-next.12, >= 21.0.0-next.0, < 21.2.13, >= 20.0.0-next.0, < 20.3.21, >= 19.0.0-next.0, < 19.2.22, <= 18.2.14 22.0.0-next.12, 21.2.13, 20.3.21, 19.2.22
  11. Wysoka CVE-2026-41423 >= 22.0.0-next.0, < 22.0.0-next.8, >= 21.0.0-next.0, < 21.2.9, >= 20.0.0-next.0, < 20.3.19, >= 19.0.0-next.0, < 19.2.21, <= 18.2.14 22.0.0-next.8, 21.2.9, 20.3.19, 19.2.21
  12. Wysoka CVE-2025-59052 >= 16.0.0-next.0, < 18.2.14, >= 20.0.0-next.0, < 20.3.0, >= 19.0.0-next.0, < 19.2.15, >= 21.0.0-next.0, < 21.0.0-next.3 18.2.14, 20.3.0, 19.2.15, 21.0.0-next.3

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.