IPBUF安全漏洞报告
English
CVE-2025-66412 CVSS 5.4 中危

Angular Template Compiler 存储型XSS漏洞 (CVE-2025-66412)

披露日期: 2025-12-01

漏洞信息

漏洞编号
CVE-2025-66412
漏洞类型
存储型XSS
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Angular

相关标签

存储型XSSAngularTemplate Compiler安全模式绕过Web安全前端框架漏洞javascript:协议滥用CVSS 5.4

漏洞概述

Angular是一个用于使用TypeScript/JavaScript构建移动和桌面Web应用程序的开发平台。该漏洞存在于Angular Template Compiler的内部安全模式中,由于安全模式不完整,攻击者可以绕过Angular内置的安全清理机制。具体来说,编译器未能将某些包含URL的属性(如可能包含javascript:协议的属性)正确分类为需要严格URL安全性验证的属性,从而允许攻击者注入恶意脚本代码。此漏洞为存储型XSS,恶意脚本会被永久存储在应用程序中,当其他用户访问受影响页面时自动执行,可能导致会话劫持、敏感数据窃取、恶意操作执行等严重后果。漏洞影响Angular 19.2.17之前、20.3.15之前和21.0.2之前的所有版本。

技术细节

漏洞根源在于Angular Template Compiler的安全模式(security schema)对URL-holding属性的处理不完善。在Angular的模板编译过程中,编译器使用安全模式来确定哪些属性需要特殊的安全处理。然而,当前的安全模式未能正确识别和分类某些可能包含javascript:协议的URL属性。攻击者可以利用模板绑定机制注入恶意的javascript: URL,当应用程序渲染包含该绑定的模板时,浏览器会执行其中的JavaScript代码。由于Angular的默认安全清理机制未能拦截此类恶意URL,攻击代码得以成功执行。攻击者需要具备低权限用户身份,并通过诱导其他用户访问包含恶意脚本的页面来触发攻击。该漏洞属于存储型XSS,恶意代码存储在服务器端,影响所有访问受影响页面的用户。

攻击链分析

STEP 1
步骤1
攻击者识别目标Angular应用程序中用户可控制的输入点,这些输入会被用于模板绑定或属性赋值
STEP 2
步骤2
攻击者构造包含javascript:协议的恶意URL作为输入值,绕过Angular Template Compiler的不完整安全模式
STEP 3
步骤3
恶意输入被存储到数据库或应用程序状态中(存储型XSS特性),如用户资料、评论或其他持久化数据
STEP 4
步骤4
当其他用户访问包含恶意数据的页面时,Angular渲染模板并输出包含javascript: URL的属性
STEP 5
步骤5
用户浏览器解析HTML时执行javascript:协议中的恶意代码,导致会话劫持、敏感数据泄露或恶意操作执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- Angular Template Compiler Stored XSS PoC --> <!-- This PoC demonstrates the bypass of Angular's security sanitization --> <!-- Affected attributes that could contain javascript: URLs --> <!-- Example 1: Using a malicious URL in template binding --> <element [attr.someAttribute]="userControlledValue"> <!-- Example 2: Malicious template injection --> <!-- If userControlledValue contains: javascript:alert(document.cookie) --> <!-- The browser will execute the JavaScript code --> <!-- Angular Component Example --> @Component({ selector: 'app-vulnerable', template: ` <!-- Unsafe attribute binding --> <a [href]="userInput">Click Here</a> <!-- If userInput = 'javascript:alert("XSS")' --> <!-- Angular's sanitizer fails to block this --> ` }) export class VulnerableComponent { // User-controlled input that could contain malicious URLs userInput: string = ''; } <!-- Exploitation Scenario --> <!-- 1. Attacker injects: javascript:alert(document.domain) --> <!-- 2. Stored in database or user profile --> <!-- 3. When victim views page, script executes --> <!-- 4. Attacker steals cookies, session tokens, etc. -->

影响范围

Angular < 19.2.17
Angular < 20.3.15
Angular < 21.0.2

防御指南

临时缓解措施
如果无法立即升级Angular版本,可采取以下临时缓解措施:1) 对所有用户输入实施严格的输入验证,拒绝包含javascript:或data:等危险协议的输入;2) 配置Content-Security-Policy响应头,禁止内联脚本执行和未知来源脚本加载;3) 对模板中使用的用户可控数据进行额外的服务端验证和清理;4) 使用Angular的DomSanitizer服务手动对不可信数据进行安全处理;5) 限制用户可控制的模板内容,避免将原始HTML或URL直接渲染到页面中。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表