GitHub Advisory Databaseに、serialize-javascriptのクロスサイトスクリプティング(XSS)の脆弱性「CVE-2026-115897」が掲載されています。7.1.3より前が対象で、出力をHTMLのscript要素内に埋め込む処理では、一定の条件で意図しない要素がページ内で有効になる恐れがあります。公表日は資料に記載されておらず、アドバイザリーは修正版7.1.3への更新を推奨しています。
関数の末尾が特定の文字列になると処理をすり抜ける
今回の問題は、値を文字列として出力するシリアライズ処理にあります。関数のソース文字列が「</script」で終わると、HTML内で特別な意味を持つ文字を無害化するエスケープ処理から漏れます。
その出力をscript要素内に埋め込んだ際、周囲の出力や後続の値との組み合わせによって、script要素が意図せず閉じられます。GitHubの情報では、挿入されたimg要素がページ内で有効になる例が確認されています。XSSは、Webページ内で意図しないスクリプトなどが動く問題です。
ただし、古い版を使っていれば、すべての入力でこの問題が起きるわけではありません。悪用には、攻撃者がシリアライズ対象となる関数のソース文字列を制御できる必要があります。GitHubは、文字列表現を返すtoString()を偽装する経路を挙げています。
7.1.3で修正、通常の関数や文字列とは切り分けを
7.1.3では、関数の末尾にある「</script」もエスケープ対象に追加されました。まずは同版への更新が対応の軸になります。
更新できない場合の対処は、攻撃者がソースやtoString()を操作できる関数を処理しないことです。更新までの間は、そのような関数が処理対象に入るかを開発担当者に確認する必要があります。
一方、通常の関数は末尾が「}」になるため、この問題の影響を受けないとされています。文字列を含む、関数以外の値も正しくエスケープされます。「外部から文字列を受け取る」という理由だけで、今回の悪用条件に当てはまるとは判断できません。
日本での提供は発表には書かれていません。自社への影響は、利用バージョンに加え、関数の扱いと出力の埋め込み先を確認して判断します。
影響する会社・しない会社
- 影響する: serialize-javascriptの7.1.3より前を使い、出力をscript要素内へ埋め込むアプリを運用する会社です。攻撃者が関数のソース文字列を制御できるか、確認が必要です。
- 影響する: 攻撃者がソースやtoString()を操作できる関数を処理対象にしている会社です。対象版を使っている場合は、更新か、該当する関数を処理しない対処を検討します。
- 影響しない: 修正版7.1.3を使う会社は、今回の対象バージョンには含まれません。
- 影響しない: 末尾が「}」となる通常の関数や、文字列を含む関数以外の値を処理するケースは、GitHubの説明ではこの欠陥の影響を受けません。他の処理経路がないかは別途確認します。