Cloudflare의 KV 캐시 결함이 2026년 10월 26일 공개됐다. Cloudflare와 오픈소스 추론 엔진 SGLang 팀은 공동 설명을 통해 요청 간 캐시 격리 실패를 확인했고, 일부 이용자가 받은 응답에 다른 이용자의 요청 내용이 섞였다고 밝혔다. 외부 침입이 아니라 설정 실수와 엔진 결함이 겹쳐 드러난 격리 문제이며, 해당 모델은 수정됐고 SGLang도 패치 버전을 냈다.
직접적인 원인은 두 숫자의 불일치였다. Cloudflare가 Workers AI에서 Zhipu의 GLM 5.3을 운영할 때 모델이 표방한 컨텍스트 윈도우는 1,048,576토큰이었지만, 프리필 노드의 KV 캐시 풀은 681,280토큰까지만 담을 수 있었다. 풀을 초과하는 초대형 프롬프트는 오류와 함께 거부됐어야 했고, SGLang 내부에서도 거부로 기록돼 원래 프롬프트가 1토큰짜리 자리 표시자로 대체됐다. 그러나 프리필과 디코드를 분리한 구성에서 수락 큐는 요청이 '완료됐는지'만 확인하고 '거부됐는지'는 확인하지 않아, 거부된 요청이 그대로 처리에 들어갔다.
디코드 노드가 이전 요청의 잔여 데이터를 읽었다
프리필 노드는 자리 표시자 1토큰에 대한 KV 캐시만 만들고 '전송 완료' 신호를 보냈는데, 디코드 노드는 원래 프롬프트 길이에 맞춰 캐시 페이지를 통째로 예약해 두었다. 이번 요청이 쓴 페이지는 첫 페이지뿐이었고, 나머지 페이지에는 이전 요청의 잔여 내용이 남아 있었다. 디코드 노드는 그 페이지 위에서 생성을 이어갔고, 돌아온 응답은 자연스러워 보였고 상태 코드도 200이었지만 타인 세션의 데이터가 섞여 있었다. Cloudflare에 따르면 캐시 페이지는 요청 사이에서 애초에 0으로 지워지지 않으며, 엔진이 각 페이지의 소유자를 정확히 추적해 격리를 유지하는데, 이번에는 거부 경로에서 그 추적이 끊겼다.
영향은 GLM 5.3에만, 운영자는 캐시 풀부터 확인해야
Cloudflare 설명에 따르면 2026년 8월 27일부터 9월 9일까지 155건의 응답이 영향을 받았고, 모두 681,280토큰을 초과하는 프롬프트에 대한 것이었다. 보안 연구원 Gadi Evron이 9월 8일 HackerOne을 통해 보고했고, Cloudflare는 다음 날 문제를 재현해 보안 사고를 선언한 뒤 40분 안에 모델을 중단했으며, 당일 설정 수정과 엔진 패치를 마치고 서비스를 복구했다. 의도적으로 악용된 증거는 발견되지 않았다. Cloudflare는 프리필 캐시 풀을 약 204만 토큰으로 늘렸고, SGLang을 사용하는 모든 운영자에게 v0.5.22 이상으로 업데이트할 것을 권고하는 한편, 배포 전에 가동 중인 엔진의 캐시 풀 용량과 모델 컨텍스트 길이가 일치하는지 직접 확인하고, API가 200을 반환했다는 사실만으로 판단하지 말 것을 당부했다.