概要
JavaScriptのユーティリティライブラリであるUnderscore.jsにおいて、_.flattenおよび_.isEqual関数に深さ制限のない再帰処理が存在する脆弱性(CVE-2026-27601)が報告されています。この脆弱性が悪用された場合、スタックオーバーフローが発生し、結果としてサービス拒否(DoS)状態に陥る可能性があります。
影響を受けるのはUnderscore.jsのバージョン1.13.8未満であり、この問題はバージョン1.13.8で修正されています。
影響範囲
Underscore.jsバージョン1.13.8未満を使用しているウェブアプリケーションやシステムが影響を受ける可能性があります。特に、外部からの信頼できない入力を処理し、それを_.flattenまたは_.isEqual関数に渡すような実装をしている場合に注意が必要です。
想定される影響
- サービス拒否(DoS): 攻撃者が細工したデータ構造を送信することで、アプリケーションがスタックオーバーフローを起こし、応答不能になる可能性があります。これにより、正規のユーザーがサービスを利用できなくなる事態が想定されます。
攻撃成立条件・悪用状況
この脆弱性の悪用には、以下の特定の条件が満たされる必要があります。
共通条件
- 信頼できない入力(例:
JSON.parseで生成されたデータ)が、深さ制限なしに再帰的なデータ構造を作成できること。 - 作成されたデータ構造が
_.flattenまたは_.isEqual関数に渡されること。
_.flattenの場合
- リモートクライアントが、すべてのレベルが配列で構成されるデータ構造を準備できること。
- かつ、
_.flatten関数の第2引数として深さ制限が指定されていないこと。
_.isEqualの場合
- 同じリモートクライアントから送信された2つの異なるデータ構造が、
_.isEqual関数を使用して比較されるコードパスが存在すること。 - 例: クライアントが送信したデータがデータベースに保存され、後で同じクライアントが送信した別のデータ構造と比較される場合、または単一のリクエストのデータが2回パースされ、非同一だが同等のデータ構造が作成されて比較される場合。
現在のところ、この脆弱性の具体的な悪用状況については、この情報からは不明です。
推奨対策
優先度:高(今すぐできる対策)
- Underscore.jsのアップデート: Underscore.jsをバージョン1.13.8以降にアップデートしてください。このバージョンで脆弱性が修正されています。
優先度:中(中長期的な対策)
- 入力値の検証とサニタイズ: 外部からの入力データに対して、深さ制限を含む厳格な検証とサニタイズを実装し、不正な再帰的データ構造が生成されないようにしてください。
- 深さ制限の適用:
_.flatten関数を使用する際には、可能な限り第2引数で明示的に深さ制限を指定することを検討してください。
一時的な緩和策
現時点では、Underscore.jsのアップデートが最も効果的な対策であるため、一時的な緩和策として推奨される具体的な方法はありません。可能であれば、速やかにアップデートを実施してください。
確認方法
ご自身のシステムで使用しているUnderscore.jsのバージョンを確認してください。プロジェクトの依存関係ファイル(例: package.json)や、アプリケーションのバンドルファイル内でUnderscore.jsのバージョン情報を確認できます。バージョンが1.13.8未満である場合は、脆弱性の影響を受ける可能性があります。
参考情報
詳細については、以下の情報を参照してください。