snappy-javaの脆弱性CVE-2026-93451、型付き配列への展開でヒープ破壊のおそれ。Kafka・Sparkの下で古い版が残る場合の確かめ方
CVE-2026-93451Java向けの圧縮ライブラリ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]
型付き配列のメソッドは要素の数で配列を用意し、ネイティブのコードはバイト数のまま書き込む
提供元のアドバイザリが示す仕組みを、受け取るデータ・展開の部品・起きることの順に並べる。
snappy-java 1.1.10.8以下
出典 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日
2026年9月18日
2026年10月3日
2026年10月4日
2026年10月28日
2026年11月1日
出典 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日時点)。
出典 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の版を確かめて指定する手順
Mavenでは、snappy-javaの版と、どのライブラリを通じて入っているかを確かめます。
ターミナルmvn dependency:tree -Dincludes=org.xerial.snappy:snappy-javaGradleでは、実行時に使われる版と、そう決まった理由を確かめます。
ターミナル./gradlew dependencyInsight --dependency org.xerial.snappy:snappy-java --configuration runtimeClasspath自分のコードで、型付き配列のメソッドを使っている箇所を探します。
ターミナルgrep -rn -E 'uncompress(Char|Short|Int|Long|Float|Double)Array' --include='*.java' --include='*.kt' --include='*.scala' .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>Gradleでは、依存の制約(constraints)で版を指定します。Gradleは、制約と他のライブラリの指定のうち高い版を選びます。
build.gradle.ktsdependencies { constraints { implementation("org.xerial.snappy:snappy-java:1.1.10.12") } }もう一度版を確かめ、アプリやコンテナのイメージを作り直します。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.0 | 1.1.10.7 |
| Apache Spark(spark-core_2.13)4.3.0 | 1.1.10.8 |
| Apache Parquet(parquet-hadoop)1.18.1 | 1.1.10.8 |
| Apache Hadoop 3.5.0 | 1.1.10.4 |
Kafkaは開発中のリポジトリで1.1.10.11に上げていますが、公開済みの4.4.0には入っていません。Mavenは、依存の木で近い指定を優先して版を決めます。自分のpom.xmlでsnappy-javaの版を指定しない限り、これらのライブラリの指定が使われます。[10][15][16]
脆弱性の公表・更新一覧で、Java / JVMの関連情報を調べることもできます。

よくある質問
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]
出典・参考資料
- snappy-java(xerial):GHSA-gwq9-9ffj-mvrv(提供元のアドバイザリ)2026-10-04(日本時間) / 仕組み、対象(1.1.10.8以下)、修正版1.1.10.9、回避策、CVSS 3.1 7.5
- GitHub Advisory Database:GHSA-gwq9-9ffj-mvrv2026-10-28収録(日本時間) / 収録日、CVE-2026-93451との対応
- NVD:CVE-2026-93451(採番機関VulnCheck)2026-09-18公開(日本時間) / VulnCheckのCVSS 4.0 6.9・3.1 6.5、書き込む内容を攻撃者が制御できるとの記載、CISAのSSVC(悪用なし)
- snappy-java:issue #729(報告)2026-09-14公開(日本時間) / 報告の公開日、再現のコード
- snappy-java:GHSA-wmgv-28fv-894x(CVE-2026-90559)2026-10-04(日本時間) / uncompress(ByteBuffer, ByteBuffer)の範囲外の書き込み、1.1.10.9で修正
- snappy-java:GHSA-q233-g92q-qxp62026-10-04(日本時間) / 宣言された大きさでのメモリ確保、SnappyInputStreamなどが対象、1.1.10.9で修正
- snappy-java:GHSA-c73m-r934-8qvg2026-10-04(日本時間) / 1.1.10.9以下が対象、1.1.10.10で修正
- snappy-java:GHSA-6gp7-6wmv-gxqw2026-10-04(日本時間) / 1.1.10.9以下が対象、1.1.10.10で修正
- Maven Central:org.xerial.snappy:snappy-java2026-11-01確認 / 1.1.10.9〜1.1.10.12の公開日、最新が1.1.10.12
- Maven Central:kafka-clients 4.4.0のpom2026-10-07公開(日本時間) / snappy-java 1.1.10.7の指定
- 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も同じ)
- Maven Central:hadoop-project 3.5.0のpom2026-11-01確認 / snappy-java.version 1.1.10.4
- snappy-java:issue #765とPR #766(1.1.10.11)2026-10-06(日本時間) / Hadoop 3.5.0のSnappyCompressorで圧縮が失敗する不具合と1.1.10.11での修正
- snappy-java:issue #767とPR #768(1.1.10.12)2026-10-10 / SnappyHadoopCompatibleOutputStreamでの例外と1.1.10.12での修正
- Apache Kafka:SnappyCompression.javaとgradle/dependencies.gradle(trunk)2026-11-01確認 / SnappyInputStream・SnappyOutputStreamを使うこと、開発版の指定が1.1.10.11
- Apache Maven:Introduction to the Dependency Mechanism2026-11-01確認 / 近い指定を優先する決め方(nearest definition)、dependencyManagementで間接的な依存の版を決められること
- 修正のプルリクエスト:github.com/xerial/snappy-java/pull/739GitHub Advisoryの参考リンク / 修正の内容・経緯
- 修正のコミット:github.com/xerial/snappy-java/commit/943c6043a292568575e8347af4507d015e802c75GitHub Advisoryの参考リンク / 修正の内容・経緯
- 参考資料:github.com/xerial/snappy-java/blob/v1.1.10.8/src/main/java/org/xerial/snappy/Snappy.java#LGitHub Advisoryの参考リンク / 修正の内容・経緯
- リリースノート:github.com/xerial/snappy-java/releases/tag/v1.1.10.9GitHub Advisoryの参考リンク / 修正の内容・経緯
- 参考資料:www.vulncheck.com/advisories/snappy-java-through-1.1.10.8-buffer-overflow-via-typed-uncompGitHub Advisoryの参考リンク / 修正の内容・経緯
あわせて読みたい記事
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の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などへの入れ替えと確かめ方を説明します。
Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す(CVE-2026-111497、コード実行のおそれ)
圧縮形式Brotliの展開処理の脆弱性CVE-2026-111497(HTTP2Shell)は、米CISAが悪用を確認しています。Pythonのbrotli・brotlicffi、Node.jsの同梱版などで、自分の版と構成が対象かを確かめる方法と修正版を、言語ごとに説明します。