GitHub Advisory Databaseに、Goパッケージgithub.com/klauspost/compress/s2の脆弱性「CVE-2026-63209」が掲載されています。利用者が提供した辞書を受け入れるアプリでは、条件がそろうとプロセスが停止し、サービス拒否につながります。掲載日は資料に記載されていません。
対象はNewDictを備えるv1.18.6以下
影響を受けるのは、v1.18.6以下のうち、NewDict関数を備える全バージョンです。GitHub掲載情報は深刻度をHighとし、脆弱性の深刻度を示すCVSS v3.1スコアを7.5と評価しています。
攻撃が成立するには、アプリが利用者提供のS2辞書をs2.NewDict()で受け入れている必要があります。さらに、その辞書を使って32バイト以上のデータにDict.Encode()を呼び出すことも条件です。パッケージの名前が見つかっただけではなく、辞書の受け取り方と、その後の処理まで確認する必要があります。
日本での提供は発表には書かれていません。国内で使われているアプリや製品の一覧も資料にはなく、自社の利用状況と照合する必要があります。
整数の変換で検証をすり抜ける
問題の起点は、s2.NewDict()で起きる符号付き整数オーバーフローです。これは、整数が扱える範囲を超え、値を正しく扱えなくなる問題です。
辞書内のrepeat値が、符号付き64ビット整数の上限であるMaxInt64を超えると、整数変換によって負数になります。その結果、長さの上限を確認する検証をすり抜けます。その後にDict.Encode()を呼び出すと、範囲外のメモリにアクセスし、メモリアクセスの異常を示すSIGSEGVでプロセスが停止します。
資料には修正案として、int型へ変換する前に、符号なし整数のuvarint値がMaxInt64を超えないか検証する方法が示されています。ただし、修正済みバージョンや公開時期は記載されていません。「対象がv1.18.6以下」という情報だけで、それより新しい版を修正版と判断しないことが重要です。
影響する会社・しない会社
- 影響する: 対象バージョンのs2を使い、利用者提供のS2辞書を
s2.NewDict()で受け入れ、その辞書で32バイト以上のデータにDict.Encode()を呼び出すアプリを運用する会社です。
- 影響する: 対象バージョンは確認できても、辞書の入力元や呼び出し条件が未確認の会社は、調査対象です。版の一致だけでは攻撃条件を満たすか判断できません。
- 影響しない: 当該パッケージを利用していない会社は、この脆弱性の対象ではありません。
- 影響しない: 利用者提供のS2辞書を受け入れないなど、記載された攻撃条件を満たさないアプリは、この攻撃経路には当てはまりません。他の安全性まで保証する情報ではありません。