A implementação protobuf baseada em Rust da Anthropic, buffa, foi encontrada vulnerável a uma condição de negação de serviço (DoS) zero-day causada por alocação de heap ilimitada em controle de entrada do atacante. A falha, agora rastreada como CVE-2026-55407 e GHSA-f9qc-qg88-7pq5, afeta as versões buffa e connectrpc antes da 0.8.0 e foi classificada como CVSS 4.0/6.3 (Moderada). No entanto, o impacto no mundo real pode escalar para Alto ou Crítico dependendo da arquitetura de implantação.
Descoberta da vulnerabilidade
A vulnerabilidade foi originalmente identificada quando o motor de SAST (Static Application Security Testing) baseado em IA da Endor Labs analisou a base de código da buffa e sinalizou um fluxo de dados suspeito no decodificador de campo desconhecido. Na função decode_unknown_field, um valor de comprimento é analisado diretamente de dados de fio protobuf não confiáveis, convertido para usize e usado para alocar um Vec
Um guard garante que o buffer contenha pelo menos len bytes, prevenindo leituras fora dos limites, mas não restringe a alocação em si, deixando espaço para um atacante forçar grandes alocações de heap fornecendo campos delimitados por comprimento superdimensionados.
Amplificação de heap
A revisão inicial deste caminho sugeriu uma amplificação de aproximadamente 2x entre tamanho de entrada e uso de heap, o que é significativo, mas muitas vezes gerenciável sob limites de entrada estritos. No entanto, seguindo a mesma função um ramo mais para dentro no manuseio de WireType::StartGroup revelou um vetor de amplificação muito mais perigoso.
Neste ramo, o decodificador loop sobre campos desconhecidos aninhados até encontrar uma tag EndGroup correspondente, empurrando cada campo decodificado para uma estrutura UnknownFields baseada em Vec. Como o campo aninhado mais barato no fio pode ser codificado em apenas dois bytes, mas cada resultado em uma alocação de heap de aproximadamente 40 bytes mais overhead de crescimento, um grupo cuidadosamente elaborado pode expandir uma entrada relativamente pequena em uma estrutura enorme na memória.
A prova de conceito da Endor Labs demonstrou que um payload protobuf de 64 MiB contendo milhões de campos varint mínimos dentro de um único grupo desconhecido poderia levar o uso de heap a cerca de 1,4 GiB, cerca de 22 vezes o tamanho da entrada. Quando executado dentro de um container Docker com um limite de memória de 256 MiB, a decodificação de tal mensagem causou o processo a ser morto com código de saída 137, confirmando um DoS de falta de memória.
Impacto e mitigação
Crucialmente, o caminho de código vulnerável é alcançável via APIs de decodificação padrão da buffa, incluindo Message::decode e decode_from_slice, o que significa que qualquer serviço que decodifique mensagens protobuf não confiáveis com preserve_unknown_fields habilitado (o padrão) está potencialmente exposto.
A Anthropic lançou correções na buffa e connectrpc versão 0.8.0, implementando um limite configurável por mensagem de campos desconhecidos que limita o overhead de alocação máximo a cerca de dezenas de megabytes, mesmo sob entrada hostil. Para ambientes que não podem atualizar imediatamente, uma mitigação secundária é regenerar o código com preserve_unknown_fields=false, o que desativa a retenção de campos desconhecidos e remove o principal sink do caminho de dados.
No entanto, a descoberta destaca que confiar apenas em limites de tamanho de entrada é insuficiente, pois o caminho de amplificação de grupo pode transformar um tamanho de mensagem aparentemente seguro em uma alocação fatal de processo.
Implicações para desenvolvimento seguro
Além do patch específico, o caso é notável por como um motor de SAST baseado em IA descobriu uma vulnerabilidade de DoS de nível lógico não trivial em uma biblioteca Rust segura de memória, rastreando dados não confiáveis da fonte ao sink de alocação de heap, em vez de confiar em verificações baseadas em padrão.
A divulgação coordenada entre Endor Labs e Anthropic sublinha a necessidade de análise consciente de fluxo de dados mesmo em linguagens "seguras", especialmente em componentes de alta garantia usados em torno de sistemas de IA de fronteira.
Recomendações para equipes de desenvolvimento
- Atualize imediatamente: Aplique a versão 0.8.0 da buffa e connectrpc.
- Regeneração de código: Se não puder atualizar, regenere o código com preserve_unknown_fields=false.
- Limites de entrada: Implemente limites de tamanho de entrada e validação de payload.
- Monitoramento: Monitore o uso de memória em serviços que decodificam protobuf.
Perguntas frequentes
Qual é a severidade da vulnerabilidade? Classificada como CVSS 4.0/6.3 (Moderada), mas o impacto real pode ser Alto ou Crítico.
Como prevenir a exploração? Atualize para a versão corrigida ou desative a retenção de campos desconhecidos.
Isso afeta apenas a Anthropic? Não, qualquer serviço que use a biblioteca buffa ou connectrpc está potencialmente exposto.