Cloudflare GLM-5.3 KV 캐시가 다른 사용자 데이터를 노출했다
Cloudflare가 자사 Workers AI에서 서빙하던 GLM-5.3 모델(@cf/zai-org/glm-5.3)에서 요청 간 KV 캐시가 섞이는 테넌트 격리 문제가 발생했다가 수습됐다. 2026년 8월 27일부터 9월 9일 사이에 이 모델을 쓴 일부 고객이 직전에 다른 고객이 보낸 요청의 내용이 포함된 응답을 받았다. 영향을 받은 응답은 총 155건이며, 전부 681,280 토큰을 넘는 프롬프트에서 나왔다. Cloudflare는 같은 모델을 서빙하는 오픈소스 추론 엔진 SGLang 쪽과 보고서를 함께 공개했다.
문제의 출발점은 설정 불일치였다. Cloudflare는 GLM-5.3을 1,048,576 토큰 컨텍스트로 배포했지만, 프리필(prefill) GPU의 KV 캐시 풀은 681,280 토큰밖에 담지 못했다. 이 불일치는 배포 전에도 인지하고 있었으나, 엔진이 처리 못 하는 프롬프트에는 오류를 돌려줄 것이라고 가정했다. 실제 장문 테스트에서 정상 응답이 돌아왔기 때문에 문제로 보지 않았다는 것이 회사의 설명이다.
두 번째 원인은 SGLang이 초과 길이 요청을 다루는 방식에 있었다. 풀에 들어가지 않는 프롬프트는 내부적으로 거부 표시가 되고 1토큰짜리 자리표시자로 대체되는데, 요청을 중단하고 클라이언트에 오류를 반환하는 대신 자리표시자분 KV 캐시를 만들어 디코드 노드로 넘겼다. 디코드 노드는 전송 완료 신호를 받고 프리필이 이전 요청의 캐시를 새 프롬프트로 전부 덮어썼다고 믿었지만, 실제로는 이전 상태 대부분이 그대로 남아 있었다. 결과적으로 디코드 단계가 다른 사용자의 세션 데이터가 남은 캐시 페이지를 참조하며 응답을 생성했다.
구조적인 배경도 있다. Workers AI는 GLM-5.3을 프리필 GPU 풀과 디코드 GPU 풀로 나눈 디스어그리게이티드 구성으로 운영하며, 두 풀 사이의 KV 캐시 전달은 Mooncake를 통해 RDMA로 이뤄진다. GPU 메모리의 KV 캐시는 고정 크기 페이지들의 공유 풀이고, 페이지는 요청이 끝나도 0으로 초기화되지 않는다. 성능을 위해 일반적으로 쓰이는 방식이지만, 페이지 소유권과 수명 추적 책임이 전적으로 추론 엔진에 넘어간다는 뜻이다. 게다가 이 풀 크기는 설정값이 아니라 모델 가중치를 올린 뒤 남은 GPU 메모리에서 기동 시점에 산출되므로, 광고되는 컨텍스트 길이와 반드시 일치하지 않는다.
Cloudflare는 모델을 내린 뒤 두 갈래로 수정했다. 우선 GLM 5.2 설정에 맞춰 프리필 KV 풀이 약 204만 토큰을 담도록 넓혔다. 컨텍스트 길이의 두 배 수준이라 유효한 요청이 거부 경로에 도달할 일이 없어진다. 동시에 엔진 자체도 손봤다. 거부 대기 상태인 요청을 디스어그리게이션 어드미션 큐에서 원래 오류와 함께 정리해, 부트스트랩이나 할당, KV 전송이 일어나기 전에 차단하도록 했다. 이 변경은 업스트림 #38704로 제안됐고, 디코드 노드가 전송된 토큰 수와 예약한 수가 일치하는지 검증하는 절차도 포함한다. 관련 실패 경로를 다루던 #36988은 9월 6일 이미 SGLang 메인에 병합됐으나 릴리스되지 않은 상태였고, 유지관리자들은 더 이른 시점에 요청을 거부하는 #38935도 받아들였다. SGLang v0.5.21에서 이 버그가 정리됐다.
이번 사고에서 드러난 검증 공백은 실무에 직접적인 시사점을 준다. Cloudflare는 배포 전 테스트에서 HTTP 상태 코드와 엔진 성능만 확인했고, 모델 출력의 내용과 일관성은 검사하지 않았다. 이제는 디스어그리게이티드 배포 변경을 내보내기 전에 실행 중인 엔진에서 KV 풀 크기와 컨텍스트 길이를 직접 대조한다. 응답 코드가 정상이라는 사실이 응답 내용이 정상이라는 보장은 아니라는 점, 그리고 풀 크기가 양자화나 텐서 병렬화, CUDA 그래프 크기, 모델 버전 변경에 따라 조용히 달라질 수 있다는 점은 다른 서빙 환경에도 그대로 적용되는 교훈이다.
한 가지 짚어둘 전제가 있다. Cloudflare는 자사 테스트와 연구자 측 재현을 제외한 나머지 요청이 시점과 규모 면에서 통상적인 장문 컨텍스트 사용과 일치하며, 버그를 반복적으로 악용한 흔적은 발견하지 못했다고 밝혔다. 문제는 GLM-5.3에 국한됐고 Workers AI의 다른 모델은 영향을 받지 않은 것으로 확인됐다.