概述
AngularJS 是用于开发动态网络应用程序的 JavaScript 框架。它允许您使用 HTML 作为模板语言,并允许您扩展 HTML 的语法,以便清晰简洁地表达应用程序的组件。
在 AngularJS 中发现了一个不正确的 sanitization 漏洞(CVE-2024-8372),攻击者可利用该漏洞绕过通常应用于[srcset]HTML 属性值的常见图片来源限制。这种绕过可能会进一步导致某种形式的内容欺骗。
根据OWASP:内容欺骗,也称为内容注入、"任意文本注入 "或虚拟污损,是一种通过网络应用程序中的注入漏洞针对用户的攻击。当应用程序不能正确处理用户提供的数据时,攻击者就可以向网络应用程序提供内容,通常是通过参数值,然后再反射给用户。这样,用户就会看到一个在受信域上下文中修改过的页面。
此问题会影响 AngularJS 1.3.0-rc.4 及更高版本。
详细信息
模块信息
- 产品AngularJS
- 受影响的软件包: angular
- 受影响的版本:>=1.3.0-rc.4
- GitHub 存储库: https://github.com/angular/angular.js
- 已发布软件包 : https://www.npmjs.com/package/angular
- 软件包管理器:npm
漏洞信息
在大于或等于 1.3.0-rc.4 版本的AngularJS主angular软件包中发现此中严重性漏洞。
ngSrcset、ngAttrSrcset和ngPropSrcset指令中用于净化图片源 URL 的逻辑存在漏洞,该漏洞允许绕过某些常见模式设置的限制,例如只允许来自特定域的图片。通过特制的输入,可以绕过消毒,显示来自任意域的图片,这也可能导致某种形式的内容欺骗。
注:
这个问题也会影响通过srcsetHTML 属性设置插值,但无论如何,AngularJS 都不建议这样做。
<img srcset="{{ 'some-malicious-input' }}" />
复制步骤
- 创建一个 AngularJS 应用程序,并配置$compileProvider以只允许来自特定域的图片。例如
angular
.module('app', [])
.config(['$compileProvider', $compileProvider => {
$compileProvider.imgSrcSanitizationTrustedUrlList(
// Only allow images from `angularjs.org`.
/^https:\/\/angularjs\.org\//);
}]);
- Use a specially-crafted value in the ngSrcset directive on an <img> element to bypass the domain restriction and show an image from a disallowed domain. For example:
<img ng-srcset="https://angularjs.org/favicon.ico xyz,https://angular.dev/favicon.ico" />
- 您甚至可以使用data:image/svg+xml格式显示任意 SVG 图像。例如
<img ng-srcset="https://angularjs.org/favicon.ico xyz,data:image/svg+xml;base64,..." />
概念验证
与上述代码类似的完整重现可在此处找到:
ngSrcsetsanitization bypass 漏洞 POC
缓解
AngularJS 项目已寿终正寝,不会再有任何更新来解决此问题。有关详细信息,请参阅此处。
受影响组件的用户应采用以下缓解措施之一:
- 从 AngularJS 迁移受影响的应用程序。
- 利用 HeroDevs 这样的商业支持合作伙伴提供 EOL 后的安全支持。
每当我们支持的开源软件修复了新的漏洞,我们就会发出警报。