CVE-2024-8372漏洞

内容欺骗
影响
AngularJS
>=1.3.0-rc.4
AngularJS
未找到项目。
感叹号圆圈图标
补丁可用
HeroDevs 提供的 Never-Ending Support (NES) 版本已修复此漏洞。

概述

AngularJS 是用于开发动态网络应用程序的 JavaScript 框架。它允许您使用 HTML 作为模板语言,并允许您扩展 HTML 的语法,以便清晰简洁地表达应用程序的组件。

在 AngularJS 中发现了一个不正确的 sanitization 漏洞(CVE-2024-8372),攻击者可利用该漏洞绕过通常应用于[srcset]HTML 属性值的常见图片来源限制。这种绕过可能会进一步导致某种形式的内容欺骗。

根据OWASP:内容欺骗,也称为内容注入、"任意文本注入 "或虚拟污损,是一种通过网络应用程序中的注入漏洞针对用户的攻击。当应用程序不能正确处理用户提供的数据时,攻击者就可以向网络应用程序提供内容,通常是通过参数值,然后再反射给用户。这样,用户就会看到一个在受信域上下文中修改过的页面。

此问题会影响 AngularJS 1.3.0-rc.4 及更高版本。

详细信息

模块信息

漏洞信息

在大于或等于 1.3.0-rc.4 版本的AngularJSangular软件包中发现此中严重性漏洞。

ngSrcsetngAttrSrcsetngPropSrcset指令中用于净化图片源 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 后的安全支持。

漏洞详情
身份证
CVE-2024-8372漏洞
受影响的项目
AngularJS
受影响的版本
>=1.3.0-rc.4
出版日期
2024 年 9 月 9 日
≈ 固定日期
2024 年 5 月 21 日
固定在
严重性
中型
类别
内容欺骗