GitHubの勧告で、HTMLから不要な要素などを取り除くsanitize-htmlに、無害化を回避する問題が報告されています。識別番号はCVE-2026-113654で、特定の設定では、本来のページには現れない要素を処理結果に出力する可能性があります。公表日は資料に記載がなく、まず自社の利用有無と設定を確認する必要があります。
noscriptを追加した設定が確認の起点
sanitize-htmlには、指定した要素の中身を破棄するための設定「nonTextTags」があります。今回の勧告の再現例では、この設定に「noscript」を追加し、画像要素を許可しています。nonTextTagsの既定値にnoscriptは含まれていません。
問題は、中身をどこまで破棄するかの判定にあります。sanitize-htmlは、HTMLを解析するhtmlparser2の終了イベントを使っています。しかし、タグが暗黙に閉じられたことを示す「isImplied」という印を終了処理で参照していません。
勧告によると、noscriptの内側で祖先に当たる要素を閉じると、破棄する範囲が途中で終わります。その後の部分は通常の本文として処理されます。一方、スクリプトが有効なブラウザーは、noscriptの中身を生のテキストとして扱います。この解釈の違いにより、無害化処理が元のページには現れない要素を出力するとしています。
勧告は、暗黙の終了イベントでは破棄範囲を終了しない修正を提案しています。ただし、提示された資料には影響を受けるバージョン、修正版、修正の公開状況は書かれていません。修正案の記載だけで、更新により解消済みと判断しないことが重要です。日本での提供は発表には書かれていません。
影響する会社・しない会社
- 影響する: sanitize-htmlを使い、nonTextTagsにnoscriptを追加し、画像要素を許可している会社です。勧告の再現例と設定が一致するため、開発担当による確認が必要です。
- 影響の有無を要確認: sanitize-htmlを含むシステムで、利用設定をまだ確認できていない会社です。外部に開発・保守を委託している場合は、委託先にnonTextTagsの内容と許可要素を確認してください。外部委託していること自体は影響条件ではなく、再現例以外の設定にどこまで影響するかは、発表には書かれていません。
- 影響しない: 自社システムや組み込まれた部品でsanitize-htmlを使っていないことを確認できた会社は、この勧告の対象ではありません。
既定値にnoscriptがないことと、システム全体の安全性は分けて判断します。利用しているという理由だけで全システムを影響ありとせず、逆に既定値という理由だけで確認を終えないようにします。
情シスが今日やること
以下は、今回の勧告を受けた確認手順の提案です。発表側が指定した対応期限ではありません。
- 本日中に利用有無を調べます。 開発担当には、ソースコード管理画面で依存関係の定義ファイルと、導入版を固定するファイルを確認してもらいます。sanitize-htmlの有無、導入版、利用システムを一覧にします。委託システムは保守窓口に同じ確認を依頼します。
- 利用が見つかったら設定を確認します。 ソースコード上のsanitize-htmlの呼び出し箇所で、nonTextTagsへのnoscript追加と、画像要素の許可設定を調べます。設定を共通化している場合は、その設定元も確認し、未確認の箇所を残さないよう記録します。
- 再現例と一致する場合は開発責任者に連絡します。 CVE番号と対象システム、該当設定を伝え、検証環境で処理結果を確かめる担当者と期限を決めます。設定を変更する場合は、必要な表示や入力処理への影響も併せて確認します。
- 更新判断の前に修正状況を確認します。 GitHub Advisory Databaseの該当勧告で対象版や修正版の追記を確認します。資料には安全な更新先が示されていないため、版番号だけで対応完了とせず、確認結果と次回確認日を管理台帳に残します。