serialize-javascriptにXSS修正―関数の文字列表現を外部入力で変えられる場合に注意
7.1.3未満が対象ですが、通常の文字列や関数すべてで成立する不備ではありません。関数の文字列化からHTML出力までの経路を確認します。
修正の公表日:2026-10-22 / 公開: / 更新: / 最終確認:
Codingholic 編集部 · 約3分
JavaScriptの値を文字列へ変換し、HTMLなどへ埋め込むライブラリserialize-javascriptに、XSSの修正が公開されています。Yahooは2026年10月22日、CVE-2026-115897の影響を7.1.3未満、修正版を7.1.3と公表しました。
通常の文字列ではなく、関数の文字列表現が条件
成立には、攻撃者がシリアライズ対象の関数のソース文字列を制御できることが必要です。公式告知は、関数を文字列へ変換するtoString()を偽装するケースを挙げています。通常の関数や、終了タグを含む一般の文字列はこの問題の対象ではありません。
提供元の深刻度はLowです。パッケージが依存関係に存在するだけで、利用中のサイトでXSSを起こせるとは判断できません。外部入力がどの値になり、どの出力へ渡るかを調べます。
値ごとの処理では防げなかったタグの組み立て
関数の文字列表現がscript要素の終了タグ名で途切れた場合、従来は末尾の判定を通り抜けることがありました。周囲に出力される空白や後続の値と組み合わさると、HTML上でタグとして解釈されます。
その出力をscript要素の中に埋め込むと、意図しない位置で要素が終わり、続く内容がHTMLとして動作する可能性があります。7.1.3は関数の末尾にある該当パターンもエスケープする修正です。
依存関係とHTML出力を一緒に確認する
編集部の推奨手順は、npm ls serialize-javascriptなどで直接・間接の依存を確認し、導入元の互換性を確かめて7.1.3以降へ更新することです。古い複製が残っていないか、ロックファイルと再インストール後の依存ツリーを照合します。
そのうえで、関数を含む値がHTMLへ埋め込まれる箇所を検証環境で確認し、通常画面の描画と、不正な入力から意図しないHTMLが生成されないことをテストします。更新までの公式回避策は、攻撃者がソース文字列やtoString()へ影響できる関数をシリアライズしないことです。
出典と編集について
Yahoo:serialize-javascriptにXSS修正の公式情報 ↗出典の報告と、編集部が提案する点検・対策を分けて記載しています。本記事の点検項目は個別環境の診断結果ではありません。