Cloudflare曝GLM-5.3跨请求泄露:155个响应命中他人数据

10 月 26 日,Cloudflare 与推理引擎 SGLang 联合公开了一份漏洞报告,披露 Workers AI 上的 GLM-5.3 模型存在跨请求 KV Cache 泄露。总计 155 个响应被确认包含其他用户请求的数据,受影响请求的提示词长度全部超过 681280 token。

两个问题叠在一起

第一个是配置错误。Cloudflare 给 GLM-5.3 部署了 1048576 token 的上下文窗口,但预填充节点的 KV Cache 池只装得下 681280 token。这个不匹配在上线前是已知的,团队当时认为引擎会对处理不了的提示词直接报错,而长上下文测试也确实返回了成功响应。

第二个是 SGLang 的缺陷。在预填充与解码分离模式下,超长请求被内部标记为拒绝后,本该中止并返回客户端错误,实际却被替换成一个单 token 的占位符继续跑。预填充为占位符生成了 KV Cache 并传给解码节点,解码节点收到传输完成信号后,误以为之前的缓存已被完全覆盖,于是在残留的旧缓存页上生成了回应。结果就是后一个请求的答案里出现了前一个用户的内容。

从发现到修复的 20 小时

8 月 27 日模型上线,暴露期从上线当天就开始。9 月 8 日 23 时 11 分,安全研究员 Gadi Evron 通过 HackerOne 提交报告。9 月 9 日 8 时开始验证,13 时 22 分宣布安全事件,Product Security 用两个独立账号在 25 分钟内复现了泄露,14 时模型转为私有并返回 HTTP 400,14 时 35 分定位到根因,14 时 52 分全部预填充节点换成修正配置,19 时 04 分完成引擎补丁部署并用研究员的复现脚本验证,19 时 40 分恢复公开。

该缺陷早在 7 月 6 日已被另一位用户报告为 SGLang issue 30233。补丁在 v0.5.20 发布,v0.5.21、v0.5.22 跟进,Cloudflare 建议所有使用 SGLang 的部署至少升到 v0.5.22。

为什么这条值得单独看

仅 GLM-5.3 受影响,因为其它分离式部署的 KV 池都大于上下文长度,够不到这条拒绝路径。但这次事故暴露的是一整类 KV Cache 内存安全问题:一个页面被释放后仍被别人持有或读取。团队的长期方案是给每个物理 KV 页打上可随重分配变更的标签,读取前先校验。原型测试中吞吐与尾部延迟的额外开销低于 1%,但可靠性问题让它当时没能上线。

做自建推理的团队尤其该看一眼。站内记录的 清华 AKV 缓存工程如何压低智能体成本讲的是怎么把缓存用得更省,而这次事故讲的是缓存用得太省时会漏什么:KV 池必须装得下上下文窗口,且引擎要对超限请求老实报错。