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

DOMPurifyに勧告3件 IN_PLACEなどの設定は3.4.17へ

HTMLを無害化するJavaScriptの部品DOMPurifyで、10月22日に勧告が3件載りました。どれも3.4.17で直っています。テンプレートの式を消す設定とDOMを返す使い方の組み合わせ、元の要素をその場で書き換えるIN_PLACEで、悪意のあるスクリプトが残る恐れがあります。社内で作ったWebのアプリで確かめることをまとめます。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
DOMPurifyに勧告3件 IN_PLACEなどの設定は3.4.17へ

この記事のまとめ

  • HTMLの無害化に使うDOMPurifyの勧告が、GitHubの勧告のデータベースに10月22日(日本時間23日)に3件載りました。CriticalとHighとLowが1件ずつで、どれも10月12日に出た3.4.17で直っています。
  • 危ないのは特定の設定のときです。テンプレートの式を消すSAFE_FOR_TEMPLATESと、DOMを返す使い方を組み合わせたときと、元の要素をその場で書き換えるIN_PLACEで、フックがほかの要素を外したときです。
  • IN_PLACEの使い方の勧告は、8月から何度も出ています。社内のアプリでDOMPurifyの版と設定を確かめ、3.4.17以降に上げます。
こんな方に#30代#40代#50代実務

Webのアプリで、利用者が入れたHTMLから危ないスクリプトを取り除く(無害化する)ために広く使われるJavaScriptの部品「DOMPurify」で、勧告が3件出ました。GitHubの勧告のデータベースに載ったのは10月22日(協定世界時)です。深刻度はCritical、High、Lowが1件ずつで、どれも10月12日に出た3.4.17で直っています。

どの勧告も、DOMPurifyの特定の設定や使い方のときに起きるものです。社内で作ったWebのアプリでDOMPurifyを使っているなら、版と設定を確かめます。

GitHubのDOMPurify 3.4.17のリリースの画面。IN_PLACE、SAFE_FOR_TEMPLATES、シャドウルートの問題を直したこと、IN_PLACEでフックやカスタム要素が触れた要素の扱いを直したこと、XHTMLの扱いのときのSMILのattributeNameの確かめを直したこと、名前空間などの細かい場合を固めたこと、互換性の確かめの試験を足したこと、READMEでIN_PLACEの危険をはっきり書いたこと、依存の部品を更新したことが英語で書かれている
DOMPurify 3.4.17のリリースノート(10月12日)出典: cure53「DOMPurify 3.4.17」(GitHub)(引用)

3件の中身

勧告 深刻度 起きる条件 対象の版
GHSA-cg2g-xh64-v4q7 Critical(CVSS 4.0で9.2) テンプレートの式を消す設定(SAFE_FOR_TEMPLATES)と、DOMを返す使い方(RETURN_DOM・RETURN_DOM_FRAGMENT・IN_PLACE)を組み合わせたとき。シャドウルートの中に分けて置いたテンプレートの式(二重の波かっこで囲む式など)が、無害化のあとにつながって残り、後ろのテンプレートの仕組みが実行してしまう 3.4.4以上3.4.16以下
GHSA-mrv2-3pqr-j5jr High(CVSS 4.0で7.6) 元の要素をその場で書き換えるIN_PLACEで、フックが処理中の要素の親や、まだ見ていない兄弟の要素を外したとき。外れた部分のイベントの処理(画像の読み込みの失敗のときに動く処理など)が残り、無害化のあとに動いてしまう。3.4.16の修正(GHSA-p98j-92pf-mc4p)が足りなかったもの 3.4.16以下
GHSA-c6gr-qvv4-5v3f Low XHTMLの扱い(PARSER_MEDIA_TYPEの指定)のときに、SMILの属性の確かめが飛ばされる 3.4.16以下

3.4.17のリリースノートも、IN_PLACEとSAFE_FOR_TEMPLATESとシャドウルートの問題、IN_PLACEでフックなどが触れた要素の扱い、XHTMLのときのSMILの属性の確かめを直したとしています。あわせて、READMEでIN_PLACEの使い方の危険をはっきり書いたとしています。

IN_PLACEの勧告は続いている

GitHubの勧告のデータベースでは、IN_PLACEの使い方に関わるDOMPurifyの勧告が、8月7日、9月30日、10月5日、そして今回と続いています。どれも、フックで要素を外したときなどに、無害化しきれない部分が残る種類です。

IN_PLACEは、文字列ではなく、すでに作ったDOMの要素をその場で無害化する使い方です。便利な反面、無害化している間に画像の読み込みなどが進んでいると、取りこぼしが起きやすくなります。新しく作るアプリでは、文字列を渡して文字列を受け取る、ふつうの使い方を選ぶほうが安全です(当社の見立て)。

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

  • 影響する: 社内で作ったWebのアプリや、委託して作ったアプリでDOMPurifyを使っている会社です。とくに、SAFE_FOR_TEMPLATESと、RETURN_DOM・RETURN_DOM_FRAGMENT・IN_PLACEのどれかを組み合わせているもの、IN_PLACEでフックを使っているものです。
  • 影響する: 利用者が書いたHTML(問い合わせの本文、掲示板、メールの表示など)を、Webの画面に出す仕組みを持つ会社です。
  • 影響しない: DOMPurifyを使っていない会社と、文字列を渡して文字列を受け取るふつうの使い方だけをしている場合は、CriticalとHighの2件の条件に当たりません。ただし、3.4.17に上げておくのが確実です。

情シスが今日やること

  1. 社内のアプリや委託先のアプリで、DOMPurifyを使っているかを確かめます。開発の担当に、npm ls dompurify などで版を見てもらいます。部品の一覧(SBOM)があれば、そこで探します。
  2. 3.4.17より前の版なら、3.4.17以降に上げる計画を立てます。2系を使っている場合は、3系へ移る計画が要ります。
  3. 使い方を確かめます。SAFE_FOR_TEMPLATES、RETURN_DOM、RETURN_DOM_FRAGMENT、IN_PLACE、フック(addHook)を使っていれば、優先して上げます。
  4. 委託して作ったアプリは、保守の会社に、DOMPurifyの版と、今回の3件への対応の予定を問い合わせます。

よくある質問

QDOMPurifyをふつうに使っているだけでも危ないですか?

A今回のCriticalとHighの2件は、特定の設定のときに起きます。CriticalはSAFE_FOR_TEMPLATESとRETURN_DOM・RETURN_DOM_FRAGMENT・IN_PLACEのどれかを組み合わせたとき、HighはIN_PLACEで、フックが処理中の要素の親やまだ見ていない兄弟の要素を外したときです。文字列を受け取って文字列を返す、ふつうの使い方は、この2件の条件に当たりません。ただ、版を上げておくのが確実です。

Q2系の古い版は直りますか?

A直った版は3.4.17です。Highの勧告は、2.5.8でも同じ問題を確かめたとしていますが、2系の修正版は示されていません。

出典・参考

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

執筆

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

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

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

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

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

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