KVGuard encontra 8 falhas de memória inéditas no cache KV de sistemas de serving de LLM
Pesquisadores apresentam o KVGuard, o primeiro verificador sistemático de segurança de memória para o cache KV em sistemas de serving de LLMs como vLLM e SGLang, cobrindo classes de bugs — double-free, use-after-free, acesso fora dos limites, leitura não inicializada e violação de permissão — que hoje corrompem silenciosamente respostas ou quebram o isolamento entre requisições sem nunca travar o sistema. A ferramenta reproduziu os 29 bugs históricos conhecidos dessas duas plataformas e encontrou 8 falhas de segurança de memória até então desconhecidas, com overhead de desempenho muito baixo.
Sistemas modernos de serving de LLM usam uma técnica chamada PagedAttention para gerenciar o cache KV (key-value), a estrutura de memória que guarda o estado de atenção de cada requisição em andamento. O PagedAttention funciona como um alocador de GPU personalizado, dividindo uma região de memória CUDA em blocos físicos de tamanho fixo e mapeando cada requisição para esses blocos através de uma tabela construída na CPU. Esse desenho, embora eficiente, introduz uma classe nova e pouco estudada de bugs de memória — específica da forma como blocos, requisições e tabelas se relacionam, e não dos erros clássicos de ponteiro em C que sanitizadores tradicionais já sabem detectar.
O problema é que sanitizadores de memória existentes, como o NVIDIA Compute Sanitizer, raciocinam sobre endereços no nível CUDA puro, sem entender o conceito de 'bloco do cache KV', 'requisição' ou 'tabela de blocos', e suas técnicas usuais de proteção (redzones, quarentena de memória liberada) não cabem no orçamento de memória de GPU, que já é escasso em produção. O KVGuard resolve isso mantendo um bloco-sombra compacto para cada bloco físico do cache KV, registrando permissões por requisição e o status de inicialização de cada entrada, e usa esse metadado para rodar cinco verificações de segurança em pontos específicos do fluxo do PagedAttention — da alocação na CPU até o acesso no lado da GPU — de modo que cada violação é pega exatamente na fronteira onde foi introduzida, em vez de se manifestar como corrupção silenciosa de output muitas requisições depois.
Na validação, um prototipo do KVGuard sobre vLLM e SGLang reproduziu todos os 29 bugs históricos de segurança de memória já catalogados nos históricos de patches dessas duas plataformas, hoje dois dos motores de serving de LLM mais usados em produção, tanto por provedores de nuvem quanto por empresas que hospedam seus próprios modelos. Mais relevante: a ferramenta encontrou 8 violações até então desconhecidas, sem nenhum falso positivo, com um overhead de apenas 3,0% e 7,4% de tempo por token de saída nas duas plataformas testadas e no máximo 0,11% de overhead de memória sobre o próprio cache KV. Isso é relevante na prática porque um bug de memória nesse nível pode, silenciosamente, misturar dados de requisições de usuários diferentes dentro do mesmo servidor compartilhado, quebrando o isolamento multi-tenant que provedores de inferência vendem como garantia, sem que nada no sistema sinalize um crash ou erro visível.