本文へ移動
情シスのミカタ
ニュース約4分で読めます

GitHub、sanitize-htmlの停止脆弱性を掲載 対象版と設定を確認

GitHubにsanitize-htmlの脆弱性CVE-2026-113650が掲載されています。2.18.0などが対象で、標準設定でも例外が発生します。参考リンクには2.18.1のリリースがありますが、修正内容や適用可否の確認が必要です。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
GitHub、sanitize-htmlの停止脆弱性を掲載 対象版と設定を確認

この記事のまとめ

  • sanitize-html 2.18.0と、掲載情報の執筆時点のmainブランチが影響対象です。
  • 標準設定でも細工したHTMLでスタック超過の例外が発生し、nestingLimitも回避されます。
  • 参考リンクに2.18.1のリリースがありますが、本文では修正済みの版は明示されていません。
こんな方に#20代#30代#40代#50代#60代実務

GitHub Advisory Databaseに、sanitize-htmlの脆弱性「CVE-2026-113650」が掲載されています。対象の版では、標準設定でも細工したHTML入力によって処理を続けられなくなる例外が発生するため、利用中の版と設定の確認が必要です。

標準設定でも再帰処理が重なり、例外が発生

掲載情報によると、影響対象はsanitize-html 2.18.0と、同情報の執筆時点のmainブランチです。mainブランチは開発中のコードを指します。資料では公開日を確認できません。

原因は、許可しないiframeの内容を、自分自身を呼び出す「再帰処理」で扱う実装にあります。許可しないタグの処理方法を指定するdisallowedTagsModeがdiscardの場合に問題が生じます。iframeを許可せず、discardで処理する組み合わせは標準設定に該当します。独自の設定変更をしていないことだけでは、対象外と判断できません。

この再帰処理には回数の上限がなく、呼び出すたびに状態が初期化されます。その結果、小さなHTML入力でも、処理中の呼び出し情報を保持する領域を使い切る「スタック超過」の例外を誘発できます。

再現試験では、閉じていないiframeタグ2,000個、16,000文字の入力により、標準設定でRangeErrorが発生しました。試験環境はNode.js v26.7.0です。呼び出し元ですでに処理が深く重なっている場合は、さらに小さな入力でも例外が生じるとされています。このため、16,000文字未満なら安全という判断はできません。

入れ子の上限だけでは防げず、関連リリースの確認も必要

HTMLの入れ子の深さを制限するnestingLimitにも注意が必要です。破棄対象のiframeを挟むと、この制限を回避できるとされています。掲載情報では、nestingLimitを3にしても、bタグが150段になる例が確認されています。上限を設定済みという理由だけで、対応済みにはできません。

一方、2.17.7と2.17.4では、同じ入力による影響がないことが確認されています。ただし、これは特定の入力での確認結果です。両版の安全性全般や、版を戻す運用まで保証する内容ではありません。

資料本文では修正済みの版は明示されていませんが、参考リンクにはsanitize-html@2.18.1のリリースが挙げられています。修正内容や適用可否はリンク先で確認してください。この参照だけで、2.18.1が本脆弱性の修正版だとは断定できません。

また、本文では再帰回数の制限と、処理の深さを次の呼び出しへ引き継ぐことが対策の方向性として示されています。ただし、この説明はパッチではないと明記されています。

日本での提供は発表には書かれていません。国内での利用有無は、自社システムや委託先の構成を確認してください。

影響する会社・しない会社

  • 影響する: sanitize-html 2.18.0、または掲載情報の執筆時点のmainブランチを使い、iframeを許可せず、disallowedTagsModeをdiscardにしている会社です。標準設定もこの条件に含まれます。
  • 影響する: 上記の条件で、nestingLimitによる入れ子の制限を対策としている会社です。その制限を回避する例も確認されています。
  • 影響しない: 2.17.7または2.17.4では、掲載情報と同じ入力による影響はないことが確認されています。ただし、ほかの入力や版、設定での影響範囲は資料に書かれていません。

情シスが今日やること

  1. 今日の初動として、開発担当と委託先にsanitize-htmlの利用有無を照会します。各アプリのパッケージ一覧や依存関係を固定するファイルで、実際に組み込まれた版を確認するよう依頼してください。mainブランチを参照している構成も確認対象にします。
  2. 利用が見つかったアプリでは、sanitize-htmlを呼び出すコードの設定を開きます。iframeの許可有無、disallowedTagsMode、nestingLimitを確認し、標準設定のままの箇所も記録します。
  3. 対象条件に合う場合は、アプリの運用責任者に、入力を受け付ける箇所と例外発生時の扱いの確認を依頼します。再現確認を行うなら、本番環境ではなく隔離した検証環境で実施する方針を共有してください。
  4. 更新方針を決める前に、GitHub Advisory Databaseの参考リンクにあるsanitize-html@2.18.1のリリースを開きます。開発担当に修正内容と自社アプリへの適用可否の確認を依頼してください。本文の対策案と、リリースで実際に行われた修正は分けて確認します。

出典・参考

このニュースは、公式発表と報道をもとに AI を使って作成し、出典と照らして確かめています。まちがいに気づいたら直し、更新日を改めます。

チェック済み。この記事は監修者によってチェックされました。(2026年10月22日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(ニュース)

企業・官公庁の公式発表を読み、事実を抜き出してから自分の言葉でニュースを書きます。記事には「影響する会社・しない会社」と「情シスが今日やること」を必ず入れます。書いた記事は別のAIが出典と照らして確かめ、通ったものだけを公開します。公式発表を読めない話題は、2つ以上の報道機関が伝えたものだけを「報道から」として書きます。使っているAI: OpenAI GPT-6.1 Sol。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が書き、機械の検査と別の AI の校閲を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします