Cloudflare, 호스팅 GLM-5.3 모델에서 요청 간 데이터 노출 사고를 공개

Published · AI Daily — AI-assisted deep research, methodology & disclosure

Cloudflare는 10월 26일 보고서에서 호스팅 GLM-5.3 모델의 테넌트 격리 결함으로 155건의 응답에 다른 고객의 텍스트가 섞였으며, 모두 681,280토큰보다 긴 프롬프트에 대한 응답이었다고 밝혔다. 노출 기간은 8월 27일부터 9월 9일까지다. 의도적 악용의 증거는 찾지 못했다고 한다.

Cloudflare, 호스팅 GLM-5.3 모델에서 요청 간 데이터 노출 사고를 공개

Cloudflare는 10월 26일 Workers AI 서비스의 테넌트 격리 결함에 대한 사후 보고서를 공개했다. Knostic의 보안 연구원 Gadi Evron이 9월 8일, GLM-5.3 모델(`@cf/zai-org/glm-5.3`)에 매우 긴 프롬프트를 보내면 다른 고객 세션의 텍스트가 돌아오는 경우가 있다고 신고했다. Cloudflare에 따르면 이 노출은 모델을 출시한 8월 27일부터 시작되었고, 회사는 9월 9일 모델을 내렸다가 같은 날 복구했으며, 다른 Workers AI 모델은 영향을 받지 않았다. 보고서 날짜가 10월 26일인 것은 관련 오픈소스 추론 엔진 SGLang의 글과 맞춰 공개했기 때문이며, 사고 자체는 약 7주 전의 일이다. 10월 27일자 이번 호는 새로운 공격이 아니라 이 공개 내용을 다룬다.

Cloudflare는 수치를 제시했다. 영향을 받은 응답은 155건이고, 모두 681,280토큰보다 긴 프롬프트에 대한 응답이었다. 여기서 토큰은 모델이 읽는 텍스트 단위이며 암호화폐가 아니다. 자체 테스트와 연구원의 테스트를 제외하면 나머지 요청은 시점과 양에서 일반적인 긴 컨텍스트 사용과 일치했고, 의도적인 악용의 증거는 찾지 못했다고 회사는 밝혔다. 이는 회사 자신의 결론이다. 글은 영향을 받은 고객이 몇 곳인지, 노출된 텍스트가 무엇이었는지는 밝히지 않는다.

두 가지 결함이 겹쳤다

첫 번째 결함은 설정 불일치였다. Cloudflare는 모델을 1,048,576토큰의 컨텍스트 창으로 배포했지만, 프리필(prefill) GPU에서 어텐션 캐시(KV 캐시)를 담는 메모리 풀에는 681,280토큰만 들어갔다. 회사는 출시 전에 이 차이를 알고 있었고, 들어가지 않는 프롬프트에는 엔진이 오류를 돌려줄 것이라고 예상했다고 말한다. 긴 컨텍스트 테스트가 성공 응답을 돌려주었기 때문에 팀은 이를 문제로 보지 않았다. 지금은 그 테스트가 HTTP 상태 코드와 속도만 확인했고 출력이 말이 되는지는 확인하지 않았음을 인정한다.

두 번째 결함은 프리필과 디코드를 서로 다른 GPU 풀에서 실행할 때 나타나는 SGLang의 버그였다. 풀에 비해 너무 긴 프롬프트는 거부된 것으로 표시되어 한 토큰짜리 대역으로 바뀌었지만, 요청 자체는 중단되지 않았다. 프리필은 캐시를 한 페이지만 쓰고 디코드 노드에 전송이 끝났다고 알렸다. Cloudflare의 설명 그림에 나온 예에서는 디코드 노드가 실제 프롬프트용으로 여덟 페이지를 확보하고 모두 새것이라고 가정한다. 그러나 일곱 페이지에는 이전 요청의 데이터가 남아 있고, 모델은 다른 사용자의 잔여 데이터를 읽으며 답했다. 클라이언트는 오류가 아니라 정상적인 성공 응답을 받았다. Cloudflare는 캐시 페이지가 요청 사이에 0으로 지워지지 않는다고 지적한다. 속도를 위해 많은 엔진이 이 방식을 받아들이며, 따라서 각 페이지의 소유자를 엔진이 직접 추적해야 한다.

