Proto6: falhas gravíssimas no protobuf.js

Um lote de seis vulnerabilidades descobertas na biblioteca protobuf.js, a implementação JavaScript do Protocol Buffers do Google, pode permitir execução remota de código e negação de serviço em aplicações Node.js. As falhas, batizadas de Proto6, foram identificadas pelo pesquisador Assaf Morag da Cyera e afetam um ecossistema vasto que inclui Google Cloud, pipelines de CI/CD e bots de WhatsApp.

As versões corrigidas já estão disponíveis: protobuf.js 7.5.6 e 8.0.2, além de protobufjs-cli 1.2.1 e 2.0.2. Quem não atualizar corre risco real de comprometimento.

O que é o Proto6

Proto6 é o nome dado ao conjunto de seis vulnerabilidades (CVE-2026-44289 até CVE-2026-44295) que exploram a forma como o protobuf.js trata esquemas e metadados como dados confiáveis por padrão. Essa falha de validação permite que um atacante manipule o comportamento da aplicação e, em cenários específicos, execute código arbitrário dentro do processo Node.js.

A biblioteca protobuf.js tem mais de 10.600 estrelas no GitHub e é usada internamente por bancos de dados, vector stores, pipelines de inferência de IA, ferramentas de orquestração e SDKs de cloud. A superfície de ataque é enorme.

As seis falhas detalhadas

CVE CVSS Tipo Impacto
CVE-2026-44289 7.5 DoS Recursão ilimitada causa esgotamento de memória
CVE-2026-44290 7.5 DoS Caminhos inseguros em opções de esquema derrubam o processo
CVE-2026-44291 8.1 RCE Gadget de geração de código via prototype pollution
CVE-2026-44292 5.3 Prototype injection Injeção em construtores de mensagens gerados
CVE-2026-44294 5.3 DoS Nomes de campos maliciosos travam código gerado
CVE-2026-44295 8.7 Injeção de código Schema malicioso injeta JavaScript no output estático

A mais crítica das seis é a CVE-2026-44291, com CVSS 8.1. Ela permite execução remota de código quando uma aplicação Node.js aceita input controlado por um atacante. Segundo o pesquisador Vladimir Tokarev, o input atinge um gadget de prototype pollution, e o protobuf.js resolve nomes de tipo por meio de buscas simples em propriedades. Um Object.prototype poluído faz com que uma string controlada pelo atacante pareça um primitivo válido do Protobuf, que é então inserido em uma função gerada e compilada com Function(). Resultado: execução arbitrária de JavaScript.

Quem está afetado na prática

O escopo de impacto é mais amplo do que parece à primeira vista. Qualquer serviço Node.js que desserialize dados Protobuf ou gere código a partir de esquemas com protobuf.js está potencialmente comprometido. A lista inclui:

  • SDKs do Google Cloud para Node.js
  • Pipelines de CI/CD que processam esquemas Protobuf
  • Bots de WhatsApp construídos com Baileys, biblioteca TypeScript de automação do WhatsApp Web
  • Aplicações que usam protobuf.js diretamente para serialização
  • Ferramentas de geração de código com protobufjs-cli

Para bots de WhatsApp, o cenário é particularmente perigoso: uma mensagem especialmente craftada pode crashar o serviço inteiro por meio do CVE-2026-44292, que injeta protótipos nos construtores de mensagens geradas.

Ataque na cadeia de suprimentos

O risco mais sofisticado envolve a cadeia de suprimentos de software. Um atacante pode introduzir um esquema Protobuf malicioso em um repositório ou pipeline de CI/CD. Quando o protobufjs-cli gera código estático a partir desse esquema (CVE-2026-44295, CVSS 8.7), o JavaScript resultante contém identificadores inseguros derivados de nomes controlados pelo atacante — sem sanitização suficiente.

O resultado é injeção de código no build da aplicação. Segredos de build podem vazar, backdoors podem ser inseridos e dependências inteiras podem ser comprometidas sem que nenhuma ferramenta de lint ou análise estática detecte o problema — porque o código malicioso parece legítimo dentro do output gerado.

Esse tipo de ataque é especialmente relevante no contexto brasileiro, onde o ecossistema de fintechs e startups depende pesadamente de microsserviços Node.js e pipelines automatizados. A cadeia de suprimentos de pacotes npm tem sido alvo constante, e o Proto6 adiciona mais um vetor nessa mesma superfície.

Versões vulneráveis e correção

As versões afetadas são:

  • protobuf.js: versões <= 7.5.5 e versões >= 8.0.0 até 8.0.1
  • protobufjs-cli: versões <= 1.2.0 e versões >= 2.0.0 até 2.0.1

As correções estão disponíveis em:

  • protobuf.js 7.5.6 e 8.0.2
  • protobufjs-cli 1.2.1 e 2.0.2

A correção foi publicada pelo mantenedor dcodeIO nos advisory do GitHub Security em 12 de maio de 2026, com atualizações adicionais em 9 de junho. Para quem usa Google Cloud Client Libraries, a recomendação é atualizar os SDKs para as versões que incluem as dependências corrigidas.

O que desenvolvedores precisam fazer

Ação imediata é não negociável. Para qualquer time de engenharia que usa protobuf.js em produção:

  1. Verifique o package-lock.json ou yarn.lock para identificar versões vulneráveis do protobuf.js
  2. Atualize para protobuf.js 7.5.6 ou 8.0.2 imediatamente
  3. Se usar protobufjs-cli, atualize para 1.2.1 ou 2.0.2
  4. Revise pipelines de CI/CD que recebem esquemas de fontes externas
  5. Avalie se bots ou serviços de mensagens usam Baileys com protobuf.js
  6. Considere adicionar validação de esquemas antes da desserialização em código crítico

O desafio central do Proto6 é filosófico: bibliotecas de serialização tratam esquemas como dados confiáveis, mas na era de microsserviços e IA onde esquemas transitam entre serviços, plataformas e terceiros, essa confiança é um ponto cego. Como a própria Cyera observou, quando dados viram comportamento, a superfície de ataque muda de natureza.

Para empresas brasileiras que operam com stack Node.js — e são muitas, especialmente em fintechs como Nubank, Mercado Pago e inúmeras startups — o Proto6 é um lembrete de que a segurança da cadeia de suprimentos JavaScript exige vigilância constante, não apenas na escolha de pacotes, mas na forma como dados e metadados são tratados em tempo de execução.

Referências