Angular的服务器端渲染(SSR)实现中发现一个严重漏洞,可能导致攻击者访问敏感用户数据。该漏洞源于Angular处理并发请求的方式,可能造成一个用户会话的数据泄露给另一个用户。
Angular团队已为所有活跃支持版本发布补丁,修复了这一问题。漏洞影响使用@angular/platform-server
、@angular/ssr
和@nguniversal/common
的应用。
漏洞原理:依赖注入容器的竞争条件
问题核心在于Angular SSR过程中,依赖注入(DI)容器(称为“平台注入器”)存在竞争条件。该注入器负责存储请求特定信息,但被错误地作为JavaScript模块作用域的全局变量存储。
这种设计意味着当服务器同时处理多个请求时,可能意外共享或覆盖全局注入器的状态,导致不同会话间的数据污染。
在实际场景中,此漏洞可能导致应用向一个用户返回包含另一用户数据的页面,泄露渲染页面中或响应头中的敏感信息(如身份验证令牌)。攻击者只需通过网络发送大量请求并检查响应,即可从其他用户的活跃会话中提取泄露数据。由于无需特权位置,任何触发渲染响应的流量都可能被利用,因此风险尤为突出。
多个API(包括bootstrapApplication
、getPlatform
和destroyPlatform
)因依赖共享状态而被确认存在漏洞。
修复与缓解措施
Angular团队已为所有活跃版本(18、19、20及v21预发布版)发布补丁。修复引入了必要的破坏性变更,尤其是bootstrapApplication
函数——在服务器环境中需显式传入上下文,避免隐式状态共享。
为简化更新流程,Angular提供了自动 schematic 工具处理代码修改。开发者需通过运行对应版本的ng update
命令升级应用。
对于无法立即应用补丁的情况,可采用临时缓解方案:禁用SSR、移除自定义引导函数中的异步行为,或确保服务器构建显式禁用Angular的“JIT”模式。
发表评论
您还未登录,请先登录。
登录