复制步骤
"(《世界人权宣言》) 合并()
函数,用于将多个对象合并为一个新对象。 易受此高级漏洞影响.该命令可用于添加或修改 对象.原型
.
Javascript 允许合并对象的所有属性,包括神奇属性 __proto_
、构造函数和原型。具体来说,利用这个漏洞,可以合并一个 __proto_
属性,从而改变 对象.原型
并暴露漏洞。因为 对象.原型
由于所有 Javascript 对象都继承了这些属性,攻击者有很大的空间来影响代码执行。它可能导致远程代码执行,甚至通过触发 Javascript 异常拒绝服务。
阅读更多 GitHub.
解决问题
该漏洞存在于版本 1.7.9 之前的所有 AngularJS 版本中。对于那些无法升级的用户,HeroDevs Never-Ending Support for AngularJS 的客户可以访问与 Angular 1.5 兼容的固定版本 AngularJS。 易受攻击的目标是
- 网络服务器
- 应用服务器
- 网络浏览器。
学习与预防
有几种方法可以帮助防止此类攻击:
- 冻结原型。 使用
Object.freeze(Object.prototype)
这是一项严厉的行动,严重限制了计划的灵活性,但它可以防止此类攻击。 - 要求模式验证。 可以对 JSON 输入进行扫描("消毒"),使其不包括
__proto_
属性。 - 避免使用不安全的递归合并函数。 尽管有效,但这一建议的适用性有限,因为问题不在于递归合并函数的性质,而在于
合并()
函数,无论是否递归,盲目地将危险属性复制到对象.原型
. - 使用无原型的对象。 考虑
Object.create(null)
或代理对象或自定义类来创建不使用原型的对象。不继承自对象.原型
不易受污染。 - 使用数组和 map()。 而不是使用对象和
合并()
,使用数组和映射()
功能,以完全避免原型污染的可能性。
结论
1.7.9 中已修复了此漏洞,仍在使用 Angular 1.5 的 HeroDevs AngularJS 永无止境支持客户也可立即使用此漏洞。如果您希望获得支持,以避免代价高昂的潜在攻击、 立即联系 HeroDevs.
资源
漏洞详情
身份证
CVE-2019-10768
受影响的项目
AngularJS
受影响的版本
<1.7.9
出版日期
2019 年 11 月 19 日
≈ 固定日期
2019 年 11 月 1 日
严重性
关键
类别
跨站脚本
注册提醒
每当我们支持的开源软件修复了新的漏洞,我们就会发出警报。