snappy-javaの脆弱性CVE-2026-93451、型付き配列への展開でヒープ破壊のおそれ。Kafka・Sparkの下で古い版が残る場合の確かめ方

公開 2026-11-01公表 2026-10-04更新 2026-11-01資料確認 2026-11-01Java / JVMの脆弱性 53件のまとめ
対象製品snappy-java
識別番号CVE-2026-93451
影響範囲1.1.10.8以下・型付き配列のメソッドで展開する場合
修正情報1.1.10.9(上げるなら1.1.10.10以上)

Java向けの圧縮ライブラリsnappy-javaで、型付き配列に展開するメソッドがJavaの配列の末尾を越えて書き込む脆弱性CVE-2026-93451が、2026年10月4日に提供元から公表されました。修正版は1.1.10.9ですが、同じ版に別の2件が残るため、上げる先は1.1.10.10以上です。snappy-javaはKafkaやSpark、Hadoopの依存として入っていることがあり、それらの最新版も古いsnappy-javaを指定しています。

2026-11-01更新:一次情報(提供元のアドバイザリ、CVEの記録、Maven Centralの各pom、Kafkaのソース)と照合し、Kafka・Spark・Hadoopが指定する版、Hadoop互換の不具合と1.1.10.12、版の指定の仕方を加えて書き直しました。

この記事の要点
  • 対象はsnappy-java 1.1.10.8以下で、外部から受け取ったデータをuncompressIntArrayなどの型付き配列のメソッドで展開している場合です。
  • 上げる先は1.1.10.10以上です。HadoopのSnappyCodecなどで圧縮もしている場合は、互換性の不具合が直った1.1.10.12にします。
  • Kafkaのクライアント4.4.0は1.1.10.7、Spark 4.3.0は1.1.10.8を指定しています。上のライブラリを上げても直らないので、snappy-javaの版を直接指定します。

01snappy-javaのCVE-2026-93451で起きること

提供元のアドバイザリによると、Snappy.uncompressCharArray・uncompressShortArray・uncompressIntArray・uncompressLongArray・uncompressFloatArray・uncompressDoubleArrayは、圧縮データに書かれた展開後の大きさ(バイト数)を要素の大きさで割って配列を用意していました。一方、ネイティブのコードはバイト数をそのまま書き込みます。展開後の大きさが要素の大きさの倍数でないと、配列の末尾を最大7バイト越えて書き込み、Javaのヒープを壊します。[1]

深刻度は、提供元の評価でCVSS 3.1の7.5(可用性への影響が高)です。CVEを採番したVulnCheckは、CVSS 4.0で6.9、CVSS 3.1で6.5と評価し、書き込む内容を攻撃者が制御できるとしています。NVDは11月1日時点で独自の評価をしていません。[1][3]

