
- 2026年8月27日から9月9日まで、GLM 5.3で155件の応答に他テナントのデータが混入
- KVプール(681,280トークン)がコンテキスト長(1,048,576トークン)より小さい設定ミスが一因
- SGLangが拒否したリクエストを退避せず、古いKVページを参照して応答を生成していた
何が公表されたのか
Cloudflareは2026年10月26日、同社のWorkers AIで提供するGLM 5.3モデル(@cf/zai-org/glm-5.3)でテナント分離の問題が発生していたと公表しました。発端は2026年9月8日、Knosticのセキュリティ研究者であるGadi Evron氏がHackerOne経由で報告したことです。問題自体は2026年8月27日から発生していたとされています。Cloudflareは翌朝に問題を再現し、インシデントを宣言してから40分以内にモデルをオフラインにしました。
影響は、このモデルに長いプロンプトを送った一部の利用者に対し、直前に同じモデルへ送られた別の利用者のリクエストに由来するデータを含む応答が返ったというものです。該当した応答は合計155件で、いずれも681,280トークンを超えるプロンプトに対するものでした。Cloudflareは自社のテストと研究者の検証分を除いたうえで、時刻と件数が通常の長文コンテキスト利用と整合しており、繰り返し悪用された形跡はないとしています。
Cloudflareは意図的な悪用の証拠は見つかっていないと明言し、Workers AIでホストする他のモデルには影響が及んでいないことを確認したとしています。モデルは修正後の2026年9月9日に公開へ戻されました。今回はSGLangの上流メンテナーと協調した開示として、SGLang側の投稿とあわせて公開されています。
原因となった2つの問題
1つ目はCloudflare側の設定ミスです。GLM 5.3は1,048,576トークンのコンテキスト窓で展開されましたが、prefill用GPUのKVキャッシュプールは681,280トークン分しかありませんでした。この不一致はローンチ前から把握していましたが、エンジンが処理できないプロンプトにはエラーを返すと想定しており、長文コンテキストのテストでも成功応答が返っていたため、問題視していなかったと説明しています。
2つ目は、プールに収まらない長さのリクエストをSGLangがどう扱うかにあったバグです。収まらないプロンプトは内部的に「拒否」と記録され、1トークンのプレースホルダに置き換えられます。しかしリクエストを中断してクライアントにエラーを返す代わりに、prefillはプレースホルダ分のKVキャッシュを生成してdecodeノードへ転送していました。decodeノードは「転送完了」を受け取り、前のリクエストのKVキャッシュが今回のプロンプトで上書きされたとみなしますが、実際には大半が残ったままでした。
その結果、decodeノードは前のリクエストのデータが残る古いキャッシュページを参照しながら応答を生成しました。クライアントにはHTTP 200が返り、トークン数もプロンプト長と一致し、応答自体も筋の通った文章になっていたため、外から見て異常に気づきにくい状態でした。
修正内容と上流への還元
設定面では、GLM 5.2の構成に合わせる形でGPUメモリを解放し、prefillのKVプールを約204万トークン分に拡張しました。これはコンテキスト長である1,048,576トークンのおよそ2倍で、コンテキスト窓に収まるプロンプトは必ずプールにも収まるようになり、拒否の経路に入りません。Cloudflareはこれだけでこのバグは踏まれなくなるとしています。
エンジン面では、拒否が確定したリクエストを、bootstrap・メモリ確保・KV転送が始まる前の受け入れキューで元のエラーとともに退避させるパッチを適用しました。これは#38704として上流に提案され、decodeノードが転送されたトークン数と予約した数を照合する検証も含まれています。関連する失敗経路の修正#36988は9月6日にSGLangのmainへマージ済みでしたが未リリースで、メンテナーは同様のアプローチでより早い段階に拒否する#38935もマージしています。
一連の修正はSGLang v0.5.20でリリースされ、v0.5.21とv0.5.22で追加対応が入りました。CloudflareはSGLangに依存するすべての運用者に対し、v0.5.22以降への更新を強く推奨しています。同社はWorkers AIでSGLangを使う全モデルにエンジン修正とハードニングを適用し、新規展開時のチェック項目にも加えたとしています。
背景にある仕組みと残る課題
Workers AIのGLM 5.3は、prefill用GPUがプロンプトを処理してKVキャッシュを作り、Mooncake経由のRDMAでdecode用GPUへ渡す分散構成で動いています。GPUメモリ上のKVキャッシュは固定サイズページの共有プールで、リクエストに割り当てられ、終了時に解放されます。性能のためにページはリクエスト間でゼロ埋めされず、次にそのページを割り当てられたリクエストが上書きする仕組みです。
この方式は推論エンジンでは一般的ですが、ページの所有権とライフサイクルの管理はエンジンの責任になります。さらにプールサイズは設定値ではなく、モデル重みを読み込んだ後に残ったGPUメモリから起動時に決まります。モデルの公称コンテキスト長は別の設定値であり、両者が一致することを保証する仕組みはありません。
Cloudflareはテスト手法の穴も認めています。長文コンテキストではHTTPステータスコードと性能だけを検証し、モデル出力の内容や一貫性を確認していませんでした。現在は、分散構成の変更を出す前に、稼働中のエンジンからKVプールサイズとコンテキスト長を直接突き合わせる運用に改めたとしています。
| 項目 | 設定ミス | SGLangのバグ |
|---|---|---|
| 内容 | コンテキスト長1,048,576トークンに対しKVプールは681,280トークン分しかなかった | 拒否したリクエストを退避せず、古いKVページを参照して応答を生成した |
| 修正方法 | KVプールを約204万トークン分に拡張し、拒否経路に入らないようにした | 拒否済みリクエストをKV転送前に退避させるパッチを適用(#38704) |
| 再発防止 | 稼働中のエンジンからKVプールサイズとコンテキスト長を直接突き合わせる | SGLang v0.5.22以降への更新を推奨 |
The decode node subsequently generated a response while attending over stale cache pages that still held data from earlier requests.
decodeノードはその後、以前のリクエストのデータが残った古いキャッシュページを参照しながら応答を生成しました。
今後の見通し
SGLang側はv0.5.20からv0.5.22にかけて順次修正が入り、Cloudflareは2026年9月16日から10月12日にかけて、転送ごとのチェックサムやabort-ACKなどの追加ハードニングを上流にマージしたとしています。自社でSGLangを運用する事業者は、バージョン更新に加えて、KVプールサイズがコンテキスト長以上になっているかを起動時に確認すべきでしょう。同種のテナント分離問題が他の推論エンジンでも起きうるかは、各エンジンがKVキャッシュページの所有権をどう管理しているかが明らかになれば判断できます。影響した155件の地域別・顧客別の内訳や個別通知の有無は示されておらず、追加開示があるかが次の焦点とみられます。
日本の開発者・IT企業にとっての意味
Workers AIはCloudflareのエッジ基盤上でモデルを動かすサービスで、日本の開発者もAPI経由で利用できます。今回の件は、マネージドなAI APIであってもテナント分離が事業者側の設定値とOSS推論エンジンの実装に依存していることを示しました。特にRAGやエージェントのように長いプロンプトを扱う用途では、入力長が伸びるほどエンジンの境界条件に近づく点に注意が必要です。自社でSGLangや同種のエンジンを使って推論基盤を組む場合、KVプールサイズとコンテキスト長の突き合わせ、拒否経路のテスト、出力内容そのものの検証をチェックリストに入れるべきでしょう。HTTPステータスだけを見る健全性確認では、今回のような混入は検出できません。
気になる点
- Workers AIのGLM 5.3は現在も使えますか
- 修正後の2026年9月9日19時40分に公開が再開されています。Cloudflareは設定変更とエンジンパッチを適用し、研究者の再現スクリプトと独自のカナリアテストで検証したとしています。影響したのは681,280トークンを超えるプロンプトへの応答155件で、他のモデルへの影響は確認されていないとしています。
- 自社でSGLangを使っている場合、何を確認すべきですか
- CloudflareはSGLang v0.5.22以降への更新を強く推奨しています。加えて、稼働中のエンジンでKVキャッシュプールのサイズがモデルのコンテキスト長以上になっているかを直接確認することが重要です。プールサイズは設定値ではなく起動時のGPUメモリ残量から決まるため、量子化や並列数の変更で知らずに縮む可能性があります。
- 日本企業の利用者に影響はありましたか
- 原文には影響を受けた155件の地域別・顧客別の内訳が示されていません。そのため日本企業の利用者が含まれたかどうかは、公表された情報だけでは判断できません。該当利用者への個別通知の有無についても、この記事では触れられていません。
用語解説
- KVキャッシュ
- 生成モデルが過去トークンの注意計算の結果をGPUメモリに保持するデータ。再計算を省いて応答を速くするために使う。
- prefill / decode
- プロンプトをまとめて処理しKVキャッシュを作るprefillと、トークンを1つずつ生成するdecode。別々のGPU群に分ける構成を分離配置と呼ぶ。
- RDMA
- ネットワーク越しのメモリをCPUを介さず直接読み書きする通信方式。ノード間でKVキャッシュを高速に転送するために使われる。
- テナント分離
- 1つのサービス上で複数の顧客のデータや処理が混ざらないように分離すること。クラウド型AI APIの前提となる性質。
- トークン
- モデルが扱う文字列の最小単位。日本語では1文字が複数トークンになることもある。
出典
Cross-request KV cache exposure in the GLM-5.3 Workers AI model (155 responses)
AI導入も顧問も、お任せください
何から手をつけるか、どこまでAIに任せるか。自社の業務に合わせて整理し、導入から運用まで伴走します。相談だけでも構いません。
AI導入について相談する