CVE-2019-10768

跨站脚本
影响
AngularJS
<1.7.9
AngularJS
未找到项目。
感叹号圆圈图标
补丁可用
HeroDevs 提供的 Never-Ending Support (NES) 版本已修复此漏洞。

复制步骤

"(《世界人权宣言》) 合并() 函数,用于将多个对象合并为一个新对象。 易受此高级漏洞影响.该命令可用于添加或修改 对象.原型.

Javascript 允许合并对象的所有属性,包括神奇属性 __proto_、构造函数和原型。具体来说,利用这个漏洞,可以合并一个 __proto_ 属性,从而改变 对象.原型 并暴露漏洞。因为 对象.原型 由于所有 Javascript 对象都继承了这些属性,攻击者有很大的空间来影响代码执行。它可能导致远程代码执行,甚至通过触发 Javascript 异常拒绝服务。

阅读更多 GitHub.

解决问题

该漏洞存在于版本 1.7.9 之前的所有 AngularJS 版本中。对于那些无法升级的用户,HeroDevs Never-Ending Support for AngularJS 的客户可以访问与 Angular 1.5 兼容的固定版本 AngularJS。 易受攻击的目标是

  • 网络服务器
  • 应用服务器
  • 网络浏览器。

学习与预防

有几种方法可以帮助防止此类攻击:

  1. 冻结原型。 使用 Object.freeze(Object.prototype) 这是一项严厉的行动,严重限制了计划的灵活性,但它可以防止此类攻击。
  2. 要求模式验证。  可以对 JSON 输入进行扫描("消毒"),使其不包括 __proto_ 属性。
  3. 避免使用不安全的递归合并函数。 尽管有效,但这一建议的适用性有限,因为问题不在于递归合并函数的性质,而在于 合并() 函数,无论是否递归,盲目地将危险属性复制到 对象.原型.
  4. 使用无原型的对象。 考虑 Object.create(null) 或代理对象或自定义类来创建不使用原型的对象。不继承自 对象.原型 不易受污染。
  5. 使用数组和 map()。 而不是使用对象和 合并(),使用数组和 映射() 功能,以完全避免原型污染的可能性。

结论

1.7.9 中已修复了此漏洞,仍在使用 Angular 1.5 的 HeroDevs AngularJS 永无止境支持客户也可立即使用此漏洞。如果您希望获得支持,以避免代价高昂的潜在攻击、 立即联系 HeroDevs.

资源

NIST BDSA-2019-10768条目

漏洞详情
身份证
CVE-2019-10768
受影响的项目
AngularJS
受影响的版本
<1.7.9
出版日期
2019 年 11 月 19 日
≈ 固定日期
2019 年 11 月 1 日
固定在
严重性
关键
类别
跨站脚本