Angular XSRF令牌因协议相对URL漏洞而泄露,严重威胁Web应用安全

本文详细分析了Angular框架中一个高危安全漏洞CVE-2025-66035,该漏洞导致其内置的XSRF防护机制被完全绕过,攻击者可借此窃取用户的XSRF令牌并发动跨站请求伪造攻击。

漏洞概述

CVE-2025-66035 是一个影响Angular框架的高严重性漏洞。该漏洞存在于Angular的HTTP客户端(HttpClient)中,属于一种逻辑缺陷导致的凭证泄露。当应用程序使用以双斜杠(//)开头的协议相对URL时,Angular会错误地将其识别为同源请求,从而将本应保密的跨站请求伪造(XSRF)令牌添加到请求头中,并发送到攻击者控制的域名,导致令牌泄露。

影响范围

该漏洞影响了以下版本的 @angular/common npm包:

  • 版本 >= 21.0.0-next.0 且 < 21.0.1
  • 版本 >= 20.0.0-next.0 且 < 20.3.14
  • 版本 < 19.2.16

漏洞详情与影响

Angular的HttpClient内置了XSRF保护机制,其工作原理是通过检查请求URL是否以协议(http://https://)开头来判断请求是否为跨域请求。如果是跨域请求,则不会自动添加X-XSRF-TOKEN头。

然而,当请求URL以协议相对URL(//attacker.com)开头时,该机制存在缺陷,会将其误判为同源请求。因此,系统会将用户的XSRF令牌自动添加到请求的 X-XSRF-TOKEN 头部,并发送给攻击者控制的服务器。

攻击后果

  • 完全绕过CSRF保护:令牌泄露使得Angular内置的CSRF防护机制失效。
  • 会话劫持:攻击者获取有效的XSRF令牌后,即可在受害者会话的上下文中发起任意跨站请求伪造(CSRF)攻击,执行非授权操作。

攻击前提条件

  1. 受害者的Angular应用必须启用了XSRF保护。
  2. 攻击者能够诱使该应用向一个他们控制的协议相对URL(例如 //attacker.com)发起一个会改变状态的HTTP请求(例如POST请求)。

解决方案

已修复版本: 用户应立即升级到以下已修复的安全版本:

  • 19.2.16
  • 20.3.14
  • 21.0.1

临时规避措施: 在无法立即升级的情况下,开发者应避免在HttpClient请求中使用协议相对URL(以//开头的URL)。所有与后端通信的URL应硬编码为相对路径(以单个/开头)或完全限定的、可信的绝对URL。

技术参考

安全评分与分类

  • CVSS v4.0 总体评分:7.7(高危)
  • CVSS向量CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N
  • 相关弱点(CWE)
    • CWE-201:在发送的数据中插入敏感信息
    • CWE-359:将私人个人信息暴露给未授权参与者
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计