報告のissue(#729)は日本時間の9月14日に公開され、VulnCheckのCVEの記録は9月18日に公開されました。提供元のアドバイザリの公表は10月4日、GitHub Advisory Databaseへの収録は10月28日です。[1][2][3][4]

型付き配列のメソッドは要素の数で配列を用意し、ネイティブのコードはバイト数のまま書き込む

提供元のアドバイザリが示す仕組みを、受け取るデータ・展開の部品・起きることの順に並べる。

外部から受け取った圧縮データ展開後の大きさを、要素の大きさの倍数からずらす
uncompressIntArrayなど6つのメソッドで展開

snappy-java 1.1.10.8以下

配列の用意展開後のバイト数を要素の大きさで割って配列を作る
ネイティブのコード展開後のバイト数をそのまま書き込む
倍数でないと
配列の末尾を最大7バイト越えて書き込む
起きること
Javaのヒープの破壊VulnCheckは、書き込む内容を攻撃者が制御できるとしている
可用性への影響が高提供元の評価はCVSS 3.1の7.5

出典 xerial「GHSA-gwq9-9ffj-mvrv」(2026-10-04)、NVD「CVE-2026-93451」(2026-09-18)

02snappy-javaの脆弱性の対象になる使い方

この件の対象は、外部から受け取ったデータ、または外部の影響を受けるデータを、上の6つのメソッドで展開している場合です。Snappy.uncompress(byte[])やSnappyInputStreamなど、他の展開の方法はこの件の対象として書かれていません。[1]

ただし、同じ1.1.10.9では、Snappy.uncompress(ByteBuffer, ByteBuffer)の範囲外の書き込み(CVE-2026-90559)や、圧縮データで宣言された大きさのまま最大2GBのメモリを確保してしまう問題(GHSA-q233-g92q-qxp6、SnappyInputStreamなども対象)も直っています。型付き配列のメソッドを使っていなくても、上げる理由は残ります。[5][6]

03悪用の状況

2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧(KEV)」には載っていません。

今後30日以内に悪用される確率の推定値(EPSS)は0.3%です(2026-11-01時点)。見込みは高くない部類ですが、推定値で、悪用されないことを保証するものではありません。

報告のissue(#729)には、展開後の大きさをずらした圧縮データで書き込みを再現するコード(PoC)が公開されています。当社はPoCを検証していません。CISAのコーディネーターがCVEの記録に付けた評価(SSVC)は、9月21日時点で悪用「なし」です。[3][4]

報告とCVEの記録が9月に先に公開され、修正版とアドバイザリは10月に出た

報告の公開から、修正版、データベースへの収録、悪用の状況の確認までを並べる(日本時間)。

提供元(xerial) 報告者・データベース・公的機関

2026年9月14日

報告のissue #729を公開展開後の大きさをずらした圧縮データで書き込みを再現するPoCを含む

2026年9月18日

VulnCheckがCVEの記録を公開9月21日時点のCISAのSSVCの評価は悪用「なし」
6.9CVSS 4.0(VulnCheckの評価)

2026年10月3日

Maven Centralで1.1.10.9を公開

2026年10月4日

提供元がアドバイザリを公表し、1.1.10.10を公開1.1.10.9に残る2件も同じ日に公表
7.5CVSS 3.1(提供元の評価)

2026年10月28日

GitHub Advisory Databaseに収録

2026年11月1日

KEVに載っていない
0.3%EPSS(30日以内の悪用の推定)

出典 xerial「GHSA-gwq9-9ffj-mvrv」(2026-10-04)、同「issue #729」(2026-09-14)、NVD「CVE-2026-93451」(2026-09-18)、米CISA「Known Exploited Vulnerabilities Catalog」(2026-11-01確認)

04snappy-javaの対象の版と推奨する版

版ごとの状態は次のとおりです(11月1日時点、Maven Centralの最新は1.1.10.12)。[1][7][8][9][13][14]

版今回の件他の公表済みの件Hadoop互換の圧縮
1.1.10.8以下対象対象—
1.1.10.9直っている「高」の2件が残る失敗する場合がある
1.1.10.10直っている直っている失敗する場合がある
1.1.10.11直っている直っている一部が直った
1.1.10.12直っている直っている直っている

1.1.10.9に残る2件は、SnappyFramedInputStreamが確保に失敗したときにバッファを二重に返し、別のストリームと同じ配列を共有してしまうおそれ(GHSA-c73m-r934-8qvg)と、SnappyInputStreamの再帰による異常終了と大きなメモリの確保(GHSA-6gp7-6wmv-gxqw)で、いずれも1.1.10.10で直りました。1.1.10.9は日本時間の10月3日、1.1.10.10は10月4日にMaven Centralへ公開されています。Hadoop互換の圧縮の不具合は、よくある質問で説明します。[7][8][9]

1.1.10.9には「高」の2件が残り、Hadoopの圧縮まで直ったのは1.1.10.12

版ごとに、今回の件、他の公表済みの件、Hadoop互換の圧縮の状態を並べる(11月1日時点)。

1.1.10.8以下kafka-clients 4.4.0・Spark 4.3.0の指定もここ
今回の件(CVE-2026-93451)対象
他の公表済みの件対象
Hadoop互換の圧縮失敗の原因になった範囲の確認が入る前
1.1.10.9今回の件の修正版
今回の件(CVE-2026-93451)直っている
他の公表済みの件GHSA-c73m-r934-8qvgとGHSA-6gp7-6wmv-gxqwが残る
Hadoop互換の圧縮失敗する場合がある
1.1.10.10以上最新は1.1.10.12
今回の件(CVE-2026-93451)直っている
他の公表済みの件1.1.10.10で直った
Hadoop互換の圧縮1.1.10.11で一部、1.1.10.12で直った
だから 1.1.10.10以上、Hadoopの圧縮を使うなら1.1.10.12を、pom.xmlやGradleで直接指定する。

出典 xerial「GHSA-gwq9-9ffj-mvrv」「GHSA-c73m-r934-8qvg」「GHSA-6gp7-6wmv-gxqw」(2026-10-04)、同「PR #768」(2026-10-10)、Maven Central(2026-11-01確認)

05snappy-javaの版を確かめて指定する手順

  1. Mavenでは、snappy-javaの版と、どのライブラリを通じて入っているかを確かめます。

    ターミナル
    mvn dependency:tree -Dincludes=org.xerial.snappy:snappy-java
  2. Gradleでは、実行時に使われる版と、そう決まった理由を確かめます。

    ターミナル
    ./gradlew dependencyInsight --dependency org.xerial.snappy:snappy-java --configuration runtimeClasspath
  3. 自分のコードで、型付き配列のメソッドを使っている箇所を探します。

    ターミナル
    grep -rn -E 'uncompress(Char|Short|Int|Long|Float|Double)Array' --include='*.java' --include='*.kt' --include='*.scala' .
  4. Mavenでは、dependencyManagementで版を指定すると、間接的に入るsnappy-javaもその版になります。

    pom.xml
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.xerial.snappy</groupId>
          <artifactId>snappy-java</artifactId>
          <version>1.1.10.12</version>
        </dependency>
      </dependencies>
    </dependencyManagement>
  5. Gradleでは、依存の制約(constraints)で版を指定します。Gradleは、制約と他のライブラリの指定のうち高い版を選びます。

    build.gradle.kts
    dependencies {
        constraints {
            implementation("org.xerial.snappy:snappy-java:1.1.10.12")
        }
    }
  6. もう一度版を確かめ、アプリやコンテナのイメージを作り直します。Kafka・Spark・Hadoopを使う場合は、圧縮と展開の動作もテストで確かめます。

    ターミナル
    mvn dependency:tree -Dincludes=org.xerial.snappy:snappy-java

06すぐに上げられないとき

提供元のアドバイザリは回避策として、これらのメソッドを呼ぶ前に、Snappy.uncompressedLength(input)が要素の大きさの倍数かを確かめることを示しています。要素の大きさは、char・shortが2、int・floatが4、long・doubleが8バイトです。[1]

この回避策で防げるのは今回の件だけで、同じ版で直った他の件は防げません(当社の整理)。上のライブラリの都合で上げられない場合も、次の節の方法でsnappy-javaの版だけを指定できることがあります。

07Kafka・Spark・Hadoopを上げても、snappy-javaは古いまま残る

snappy-javaは、圧縮を扱うJavaのライブラリの依存として入ります。Maven Centralに登録された主なライブラリの指定は、11月1日時点で次のとおりで、いずれも対象の版です。[10][11][12]

ライブラリと版指定しているsnappy-java
Apache Kafkaのクライアント(kafka-clients)4.4.01.1.10.7
Apache Spark(spark-core_2.13)4.3.01.1.10.8
Apache Parquet(parquet-hadoop)1.18.11.1.10.8
Apache Hadoop 3.5.01.1.10.4

Kafkaは開発中のリポジトリで1.1.10.11に上げていますが、公開済みの4.4.0には入っていません。Mavenは、依存の木で近い指定を優先して版を決めます。自分のpom.xmlでsnappy-javaの版を指定しない限り、これらのライブラリの指定が使われます。[10][15][16]

脆弱性の公表・更新一覧で、Java / JVMの関連情報を調べることもできます。

緊急の場合AI攻撃リスク即点検サービス公開情報と、契約後すぐに用意できるアクセスの記録から先に調べ、被害や狙われやすい構成がないかを早く確かめます。

よくある質問

Kafkaを使っています。対象ですか?

当社が確かめたKafkaのクライアントの圧縮処理(SnappyCompression.java)が使うのはSnappyInputStreamとSnappyOutputStreamで、今回の型付き配列のメソッドではありません。ただし、kafka-clients 4.4.0が入れる1.1.10.7は、SnappyInputStreamに関わる別の件(GHSA-q233-g92q-qxp6、GHSA-6gp7-6wmv-gxqw)の対象です。snappy-javaは1.1.10.10以上を指定します。[6][8][10][15]

1.1.10.10に上げたら、Hadoopでの書き込みが失敗するようになりました。

1.1.10.9で加わった範囲の確認が、Hadoop 3.5.0のSnappyCompressorの出力バッファの使い方と合わず、「not enough space for output」の例外で失敗する不具合が報告されています。これは1.1.10.11で直り、SnappyHadoopCompatibleOutputStreamでの同じ例外は1.1.10.12で直りました。Hadoopの圧縮を使う場合は1.1.10.12に上げます。[13][14]

GitHubの依存関係の警告では、1.1.10.9で解決と表示されます。

1.1.10.9に残る2件は提供元のリポジトリにだけ公表されていて、11月1日時点でGitHub Advisory Databaseに収録されていません。GitHub Advisory Databaseを使う道具では見つからないことがあるので、提供元のアドバイザリの一覧で確かめます。[7][8]

公表日はいつですか?

提供元のアドバイザリの公表は10月4日(日本時間)です。報告のissueはそれより前の9月14日から公開されていて、CVEの記録も9月18日に公開されていました。[1][3][4]

出典・参考資料

  1. snappy-java(xerial):GHSA-gwq9-9ffj-mvrv(提供元のアドバイザリ)2026-10-04(日本時間) / 仕組み、対象(1.1.10.8以下)、修正版1.1.10.9、回避策、CVSS 3.1 7.5
  2. GitHub Advisory Database:GHSA-gwq9-9ffj-mvrv2026-10-28収録(日本時間) / 収録日、CVE-2026-93451との対応
  3. NVD:CVE-2026-93451(採番機関VulnCheck)2026-09-18公開(日本時間) / VulnCheckのCVSS 4.0 6.9・3.1 6.5、書き込む内容を攻撃者が制御できるとの記載、CISAのSSVC(悪用なし)
  4. snappy-java:issue #729(報告)2026-09-14公開(日本時間) / 報告の公開日、再現のコード
  5. snappy-java:GHSA-wmgv-28fv-894x(CVE-2026-90559)2026-10-04(日本時間) / uncompress(ByteBuffer, ByteBuffer)の範囲外の書き込み、1.1.10.9で修正
  6. snappy-java:GHSA-q233-g92q-qxp62026-10-04(日本時間) / 宣言された大きさでのメモリ確保、SnappyInputStreamなどが対象、1.1.10.9で修正
  7. snappy-java:GHSA-c73m-r934-8qvg2026-10-04(日本時間) / 1.1.10.9以下が対象、1.1.10.10で修正
  8. snappy-java:GHSA-6gp7-6wmv-gxqw2026-10-04(日本時間) / 1.1.10.9以下が対象、1.1.10.10で修正
  9. Maven Central:org.xerial.snappy:snappy-java2026-11-01確認 / 1.1.10.9〜1.1.10.12の公開日、最新が1.1.10.12
  10. Maven Central:kafka-clients 4.4.0のpom2026-10-07公開(日本時間) / snappy-java 1.1.10.7の指定
  11. Maven Central:spark-core_2.13 4.3.0・parquet-hadoop 1.18.1のpom2026-11-01確認 / snappy-java 1.1.10.8の指定(parquet-hadoop 1.18.1も同じ)
  12. Maven Central:hadoop-project 3.5.0のpom2026-11-01確認 / snappy-java.version 1.1.10.4
  13. snappy-java:issue #765とPR #766(1.1.10.11)2026-10-06(日本時間) / Hadoop 3.5.0のSnappyCompressorで圧縮が失敗する不具合と1.1.10.11での修正
  14. snappy-java:issue #767とPR #768(1.1.10.12)2026-10-10 / SnappyHadoopCompatibleOutputStreamでの例外と1.1.10.12での修正
  15. Apache Kafka:SnappyCompression.javaとgradle/dependencies.gradle(trunk)2026-11-01確認 / SnappyInputStream・SnappyOutputStreamを使うこと、開発版の指定が1.1.10.11
  16. Apache Maven:Introduction to the Dependency Mechanism2026-11-01確認 / 近い指定を優先する決め方(nearest definition)、dependencyManagementで間接的な依存の版を決められること
  17. 修正のプルリクエスト:github.com/xerial/snappy-java/pull/739GitHub Advisoryの参考リンク / 修正の内容・経緯
  18. 修正のコミット:github.com/xerial/snappy-java/commit/943c6043a292568575e8347af4507d015e802c75GitHub Advisoryの参考リンク / 修正の内容・経緯
  19. 参考資料:github.com/xerial/snappy-java/blob/v1.1.10.8/src/main/java/org/xerial/snappy/Snappy.java#LGitHub Advisoryの参考リンク / 修正の内容・経緯
  20. リリースノート:github.com/xerial/snappy-java/releases/tag/v1.1.10.9GitHub Advisoryの参考リンク / 修正の内容・経緯
  21. 参考資料:www.vulncheck.com/advisories/snappy-java-through-1.1.10.8-buffer-overflow-via-typed-uncompGitHub Advisoryの参考リンク / 修正の内容・経緯

あわせて読みたい記事

Java / JVM公表 2026-10-20

Apache Tomcatの脆弱性8件(10月20日公表)、応答の取り違えや認証回避のおそれ。使い方ごとの対象と修正版

Apache Tomcatで10月20日に公表された8件の脆弱性(CVE-2026-101356ほか)は、HTTP/2・JNDIRealm・AJPなどの使い方で該当が分かれます。自分の版と設定が対象かの確かめ方、系列ごとの修正版、Spring Bootでの扱い、9.0系のサポート終了(2027年3月31日)を説明します。

PHP公表 2026-10-26

PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方(CVE-2026-111497)

PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。

Python公表 2026-10-22

Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す(CVE-2026-111497、コード実行のおそれ)

圧縮形式Brotliの展開処理の脆弱性CVE-2026-111497(HTTP2Shell)は、米CISAが悪用を確認しています。Pythonのbrotli・brotlicffi、Node.jsの同梱版などで、自分の版と構成が対象かを確かめる方法と修正版を、言語ごとに説明します。