发布于 2019-05-27 12:14:36
以下是几个被挤成一个的问题,因此我将试着逐一回答每个问题:
我不知道您有多少JavaScript知识,所以我将尽量保持通用。JavaScript广泛使用原型来实现对象继承。基本上,您在原型中写入的内容将在对象实例中。Mozilla文档会比我更好地解释这个问题。
根据关于HackerOne的报告,如果攻击者能够将自己的数据插入目录中,他们就可以向对象中添加自己的代码。下面的PoC演示了这一点:
var _= require('lodash');
var malicious_payload = '{"__proto__":{"oops":"It works !"}}';
var a = {};
console.log("Before : " + a.oops);
_.merge({}, JSON.parse(malicious_payload));
console.log("After : " + a.oops);如果运行这段代码,您可以看到a被修改了,即使它从未被直接写入。
那么这对您的应用程序有什么影响呢?这取决于你的代码。没有“无话可说”的答案。在某些情况下,它可能是拒绝服务,而在另一些情况下,则是远程代码执行。
例如,可以用文字字符串替换函数toString()。试图调用字符串将导致错误,从而导致拒绝服务。
要么尽快更新您的存档版本,要么自己应用手动支持补丁程序。这可能不容易,但这是绝对必要的。
如果您的应用程序从来不处理任何用户输入,那么您可能会将更新推迟到可以的时候,但是它应该在您的优先级列表中很高。
https://security.stackexchange.com/questions/210851
复制相似问题