
Angular 的服务器端渲染 (SSR) 实现中发现了一个重大漏洞,可能允许攻击者访问敏感的用户数据。
该缺陷源于 Angular 处理并发请求的方式,可能导致一个用户会话的数据泄露给另一个用户。
Angular 团队已针对该框架所有主动支持的版本发布了补丁来解决此问题。该漏洞影响使用@angular/platform-server、@angular/ssr和 的应用程序@nguniversal/common。
问题的核心在于服务器端渲染过程中 Angular 的依赖注入(DI)容器(称为“平台注入器”)内的竞争条件。
Angular SSR 漏洞
该注入器负责保存请求特定的信息。然而,它被存储为 JavaScript 模块范围内的全局变量。
这种设计选择意味着当同时处理多个请求时,它们可能会无意中共享或覆盖全局注入器的状态,从而导致不同会话之间的数据污染。
在现实世界中,此缺陷可能导致应用程序响应来自完全不同的用户的请求,提供包含一个用户数据的页面。
这可能会暴露呈现的页面或响应标头中包含的敏感信息或身份验证令牌。
具有网络访问权限的攻击者可以通过向服务器发送大量请求并检查响应中是否有来自其他用户活动会话的泄露数据来利用此漏洞。
该漏洞尤其令人担忧,因为它不需要特权地位;任何触发渲染响应的流量都可能被用来提取信息。
由于依赖于这种共享状态,包括bootstrapApplication、getPlatform和在内的多个 API被认定为存在漏洞。destroyPlatform
缓解措施
为了解决这个关键问题,Angular 团队已经为所有活跃发布线发布了补丁,包括版本 18、19、20 和 v21 预发布版。
该修复引入了一个必要的重大变化,特别是对于bootstrapApplication函数而言,它现在需要在服务器环境中传递明确的上下文以避免隐式状态共享。
为了简化更新过程,Angular 提供了一个自动化的原理图来处理所需的代码修改。建议开发人员通过运行ng update相应版本的命令来更新应用程序。
对于那些无法立即应用补丁的用户,有几种解决方法,例如禁用 SSR、从自定义引导函数中删除任何异步行为,或确保服务器构建明确禁用 Angular 的“JIT”模式。
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。
