本文へスキップ
MameTechNews
バックエンド

ValkeyのクラスタPub/Subにヒープオーバーフロー

## POINTS

  • 影響はクラスタモードだけ。認証済みのpublishと、スクリプトで作る4GiB超のメッセージが条件だ。
  • 確実なのはプロセスのクラッシュで、リモートコード実行は可能性として書かれている。
  • 修正は9.1.3、9.0.7、8.1.11、8.0.12、7.2.15など。未使用のスクリプト命令はACLで止めておく。

Valkeyプロジェクトは2026年10月26日、クラスタのPub/Subメッセージ組み立てで整数が切り詰められ、ヒープバッファが溢れる問題を公開した。アドバイザリの深刻度はHigh、CVSS 8.8(CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)。対象はクラスタモードの7.2、8.0、8.1、9.0、9.1、9.2で、クラスタを有効にしていないサーバは影響を受けない。

認証済みでチャネルへpublishできる利用者が条件だ。ノードがPUBLISHまたはSPUBLISHをクラスタへ中継するとき、メッセージ長をsize_tで計算したあとuint32_tの引数へ渡す。チャネルと本文の合計がUINT32_MAXを超えると長さが黙って切り詰められ、実体より小さいバッファが確保される。続く2回のmemcpyが、攻撃者の選んだバイトをその先まで書く。通常ヘッダとライトヘッダの両方、モジュールのpublish APIも対象だ。

これだけでプロセスは確実に落ちる。溢れるバイトは攻撃者が選べるため、サーバの実行ユーザーでのリモートコード実行まで進む可能性がある、とアドバイザリは書く。4GiB超のチャネルとメッセージが必要で、既定のproto-max-bulk-lenは512MBのため、クライアントから直接は送れない。サーバ上のスクリプトなら構築できる。

修正版は9.2.0-rc2、9.1.3、9.0.7、8.1.11、8.0.12、7.2.15。直列化後の全長を32bit変換の前に検査し、PUBLISHとSPUBLISHはエラーを返してローカル公開も伝播もしない。すぐ上げられない場合は、使わないEVAL、EVALSHA、FCALL、FUNCTIONなどをACLで止め、proto-max-bulk-lenを既定より上げない。アドバイザリにCVE番号は記載されていない。報告はTrend Micro Zero Day Initiative(ZDI-CAN-28318)だ。