注目★★★★★GitHub Advisory
league/commonmark、重複脚注でサービス拒否—10KB で 62MB 応答生成
30秒で把握
- 1league/commonmark の Footnote 拡張に重複脚注による DoS 脆弱性(GHSA-jfm3-95jq-q3rf)確認
- 210KB リクエストが 62MB レスポンス・440MB メモリ消費に拡大・デフォルト PHP ワーカーの OOM 引き起こし
- 3バージョン 1.5.0 以降すべて対象・アップグレード不可の場合は Footnote 拡張無効化で対策
要約
league/commonmark の Footnote 拡張機能に、重複した脚注定義を処理する際に計算量が二次関数的に増加する脆弱性が存在する。同一ラベルの脚注参照と定義が N 個ずつある場合、バックリファレンスノードが N² 個生成され、出力サイズ・解析時間・メモリ使用量がすべて O(N²) に達する。10KB のリクエストで 62MB の HTML レスポンス・3 秒の CPU・440MB のピークメモリを消費でき、デフォルト 128MB の PHP ワーカーを OOM 殺害してサービス拒否を引き起こす。バージョン 1.5.0(2020 年 5 月)以降のすべてのリリース(2.8.x まで)が対象で、認証なしで攻撃可能。可用性への影響のみ。
あなたへの影響
Footnote 拡張は opt-in だが GFM スタイル実装の定番機能。
推奨:未認証の DoS 攻撃を受ける可能性があるため、本機能を利用するサービスチームは直ちにアップグレード可能性を評価し、難しい場合は Footnote 拡張の無効化・入力サイズ制限の追加を検討する必要がある。