일간
Cloudflare Workers AI, GLM-5.3에서 다른 사용자의 프롬프트가 응답에 섞였다 — KV 캐시 풀이 컨텍스트보다 작았다
LLM 추론 서버에서 요청 간 데이터가 섞인 사고입니다. 원인이 두 겹이라 하나만 고쳤으면 못 막았을 사례입니다.
무엇이 새어 나갔나
영향 모델은 @cf/zai-org/glm-5.3 하나입니다. 681,280토큰보다 긴 프롬프트에 대한 응답에, 같은 모델에 직전에 들어온 다른 고객 요청의 프롬프트와 부분 생성이 포함됐습니다. 노출 기간은 8월 27일 출시부터 9월 9일 14:00 UTC까지입니다. 영향 응답은 155건이고 Cloudflare는 "소수의 고객"이라고 했습니다. Cloudflare와 신고자의 테스트를 빼면 요청 시각과 분포가 평범한 긴 컨텍스트 사용과 일치해, 고의 악용 증거는 없다고 합니다.
두 가지 원인
- 설정 불일치: 모델은 1,048,576토큰 컨텍스트로 배포됐는데 prefill GPU의 KV 캐시 풀은 681,280토큰이었습니다. Cloudflare는 출시 전에 이를 알고 있었습니다.
- SGLang 버그: 분리 prefill/decode 모드에서 길이 초과 요청은 거부 표시가 붙고 1토큰 자리표시자로 바뀝니다. 오류를 돌려주는 대신 prefill이 KV 캐시를 decode로 보냈고, decode는 이전 요청들이 남긴 오래된 페이지를 참조해 출력을 만들었습니다. 클라이언트는 400 대신 200을 받았습니다.
시간표 (UTC)
- 9월 8일 23:11 HackerOne 신고 접수 (Knostic, Gadi Evron)
- 9월 9일 13:22 사고 선언, 계정 두 개로 25분 만에 재현 → 14:00 모델 비공개 전환 → 14:35 원인 파악 → 14:52 전 prefill 노드 설정 교정 → 19:04 엔진 패치 재배포 → 19:40 공개 복원
- 9월 10일 SGLang 메인테이너(RadixArk)와 회의, 9월 11
19일 추가 강화, 9월 16일10월 12일 업스트림 머지 - 10월 2일 SGLang 0.5.21, 10월 19일 0.5.22
- 10월 26일 공동 공개
고친 것
KV 풀을 약 204만 토큰(컨텍스트의 약 2배)으로 키웠고, 거부된 요청은 KV 전송 전에 입장 큐에서 원래 오류로 종료되게 했습니다(업스트림 PR #36988, #38935). 지연 KV 해제, Mooncake 전송 배치 상한, 클라이언트 연결 끊김이 전송 중 abort를 일으키지 않도록 한 로드밸런서 변경, 새 배포 검사가 더해졌습니다.
글에 없는 것
영향받은 고객에게 개별 통지했는지, GLM-5.3 API 사용자가 해야 할 조치. 권고는 전부 SGLang을 직접 운영하는 쪽을 향합니다.
실무에서 할 일
SGLang을 분리 모드로 돌린다면: 설정을 바꿀 때마다 모든 prefill·decode 노드에서 KV 풀 크기와 컨텍스트 길이를 비교하고, 0.5.22 이상으로 올리고, 양쪽 역할에 지연 KV 해제를 켜고 Mooncake 전송 배치를 제한하고, 모델이 지원하면 --disaggregation-enable-kv-checksum과 --kv-canary를 켜세요. 첫 토큰 전에 프록시가 abort를 만들지 않게 합니다. 관리형 API를 쓰는 쪽은 컨텍스트 상한 근처의 요청이 200으로 돌아왔는데 내용이 이상하면 그냥 넘기지 말고 보고하세요.
2026년 10월 27일에 올라온 글
그날 대시보드 →댓글
불러오는 중…