テック技報最新号へ →
セキュリティ

Kafka の解凍爆弾 DoS は更新だけでは防げない:max.decompressed.message.bytes を設定する

Apache Kafka の CVE-2026-114349 は、約 90 バイトの圧縮レコードで最大約 2GiB のメモリー確保を起こせる DoS。4.2.2 / 4.3.2 / 4.4.0 への更新に加えて、展開後サイズの上限 max.decompressed.message.bytes をブローカーかトピック単位で設定しないと防げない。

@MalwareBibleJP · 2026-10-31
#kafka#dos#decompression-bomb#configuration#patch-management

どこが壊れるか

  • 圧縮レコード内の申告サイズを検証せずにメモリーを確保する。悪用には、対象トピックへ書き込める認証済みの権限が必要。
  • レコードを読むコンシューマーが DoS になる。圧縮方式を変えて再処理するブローカーも影響を受ける。
  • ログクリーナーが細工レコードを読むと異常終了し、ログコンパクションが止まる。既定の 1 スレッド構成ではブローカー全体で止まり、レコードを除くまで再起動しても続く。
  • 同時に公表された CVE-2026-111551 は kafka-clients と kafka-streams の逆シリアル化の問題で、コンシューマーや Streams のスレッドが落ちる(ブローカーは影響外)。

対応手順

  1. 影響版を確認する。CVE-2026-114349 は 0.11.0.0〜4.1.2、4.2.0〜4.2.1、4.3.0〜4.3.1。CVE-2026-111551 は 0.10.0.0〜4.1.2 と同じく 4.2.x / 4.3.x の未修正版。
  2. ブローカーとクライアント(kafka-clients、kafka-streams を含むアプリ)を 4.2.2、4.3.2、4.4.0 以降に更新する。
  3. 更新後に max.decompressed.message.bytes を設定する。既定値は事実上無制限で、従来のレコードサイズ上限(max.message.bytes など)やクォータでは緩和できない。上限値は、実際に流れる最大メッセージの展開後サイズを測ってから決める。
  4. 設定前に書き込まれた細工レコードは、削除するか保存期間が過ぎるまで読み手側に危険が残る。異常終了したコンシューマーやログクリーナーのログから該当オフセットを特定する。
  5. トピックへの書き込み権限(ACL)を必要なプリンシパルに絞る。悪用の前提が「書き込めること」なので、ここが一番効く。

一般化できる教訓

  • 圧縮データを扱う処理は「申告サイズを信じない」「展開後サイズに上限を設ける」が基本。更新で入った上限が既定で無効のこともあるので、修正版のリリースノートで新しい設定項目を確認する。

出典

X の元の投稿を開く