클라우드플레어의 AI 추론 서비스에서 다른 고객의 요청 내용이 섞인 응답 155건이 발생했다. 긴 입력을 처리할 메모리가 부족한 상황에서 추론 엔진이 요청을 중단하지 못해 앞선 요청의 데이터가 답변에 반영됐다.
클라우드플레어(Cloudflare)는 26일 공개한 사고 보고서에서 문제가 8월 27일부터 9월 9일까지 Workers AI의 GLM-5.3 모델에 영향을 미쳤다고 밝혔다. 영향을 받은 응답은 모두 입력 길이가 68만1280토큰을 넘는 요청에서 나왔다. 155건은 응답 수이며 고객이나 피해자 수를 뜻하지 않는다.
GLM-5.3은 개발자가 Workers AI를 통해 호출할 수 있는 모델이다. 클라우드플레어는 Workers AI의 다른 모델에서는 같은 문제가 발생하지 않았다고 밝혔다.
사고에는 설정 오류와 오픈소스 추론 엔진 SGLang의 처리 오류가 겹쳤다. 클라우드플레어는 모델이 최대 104만8576토큰을 받도록 설정했지만, 입력을 처리하는 GPU의 KV 캐시에는 68만1280토큰을 담을 공간만 마련했다. KV 캐시는 AI가 입력을 읽는 동안 계산 결과를 임시로 저장하는 메모리다.
입력이 캐시 용량을 넘자 SGLang은 요청을 내부적으로 거부하고 한 토큰짜리 대체 입력으로 바꿨다. 그러나 작업은 응답을 생성하는 GPU로 계속 전달됐다. 응답 생성 과정에서 GPU가 새 요청으로 덮어쓰지 않은 메모리 영역까지 읽으면서 그곳에 남아 있던 이전 고객의 입력이나 생성 내용이 답변에 섞였다.
고객에게는 오류 대신 정상 처리 상태를 뜻하는 HTTP 200 응답이 전달됐다. 메모리 영역은 성능을 위해 요청 사이에 초기화되지 않고 다음 요청이 덮어쓰는 방식으로 운영돼, 외부에서는 이상을 알아채기 어려웠다.
클라우드플레어는 출시 전 긴 입력을 시험하면서 응답 상태와 성능은 확인했지만 생성된 답변의 내용이 올바른지는 검증하지 않았다고 인정했다. 입력 길이 설정과 실제 캐시 용량의 차이를 알고 있었지만, 추론 엔진이 처리할 수 없는 입력에 오류를 돌려줄 것으로 봤다고 설명했다.
보안 연구원 가디 에브론(Gadi Evron)은 9월 8일 취약점 신고 플랫폼 해커원(HackerOne)을 통해 문제를 알렸다. 클라우드플레어는 이튿날 사고를 선언한 뒤 약 40분 만에 모델의 공개 접근을 중단했고, 설정과 추론 엔진을 수정해 같은 날 서비스를 복구했다.
클라우드플레어는 자체 시험과 신고자의 요청을 제외한 이용 기록에서 취약점을 고의로 반복 이용한 증거를 찾지 못했다고 밝혔다. SGLang 개발팀도 긴 요청이 거부된 뒤 응답 생성 단계로 넘어가지 않도록 처리 방식을 고쳤다.
클라우드플레어는 SGLang으로 운영하는 다른 모델에도 수정 사항과 추가 점검 절차를 적용했다. 모델 배포 전 실행 중인 엔진에서 KV 캐시 용량과 입력 길이 설정을 직접 대조하도록 절차를 바꿨다.
클라우드플레어는 앞서 AI 에이전트의 요청별 과금 기능을 시험한 바 있다. 이번 사고는 결제 기능이 아닌 AI 모델의 요청 처리 과정에서 발생했다.
<Copyright ⓒ TokenPost, unauthorized reproduction and redistribution prohibited>
Most Popular