@angular/platform-server: Open Redirect poprzez adresy URL względne względem protokołu w Server-Side Rendering (SSR)
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łaniemrouter.navigateByUrl) akceptują/.//evil.testlub/.;/(//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ż
ServerPlatformLocationjest 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-serveri@angular/ssr. - Wzorce tras z parametrami: Router zawiera trasy z parametrami, symbolami wieloznacznymi lub segmentami podrzędnymi (np.
/:tenantpasują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:
GET /.;/(//evil.test) HTTP/1.1
Host: example.com
Odpowiedź:
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.121.2.2520.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):
- 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; } - Sanityzacja nagłówków przekierowań:
Upewnij się, że serwery proxy lub bramy API przepisują lub blokują nagłówki odpowiedzi
Locationwzglę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
Locationwzględne względem protokołu wysyłane przez serwer SSR.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka 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
- https://github.com/angular/angular/security/advisories/GHSA-w739-gvwx-grc3
- https://github.com/angular/angular/pull/71077
- https://github.com/angular/angular/pull/71078
- https://github.com/angular/angular/pull/71079
- https://github.com/angular/angular/commit/450af9c813c7660b9bd91e5635f705ee3ed7b32a
- https://github.com/angular/angular/commit/83944fc8c50e86be90e8ec4184cd15002b5af262
- https://github.com/angular/angular/commit/928dcfd2582152655b5559509d057bf6a5a19521
- https://github.com/angular/angular/commit/d7d81e189d227108c3b9d39178dbb7389f6f970d
- https://github.com/angular/angular
- https://github.com/angular/angular/releases/tag/v20.3.33
- https://github.com/angular/angular/releases/tag/v21.2.25
- https://github.com/angular/angular/releases/tag/v22.2.1
- 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ć.
- 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
- 2025: 1
- 2026: 11
-
@angular/platform-server: Open Redirect poprzez adresy URL względne względem protokołu w Server-Side Rendering (SSR) ten wpis
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.