Średnia

@angular/common: Wyciek tokena XSRF przez rozbieżność w parsowaniu adresów URL w kliencie HTTP Angulara (Niekompletna poprawka dla CVE-2025-66035)

  • Ujawniono: 20.10.2026
  • Aktualizacja: 20.10.2026 23:22

Niekompletna poprawka dla GHSA-58c5-g7wp-6w37 (CVE-2025-66035) w kliencie HTTP biblioteki @angular/common (HttpClient) umożliwia wyciek tokenów Cross-Site Request Forgery (XSRF) do kontrolowanych przez atakującego domen cross-origin, gdy żądania używają adresów URL wykorzystujących rozbieżności w parsowaniu między wyrażeniami regularnymi a parserem WHATWG URL w przeglądarce.

Opis techniczny

Aby rozwiązać CVE-2025-66035, w xsrfInterceptorFn wprowadzono wyrażenie regularne (const ABSOLUTE_URL_REGEX = /^(?:https?:)?\/\//i) do wykrywania i pomijania bezwzględnych oraz zależnych od protokołu adresów URL przed dołączeniem nagłówka X-XSRF-TOKEN.

Przeglądarki rozwiązują jednak adresy URL żądań przekazywane do fetch() i XMLHttpRequest.open() za pomocą parsera WHATWG URL. W przypadku schematów http: oraz https: standard WHATWG URL wykonuje kilka normalizacji przed ustaleniem authority/origin:

  • Odwrócone ukośniki (\) są traktowane jak zwykłe ukośniki (/) — np. /\evil.example/x, \\evil.example/x, \/evil.example/x, https:\\evil.example/x, https:/\evil.example/x.
  • Początkowe i końcowe znaki kontrolne C0 oraz spacje (<= 0x20) są usuwane — np. ' //evil.example/x', '\0//evil.example/x', '\x1f//evil.example/x'.
  • Znaki tabulacji ASCII (\t), nowego wiersza (\n) i powrotu karetki (\r) są usuwane z dowolnego miejsca w danych wejściowych — np. '/\t/evil.example/x', '/\n/evil.example/x', 'htt\tps://evil.example/x'.

Ponieważ te adresy URL nie pasują do /^(?:https?:)?\/\//i, xsrfInterceptorFn traktuje je jako względne adresy URL w ramach tego samego źródła i dołącza nagłówek X-XSRF-TOKEN, podczas gdy przeglądarka rozwiązuje i wysyła żądanie do zewnętrznego hosta (evil.example).

Uwaga: W wersjach Angular 21.0.3+ oraz 22.x wyrażenie regularne zostało zastąpione porównaniem pochodzenia WHATWG new URL(req.url, locationOrigin) w #65683 i wersje te nie były podatne. Jednak gałąź LTS 20.3.x zachowała wyrażenie regularne aż do 20.3.34.

Wpływ

Wyciek tokena omija wbudowaną ochronę przed XSRF w podatnych wersjach Angulara, pozwalając atakującemu na przechwycenie poprawnego nagłówka X-XSRF-TOKEN użytkownika, jeśli serwer atakującego zezwala na żądanie i niestandardowy nagłówek za pośrednictwem CORS. Po jego uzyskaniu atakujący może przeprowadzić ataki Cross-Site Request Forgery (CSRF) przeciwko sesji ofiary.

Warunki wstępne ataku

  1. Aplikacja Angular ofiary musi mieć włączoną ochronę przed XSRF (włączoną domyślnie w HttpClient).
  2. Atakujący musi być w stanie skłonić aplikację do wysłania modyfikującego stan żądania HTTP (np. POST, PUT, DELETE, PATCH) na kontrolowany przez siebie adres URL (taki jak /\attacker.example/api lub //attacker.example/api).

Poprawki

Problem rozwiązano poprzez parsowanie i porównywanie pochodzenia adresu URL żądania z bieżącym pochodzeniem aplikacji przy użyciu standardowego konstruktora URL (new URL(req.url, locationOrigin)).

  • 21.0.3 (oraz wszystkie wydania 22.x)
  • 20.3.34

Obejścia

Jeśli nie można natychmiast zaktualizować biblioteki do poprawionej wersji:

  • Waliduj i normalizuj wychodzące adresy URL żądań za pomocą new URL(url, window.location.origin) oraz weryfikuj, że parsedUrl.origin === window.location.origin przed przekazaniem dynamicznych adresów URL do mutujących żądań HttpClient.
  • Unikaj przekazywania niezaufanych lub kontrolowanych przez użytkownika adresów URL do mutujących metod HttpClient.

Co trzeba zrobić

Zaktualizuj bibliotekę do poprawionych wersji:

  • 21.0.3 (oraz wszystkie kolejne wydania 22.x)
  • 20.3.34

Podatność usunięto poprzez parsowanie i porównywanie pochodzenia adresu URL żądania z bieżącym pochodzeniem aplikacji przy użyciu konstruktora URL (new URL(req.url, locationOrigin)).

Jeśli natychmiastowa aktualizacja nie jest możliwa:

  • Waliduj i normalizuj wychodzące adresy URL za pomocą new URL(url, window.location.origin) oraz weryfikuj warunek parsedUrl.origin === window.location.origin przed przekazaniem dynamicznych adresów URL do modyfikujących metod HttpClient.
  • Unikaj przekazywania niezaufanych adresów URL do mutujących metod HttpClient.

Czego dotyczy

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

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka npm @angular/common >= 21.0.0, < 21.0.3, >= 20.0.0, < 20.3.34, <= 19.2.25 21.0.3, 20.3.34

Odnośniki

Ocena CVSS -
Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Słabość (CWE)
CWE-201, CWE-359
Platforma
npm
Paczka
@angular/common
Ujawniono
20.10.2026
Aktualizacja
20.10.2026 23:22

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

OSV / GitHub Advisory Database - GHSA-jfgx-762w-99vr - CC BY 4.0

Historia podatności: @angular/common

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

Wszystkich wpisów
8
Pierwsza → ostatnia
11.2025 10.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Wysoka 6
  • Średnia 2

Ujawnienia w latach

  1. 2025: 1
  2. 2026: 7
  1. @angular/common: Wyciek tokena XSRF przez rozbieżność w parsowaniu adresów URL w kliencie HTTP Angulara (Niekompletna poprawka dla CVE-2025-66035) ten wpis
    Średnia CVE-2026-111753 >= 21.0.0, < 21.0.3, >= 20.0.0, < 20.3.34, <= 19.2.25 21.0.3, 20.3.34
  2. Średnia · 4.0 CVE-2026-88059 >= 22.0.0, < 22.1.1, >= 21.0.0, < 21.2.20, >= 20.0.0, < 20.3.28, <= 19.2.25 22.1.1, 21.2.20, 20.3.28
  3. Wysoka CVE-2026-68945 >= 22.0.0-next.0, < 22.0.2, >= 21.0.0-next.0, < 21.2.19, >= 20.0.0-next.0, < 20.3.27, <= 19.2.25 22.0.2, 21.2.19, 20.3.27
  4. Wysoka · 7.5 CVE-2026-54268 >= 22.0.0-next.0, < 22.0.1, >= 21.0.0-next.0, < 21.2.17, >= 20.0.0-next.0, < 20.3.25, <= 19.2.25 22.0.1, 21.2.17, 20.3.25
  5. Wysoka · 6.1 CVE-2026-54266 >= 22.0.0-next.0, < 22.0.1, >= 21.0.0-next.0, < 21.2.17, >= 20.0.0-next.0, < 20.3.25, <= 19.2.25 22.0.1, 21.2.17, 20.3.25
  6. Wysoka · 6.1 CVE-2026-50171 >= 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
  7. Wysoka · 7.5 CVE-2026-50170 >= 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
  8. Wysoka CVE-2025-66035 >= 21.0.0-next.0, < 21.0.1, >= 20.0.0-next.0, < 20.3.14, < 19.2.16 21.0.1, 20.3.14, 19.2.16

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.