@angular/common: Fuga del token XSRF por discrepancia en el análisis de URL en el cliente HTTP de Angular (Corrección incompleta para CVE-2025-66035)
Una corrección incompleta para GHSA-58c5-g7wp-6w37 (CVE-2025-66035) en el cliente HTTP de @angular/common (HttpClient) permite que los tokens de Cross-Site Request Forgery (XSRF) se filtren a dominios de origen cruzado controlados por un atacante cuando las solicitudes utilizan URL que aprovechan discrepancias de procesamiento entre expresiones regulares y el analizador de URL WHATWG del navegador.
Descripción técnica
Para solucionar CVE-2025-66035, xsrfInterceptorFn introdujo una expresión regular (const ABSOLUTE_URL_REGEX = /^(?:https?:)?\/\//i) para detectar y omitir URL absolutas y relativas al protocolo antes de adjuntar el encabezado X-XSRF-TOKEN.
Sin embargo, los navegadores resuelven las URL de solicitud pasadas a fetch() y XMLHttpRequest.open() mediante el analizador de URL WHATWG. Para los esquemas http: y https:, el estándar WHATWG URL realiza varias normalizaciones antes de resolver la autoridad/origen:
- Las barras invertidas (
\) se tratan como barras inclinadas hacia adelante (/) — p. ej.,/\evil.example/x,\\evil.example/x,\/evil.example/x,https:\\evil.example/x,https:/\evil.example/x. - Los caracteres de control C0 y espacios iniciales y finales (
<= 0x20) se eliminan — p. ej.,' //evil.example/x','\0//evil.example/x','\x1f//evil.example/x'. - Los caracteres de tabulación ASCII (
\t), salto de línea (\n) y retorno de carro (\r) se eliminan en cualquier parte de la entrada — p. ej.,'/\t/evil.example/x','/\n/evil.example/x','htt\tps://evil.example/x'.
Dado que estas URL no coinciden con /^(?:https?:)?\/\//i, xsrfInterceptorFn las trata como URL relativas del mismo origen y adjunta el encabezado X-XSRF-TOKEN, mientras que el navegador resuelve y envía la solicitud al host de origen cruzado (evil.example).
Nota: Angular 21.0.3+ y 22.x reemplazaron la expresión regular con una comparación de origen WHATWG new URL(req.url, locationOrigin) en #65683 y ya no estaban afectadas. Sin embargo, la rama LTS 20.3.x conservó la expresión regular hasta 20.3.34.
Impacto
La fuga del token elude la protección XSRF integrada de Angular en las versiones afectadas, lo que permite a un atacante capturar el encabezado X-XSRF-TOKEN válido del usuario si su servidor permite la solicitud y el encabezado personalizado a través de CORS. Una vez obtenido, el atacante puede realizar ataques de Cross-Site Request Forgery (CSRF) contra la sesión de la víctima.
Condiciones previas del ataque
- La aplicación Angular de la víctima debe tener la protección XSRF habilitada (habilitada por defecto en
HttpClient). - El atacante debe ser capaz de hacer que la aplicación envíe una solicitud HTTP que cambie el estado (p. ej.,
POST,PUT,DELETE,PATCH) a una URL que controle (como/\attacker.example/apio//attacker.example/api).
Parches
El problema se soluciona analizando y comparando el origen de la URL de la solicitud con el origen actual de la aplicación utilizando el constructor estándar URL (new URL(req.url, locationOrigin)).
21.0.3(y todas las versiones de22.x)20.3.34
Mitigaciones alternativas
Si no es posible actualizar inmediatamente a una versión corregida:
- Valide y normalice las URL de solicitudes salientes utilizando
new URL(url, window.location.origin)y verifique queparsedUrl.origin === window.location.originantes de pasar URL dinámicas a solicitudes mutables deHttpClient. - Evite pasar URL no confiables o controladas por el usuario a métodos mutables de
HttpClient.
Qué hacer
Actualice a las versiones corregidas:
21.0.3(y todas las versiones posteriores de22.x)20.3.34
La vulnerabilidad se resuelve analizando y comparando el origen de la URL de la solicitud con el origen actual de la aplicación mediante URL (new URL(req.url, locationOrigin)).
Si no puede actualizar de inmediato:
- Valide y normalice las URL salientes usando
new URL(url, window.location.origin)y verifique queparsedUrl.origin === window.location.originantes de enviar URL dinámicas a solicitudes de tipo mutable conHttpClient. - Evite pasar URL no confiables o provistas por el usuario a los métodos mutables de
HttpClient.
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Paquete de npm | @angular/common | >= 21.0.0, < 21.0.3, >= 20.0.0, < 20.3.34, <= 19.2.25 | 21.0.3, 20.3.34 |
Referencias
- 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
- Vector 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- Debilidad (CWE)
CWE-201, CWE-359- Plataforma
- npm
- Paquete
@angular/common- Publicada
- 20.10.2026
- Actualizado
- 20.10.2026 23:22
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-jfgx-762w-99vr - CC BY 4.0
Historial de vulnerabilidades: @angular/common
Todas las vulnerabilidades publicadas de este paquete (Paquete de npm), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 8
- Primera → última
- 11.2025 10.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Alta 6
- Media 2
Divulgaciones por año
- 2025: 1
- 2026: 7
-
@angular/common: Fuga del token XSRF por discrepancia en el análisis de URL en el cliente HTTP de Angular (Corrección incompleta para CVE-2025-66035) esta entrada
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.