Modern Frontend CVEs

対象CVE: CVE-2026-48801

【緊急】`markdown-it`利用者必見!`LinkifyIt`に指数関数的処理時間のDoS脆弱性(CVE-2026-48801)

人気のJavaScriptライブラリ`LinkifyIt`(`markdown-it`で利用)に、特定の文字列入力でサーバーのCPUを長時間占有し、サービス停止を引き起こすDoS脆弱性が発見されました。ユーザー生成コンテンツを扱うWebサービスは、早急な対策が必要です。

はじめに:`LinkifyIt`とは、そしてなぜ重要か

日本のフロントエンドエンジニアの皆さん、こんにちは。今回は、Webサービスを開発する上で見過ごせない重要な脆弱性について解説します。特に、ユーザーが投稿するテキストコンテンツを扱うアプリケーションでは、注意が必要です。

`LinkifyIt`は、テキスト内のURLやメールアドレスを自動的にリンク化する(いわゆる「リンク化」)ための軽量なJavaScriptライブラリです。この機能は、Markdownパーサーである`markdown-it`の`linkify:true`オプションを有効にした際など、多くのWebアプリケーションで間接的に利用されています。ユーザーが入力したテキストに自動でリンクを貼って利便性を高める一方で、その処理方法によっては思わぬ落とし穴があることが判明しました。

脆弱性の概要:指数関数的に増大する処理時間

今回報告された脆弱性 (GHSA-22p9-wv53-3rq4 / CVE-2026-48801) は、`LinkifyIt`ライブラリの`match`関数に存在します。この脆弱性を悪用されると、特定の形式を持つ巧妙な文字列が入力された際に、サーバーのCPUが長時間占有され、結果としてWebサービスが停止してしまう、いわゆる「サービス運用妨害(DoS攻撃)」が可能になります。

問題の根源は、`LinkifyIt.prototype.match`関数内のリンク検出ロジックにあります。特に、多くの曖昧な形式のリンクやメールアドレス(例: `a@b.com`のような文字列の繰り返し)を含む入力が与えられた場合、その処理時間が入力の長さに比例して「指数関数的に」増加します。具体的には、入力が2倍になると処理時間が4倍になるなど、線形時間をはるかに超えるペースで処理コストが跳ね上がります。

技術的な詳細:非効率な正規表現処理

この脆弱性は、内部で文字列を分割し、その分割された文字列全体に対して複数回正規表現検索を繰り返すという、構造的な問題に起因します。各部分文字列を処理するたびに、同じ正規表現が何度も実行されるため、入力データの長さが増すにつれて処理コストが急激に膨れ上がります。

具体例として、わずか64KBの特定の文字列で約2.5秒、128KBで約10秒ものCPU時間を消費することが確認されています。これは、本来であればミリ秒単位で処理されるべき内容が、数秒から数十秒、さらにはそれ以上の時間を要してしまうことを意味します。単一の悪意あるリクエストでサーバーのワーカープロセスが長時間ブロックされれば、Webサービス全体の応答性が著しく低下したり、最悪の場合、サービスが完全に停止する可能性があります。

影響を受けるサービスとバージョン

この脆弱性は、ユーザーからの信頼できない入力(ユーザー生成コンテンツ、UGC)をMarkdown形式などでレンダリングするWebサービスに大きな影響を与えます。具体的には、以下のようなサービスが該当します。

悪意のあるユーザーが特定のパターンを持つ短い文字列を投稿するだけで、サービスの可用性に深刻な影響を与えることができます。情報漏洩やデータ改ざんのリスクはありませんが、サービスの停止はビジネスに甚大な損害をもたらす可能性があります。

この問題は、`linkify-it`の全てのバージョン(2014年の初回コミットからv5.0.0まで)に存在します。

推奨される対策:ライブラリのアップデート

最も効果的な対策は、`LinkifyIt`ライブラリのアルゴリズム的な修正が施されたバージョンへアップデートすることです。

具体的には、現在の非効率なループ処理を、正規表現の`g`(グローバル)フラグと`lastIndex`プロパティを適切に使用する形に書き換えることで、処理コストを入力の長さに比例する線形時間(O(N))に改善できます。これにより、各文字が正規表現によって一度だけスキャンされるようになり、処理の効率が大幅に向上します。

`markdown-it`を介して`LinkifyIt`を利用している場合は、修正された`linkify-it`が組み込まれた`markdown-it`のバージョンに更新することが必要です。具体的なバージョンについては、各ライブラリのリリースノートや公式アナウンスを確認してください。

まとめ

今回の`LinkifyIt`のDoS脆弱性は、ユーザー生成コンテンツを扱うフロントエンド、そしてそれを処理するバックエンドにとって無視できない問題です。特に、`markdown-it`を広く利用している日本の多くのサービスで影響を受ける可能性があります。

サービスの安定稼働を維持するためにも、ご自身のプロジェクトで使用しているライブラリのバージョンを確認し、速やかにアップデートを適用することをお勧めします。常に最新の脆弱性情報をキャッチアップし、安全なWebアプリケーション開発を心がけましょう。

← ブログ一覧に戻る