
2026/10/27 7:41
GLM-5.3 Workers AI モデルにおけるクロスリクエスト KV キャッシュの漏洩 (155 件の回答)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
2026 年 9 月 8 日、セキュリティ研究者のガディ・エヴロンは、クラウドファレ(Cloudflare)の GLM-5.3 Workers AI モデル(@cf/zai-org/glm-5.3)において、2026 年 8 月 27 日から稼働していたテナント分離に関する問題に気づき、クラウドファレに通知した。8 月 27 日から 9 月 9 日までの期間中に 155 のレスポンスが影響を受けた;すべては 681,280 トークンを超える長さのプロンプトに関連しており、他顧客の要求からデータを意図せずに含めていた。悪意あるexploit の証拠は見つからなかった;影響を受けた体積は通常の長期コンテキスト利用と一致した。
根本原因は 2 つあった:(1)プリフィル用 GPU 上の KV キャッシュプール(681,280 トークン)が、GLM-5.3 の広告された 1,048,576 トークンのコンテキストウィンドウより小さいという設定誤り、および(2)ディスアグリゲートしたプリフィル/デコードモードにおける SGLang バグであり、要求が却下された後に後で承認された場合、陳腐化された KV キャッシュページをデコードノードに転送してしまったことである。クラウドファレは 2026 年 9 月 9 日のインシデント宣言から 40 分以内に GLM-5.3 を無効化し、同日中に設定の修正およびパッチ適用済みのエンジンコードによってサービスを復旧した。
直ちに実施された対策として、プリフィル KV プールを約 204 万トークンに拡大し(GLM-5.2 と一致させる)、正当な要求が常に却下パスに到達しないようにした。エンジンレベルのパッチでは、ディスアグリゲーションのアドミッションキューでブートストラップ、割り当て、または KV 転送が発生する前に却下された要求をリタイアするようにした;この提案は #38704 としてアップストリーム化された。SGLang チームは 9 月 6 日に修正をマージ(v0.5.21)し、10 月 19 日にバージョン v0.5.22 をリリースした。クラウドファレは、ディスアグリゲート型 SGLang システムを使用するオペレーターに対し、v0.5.22 以降へのアップグレードを義務付けている。
9 月 11 日から 19 日にかけて追加の強化策が導入され、これには両方のロールでの延期された KV リリース、有界なムーンケイク転送バッチ、転送中の中止を防ぐためのロードバランサー変更、コンテキスト長に対する KV プールの直接検証が含まれた。アップストリームの SGLang マージ(9 月 16 日 – 10 月 12 日)には、アドミッション修正 (#38935)、転送ごとのチェックサム (#39500)、中止 ACK の保持、延期リリースのデフォルト値、およびさまざまな競合/ライフタイム修正 (#39461, #41404 等) が含まれた。クラウドファレは現在、これらの本番用 SGLang 強化措置を、SGLang で提供されるすべてのモデルに適用しており、新規のディスアグリゲート型デプロイメントごとにこれら修正が必要としている。
協調的な開示は SGLang の RadixArk ポストと共に公開され、協力と緊急性に対する感謝が SGLang チームおよび研究者のガディ・エヴロンに伝えられた。これらの行動は、長期コンテキスト AI モデルを利用する顧客のデータプライバシーを強化し、将来のインフラストラクチャデプロイメントにおいて、メモリリソースを広告されたコンテキスト制限に対して検証するための新しい基準を設定している。
本文
GLM-5.3 におけるテナント間隔離漏洩インシデントの対応と対策について
2026 年 9 月 8 日、セキュリティ研究者の Gadi Evron 氏(Knostic)から、GLM-5.3 Workers AI モデルにおいて発生していた深刻な問題に関する報告を受けました。当社は直ちに是正措置を講じ、9 月 9 日にサービスを復旧させたほか、他のモデルへの影響はないことを確認いたしました。
インシデントの概要
- 現象: 一部のユーザーのリクエストに対して、直前に処理された他のお客様のデータが回答に含まれることが発生しました。
- 影響を受けた回答数:計 155 件。
- 対象プロンプト:681,280 トークンを超える長大なコンテキストに対するリクエストのみで発生。
- 原因の分析:
- 自社および第三者によるテストを交えた分析結果、通常の利用パターンや意図的な悪用痕跡は見られず、不具合による挙動と判定されました。
インシデントの詳細(原因とメカニズム)
本件は、**Cloudflare が使用しているオープンソース推論エンジン「SGLang」**の構成誤りとソフトウェアバグが重なり合って発生しました。
1. 原因の要因
- 第一の原因:構成ミス
- GLM-5.3 は 1,048,576 トークンのコンテキストウィンドウを設定していましたが、SGLang のプリフェイル KV キャッシュプールは最大 681,280 トークンしか割り当てられていませんでした。
- 通常、処理不能な長大プロンプトに対しエンジンはエラーを返すと想定されており、テストでも正常に流れたため見過ごされていましたが、実際にはこの不一致が問題となっていました。
- 第二の原因:SGLang のバグ
- プール容量より長いリクエストは「拒否」としてマークされ、1 トークンのプレースホルダーに置換えられるべきところ、Decode ノード側がこれを「転送完了」と誤って認識しました。
- その結果、Decode ノードは古くなったキャッシュ(他のユーザーのデータ)を読み込みながら回答を生成してしまいました。
2. 背景:ディスアグリゲートモードと KV キャッシュ
- Workers AI では高性能モデル向けにプリフェイル GPUとDecode GPUを分離した構成を採用しています。
- 問題点: KV キャッシュページは固定サイズの共有プールであり、リクエストごとにゼロ化(初期化)されていません。次のリクエストが割り当てられる際のみ上書きされます。
- 責任の所在: 推論エンジン(SGLang)側がメモリーページの所有権とライフタイムを追跡する責任がありますが、本件では構成パラメータと実効的なプールサイズの不整合により、この保証が崩れました。
インシデント対応のタイムライン
以下の時刻は UTC です。
- 2026 年 8 月 27 日: GLM-5.3 のローンチ(問題が存在する状態)。
- 2026 年 9 月 8 日 23:11: HackerOne 経由でセキュリティ報告を受領。
- 2026 年 9 月 9 日 08:00: HackerOne 報告の検証開始。
- 2026 年 9 月 9 日 13:22: セキュリティインシデント宣言。リークの再現確認。
- 2026 年 9 月 9 日 14:00: GLM-5.3 の非公開化(Private)。HTTP 400 エラーを返す。
- 2026 年 9 月 9 日 14:35: 根本原因の特定(プールサイズ不足)。大規模プールの不感受性確認。
- 2026 年 9 月 9 日 14:52: 全プリフェイルノードへの修正済み構成ロールアウト完了。
- 2026 年 9 月 9 日 19:04: フルデプロイメントの再構築(パッチ適用+新構成)と検証完了。
- 2026 年 9 月 9 日 19:40: モデルを公開に戻す。
- 以降: SGLang メンテナとの協議、アップストリーム修正のマージ、全オペレーターへの推奨。
実施した緊急対応措置
モデル復旧前に以下の 3 つの対策を講じました。
1. 構成の修正(プールサイズ確保)
- プール容量をフルコンテキストサイズ(GLM-5.3 の約 2 倍、約 204 万トークン)に増強しました。
- これにより、有効なリクエストで拒否パスが到達される状況を物理的に防ぎました。
2. エンジン側の修正(SGLang パッチ適用)
- バグの解消: プールサイズに関わらず、オーバー長リクエストをハンドオフ前に適切に拒否・廃棄するロジックを実装しました。
- 関連 PR: #36988, #38704
- 追加対策: アドミッションキューの強化により、ブートストラップや KV 転送前のリクエスト処理を安全にしました。
3. チェック体制の強化(Canary マーカーテスト)
- 研究者による再現スクリプトと自社の Canary テストで両方の変更を検証済みです。
- 重要: これ以降、ディスアグリゲートデプロイの変更にはKV プールサイズとコンテキスト長の自動照合チェックを必須としています。
SGLang チームとの連携とアップグレード推奨
Cloudflare は SGLang のメンテナンス(RadixArk)と緊密に連携し、以下のアップデートを全オペレーターへ推奨いたします。
推奨するバージョン
- v0.5.21: インシデント直後の修正(#36988, #38935 マージ)。
- v0.5.22: より包括的な競合条件の解消とライフタイム管理機能追加(推奨バージョン)。
主なセキュリティ強化機能一覧
| カテゴリ | 対応内容 (PR 番号) | バージョン | 機能概要 |
|---|---|---|---|
| インシデント対応 | #36988, #38935 | v0.5.21 - v0.5.22 | 拒否パスを正しく処理し、Decode 側への誤送りを防止。 |
| 競合条件解消 | #39461, #41612, #40645, #41402 など | v0.5.21 - v0.5.22 | クライアント切断時のキャンセル、デレイドリリースの強化、転送失敗時のページ保持など。 |
| ライフタイム管理 | #32758, #30899, #43562 | v0.5.20 - v0.5.22 | Mooncake バッチ制限、ホストメモリーオフロードの完了待機による破損防止。 |
| 観測性強化 | #39500, #38596, #41128 | v0.5.21 - v0.5.22 | KV チェックサムの検証、Canary 修正による潜在破損検出、メトリクス出力。 |
※注:
--disaggregation-enable-kv-checksum オプションや Canary 機能は現在一部アーキテクチャでサポートされておりませんのでご注意ください。
他のオペレーターへの推奨事項
SGLang でディスアグリゲートモードを運用されている皆様へ、以下の対策を強く推奨します。
- 構成チェックの実施
- 重み変更やクオンタ化/etc.の際に、起動ログからKV プールサイズとコンテキスト長さを照合してください。不一致がある場合はプール容量を下げるか、コンテキスト長を変更してください。
- アップデートの適用
- #36988 および #38935 を含むバージョン(v0.5.21 以降)へアップグレードし、オーバー長リクエストをハンドオフ前に拒否する機能を有効にしてください。
- デフォルト挙動の設定
- 両ロールでデレイド KV リリースを有効にし(v0.5.21 以降はデフォルト)、Mooncake 転送バッチの境界を設定してください。
- 監視・検出機能の活用
- モデルがサポートする場合は、
および--disaggregation-enable-kv-checksum
を有効にし、ログから異常を検知できるよう設定してください。--kv-canary
- モデルがサポートする場合は、
- プロキシによる制限への依存回避
- エンジン側でエラーを返すことを前提とせず、自前でリクエスト長を強制するのではなく、適切な構成管理を行ってください。
今後の展望:構造的インテグリティ(Integrity by Construction)
今回のインシデントは、単なるバグ修正だけでなく、**「悪用不可能な設計」**へと移行する必要性を示しています。
- 現在の取り組み:
- トランスファーごとのチェックサム検証(
)。--disaggregation-enable-kv-checksum - ページレベルのタグ管理による読み込み前のマッピング確認(プロトタイプ)。
- トランスファーごとのチェックサム検証(
- 長期的な目標:
- 形式検証手法を用いて、分散システム(RDMA ベースの KV 転送)の一貫性を数学的に証明することを目指しています。
- これにより、人的ミスを補完し、根本的な一貫性不整合をゼロにする仕組みを構築します。
ご協力への謝辞
当社は本件の発見者であるGadi Evron 氏(Knostic)、修正を迅速に行われたRadixArk と SGLang チームに心から感謝いたします。 また、HackerOne プログラムを通じた協調開示により、脆弱性が長期間放置されることを防ぎました。
セキュリティ問題をご発見の場合は hackerone.com/cloudflare をご活用ください。