Node.js向け正規表現ライブラリre2jsで、明示的にLOOKBEHINDSを有効化した反復マッチングがCPUを過剰消費するHIGH脆弱性が確認された。影響は2.2.0以上2.8.7未満。開発元は2.8.7で修正し、外部入力を処理するサーバーでの更新と利用箇所の点検が求められる。
30秒でわかる / THE SIGNAL
Node.js向け正規表現ライブラリre2jsで、明示的にLOOKBEHINDSを有効化した反復マッチングがCPUを過剰消費するHIGH脆弱性が確認された。影響は2.2.0以上2.8.7未満。開発元は2.8.7で修正し、外部入力を処理するサーバーでの更新と利用箇所の点検が求められる。
線形時間を期待した正規表現処理が二次時間に
開発元のGHSA-gg6h-894w-4m9cによると、re2jsでオプトインの`LOOKBEHINDS`フラグを有効化し、`matcher().find()`のループ、`matchAll()`、`split()`、`matcher().replaceAll()`などの反復マッチングAPIを使うと、検索開始位置を適切に引き継げず、入力全体の再走査が繰り返される。結果として処理時間が入力長に対して二次的に増加し、外部から与えられたテキストを解析するNode.jsサーバーではサービス拒否につながる可能性がある。開発元勧告が掲載したベンチマークでは、16,000文字の入力で36.7〜38.7秒のCPU時間を要した。ただしこの数値は勧告の検証環境での結果であり、あらゆるシステムで同じ秒数になるとは限らない。
修正版2.8.7と運用上の対策
開発元勧告の影響範囲はre2js 2.2.0以上2.8.7未満で、修正版は2.8.7。公式リリースノートでも反復マッチング時のLOOKBEHINDS問題を修正したと明記している。該当ライブラリを利用するアプリケーションは2.8.7以上へ更新し、LOOKBEHINDSを有効化して利用者入力・アップロードログ・外部取得テキストを反復処理する経路を優先的に確認する。入力サイズ制限やCPU負荷の監視は補助的対策となる。公式重大度はHIGH、CVSS 7.5。