TL;DR
- Workers AI 上的 GLM-5.3(8/27---9/9)有 155 条回复混入其他客户内容,全部来自 >68 万 token 的请求。
- 根因:SGLang 分布式部署中,被拒超长请求的拒绝状态记错字段,调度层当作活请求------输入端写 1 页占位符,生成端按完整长度预留并读取全部页。
- 同一缺陷 7 月 6 日已报给 SGLang,公开挂了两个月;修复是缓存池扩到上下文 2 倍 + 三笔补丁(升级 v0.5.22)。

1. 宣传窗口 ≠ 显存账本
宣传上下文: 1,050,000 token ← 配置文件里的数
KV 显存池: ~680,000 token ← 装完权重后剩多少
强制对齐机制: 无 ← "核对是运维自己的事"(Cloudflare 原话)
2. 出错的请求生命周期(按官方复盘描述整理)
python
# 机制示意(非 SGLang 源码)
def handle_request(req):
if req.tokens > kv_pool.capacity:
req.state = REJECTED
set_field(req.state, WRONG_FIELD) # ← 记错字段
if scheduler.reads(req.state): # 读到的是旧字段 → 误判为活请求
input_pages = write_placeholder(req, pages=1) # 只写 1 页占位符
output_pages = reserve(req, full_length) # 按完整长度预留
return generate(req, read(input_pages)) # 读到前序请求残留页
结果:生成端从第 1---7 页读出的是此前请求未擦除的提示词与半截回答,拼接成一条连贯、甚至"更快"的回复返回给客户。测试全绿------断言只查 HTTP 状态码:
python
assert resp.status_code == 200 # 通过
assert content_is_coherent(resp) # 不存在这条断言(官方自白)
3. 时间线与处置
| 日期 | 事件 |
|---|---|
| 07-06 | 同一缺陷上报 SGLang,公开挂两个月 |
| 08-27 | GLM-5.3 上线 Workers AI |
| 09-08 | Gadi Evron 经 HackerOne 上报 |
| 09-09 | 模型下线(宣布后 40 分钟内),当晚修复上线 |
| 10-26 | 复盘报告发布,排查称未发现恶意利用 |
![]() |
4. 对做 Agent 基建的团队
-
托管开源模型时,长上下文是租户隔离问题,不只是性能参数:问供应商"宣传上限之外你们测什么",比问价格有用。

-
竞态类缺陷同样致命:SGLang 团队用两块 H200 复现取消请求场景,模型从 1 数到 80 后开始念另一个请求的提示词,全程零异常日志。
-
7 周前状态页只写了"错误率上升"------监控指标覆盖不到内容完整性这一层。