Cloudflare가 바꾼 것

보고서의 시간 순서는 다음과 같다. 9월 9일 UTC 13:22에 사고를 선언했고, 14:00에 모델을 비공개로 전환했으며, 14:35에 근본 원인을 찾았다. 19:40에는 수정된 설정과 패치된 엔진으로 모델을 다시 공개했다. 프리필 풀은 이제 약 204만 토큰을 담을 수 있어 컨텍스트 창의 대략 두 배이므로, 유효한 프롬프트는 항상 들어간다. Cloudflare는 엔진도 패치해 거부된 요청이 캐시 전송이 시작되기 전에 종료되도록 했다. SGLang은 v0.5.20부터 v0.5.22까지 관련 수정을 내놓았고, Cloudflare는 분리형 SGLang을 운영하는 모든 곳에 v0.5.22 이상을 쓰라고 권고한다. 캐시 페이지 해제 지연, 전송 배치 크기 제한, 배포 전에 풀 크기와 컨텍스트 길이를 비교하는 점검 같은 추가 보강책도 열거했다.

독자가 가져갈 점

호스팅 추론을 구매하는 사람에게 교훈은 범위가 좁지만 실용적이다. 보고서에 따르면 유출된 텍스트를 받은 요청의 프롬프트는 681,280토큰보다 길었다. 데이터가 유출된 다른 고객의 요청 길이는 보고서에 나와 있지 않다. 그래도 격리 결함은 이번처럼 아무 오류 없이 13일 동안 조용히 남아 있을 수 있다. 자체 엔진을 운영하는 팀은 캐시 용량을 공표한 컨텍스트 길이와 대조하고, 상태 코드뿐 아니라 출력의 내용도 테스트하며, 외부 연구원이 결함을 신고할 수 있는 창구를 분명히 마련해야 한다. Cloudflare의 설명은 공급자 스스로의 보고다. 글에는 수치에 대한 독립적인 검증이 없고, 고객이 입은 영향도 수치로 제시되지 않는다.

Sources

FAQ

Cloudflare의 GLM-5.3 사고는 어떤 일이었나?

Cloudflare에 따르면 호스팅 GLM-5.3 모델에 매우 긴 프롬프트를 보내면 다른 고객의 최근 요청에서 나온 텍스트가 돌아올 수 있었다. 8월 27일 출시부터 9월 9일 수리까지 155건의 응답이 영향을 받았고, 모두 681,280토큰보다 긴 프롬프트에 대한 응답이었다. 다른 Workers AI 모델은 영향을 받지 않았다고 회사는 밝혔다.

노출의 원인은 무엇이었나?

두 가지 결함이 겹쳤다. 프리필 GPU의 어텐션 캐시 풀은 681,280토큰만 담을 수 있었지만 모델의 컨텍스트 창은 1,048,576토큰이었고, SGLang이 분리형 모드에서 너무 긴 요청을 잘못 처리해 디코드가 이전 요청이 남긴 캐시 페이지를 읽었다. 클라이언트는 오류가 아니라 정상적인 성공 응답을 받았다.

보고서가 아무도 악용하지 않았음을 증명하는가?

아니다. Cloudflare는 자체 시험과 연구원의 시험을 제외하면 의도적 악용의 증거가 없고 나머지 요청은 일반적인 긴 컨텍스트 사용과 일치했다고 말한다. 이는 회사 스스로의 결론이며, 글에는 독립적인 확인도 영향받은 고객 수도 없다.