@angular/common: Wyciek tokena XSRF przez rozbieżność w parsowaniu adresów URL w kliencie HTTP Angulara (Niekompletna poprawka dla CVE-2025-66035)
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
- Aplikacja Angular ofiary musi mieć włączoną ochronę przed XSRF (włączoną domyślnie w
HttpClient). - 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/apilub//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 wydania22.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, żeparsedUrl.origin === window.location.originprzed 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 wydania22.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 warunekparsedUrl.origin === window.location.originprzed przekazaniem dynamicznych adresów URL do modyfikujących metodHttpClient. - Unikaj przekazywania niezaufanych adresów URL do mutujących metod
HttpClient.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka 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
- https://github.com/angular/angular/security/advisories/GHSA-jfgx-762w-99vr
- https://github.com/angular/angular/pull/65683
- https://github.com/angular/angular/pull/71295
- https://github.com/angular/angular/commit/0659d11c854c9c6b886a2e925afef98d70bb005f
- https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b
- https://github.com/angular/angular/commit/933ce817d53e25926844fa56af8230816763d08e
- https://github.com/angular/angular
- 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
- 2025: 1
- 2026: 7
-
@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
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.