Voltar
Falha de negação de serviço no body-parser

Falha de negação de serviço no body-parser pode derrubar servidores com uma única requisição

Aprofundamento CEVIU

Aprofundamento

O CVE-2026-111181 é uma falha de negação de serviço no middleware body-parser, do Express. Um cliente malicioso derruba o servidor com uma única requisição. O body-parser aceita corpos comprimidos por padrão, então a maioria das versões sem patch está exposta.

A causa raiz é que o stream de descompressão sobrevive ao parsing da requisição. Com inflate habilitado, a função contentstream() (chamada por read()) cria o stream e faz pipe da requisição para ele. Quando o corpo termina de ser lido, o body-parser chama next() enquanto a requisição continua ligada ao decoder, sem listener de erro nesse stream. Se o payload tiver um membro gzip válido, seguido de um byte zero e mais dados, o decoder conclui o membro mas não fecha. A raw-body devolve o conteúdo e remove seus listeners, inclusive o de erro. A aplicação responde normalmente. Os bytes restantes chegam ao decoder ainda aberto, que emite erro porque a descompressão já acabou. O único handler restante é o instalado pelo pipe(), que apenas reemite o erro. Sem listener, o Node trata como exceção não capturada e o processo cai.

Um app Express 4 ou 5 padrão se comporta do mesmo jeito que a reprodução mínima com node:http. Se o parser estiver montado globalmente antes da autenticação, a requisição nem precisa casar com rota válida ou passar por checagem de login. Espalhar poucas requisições por nós vulneráveis basta para derrubar um cluster com balanceamento de carga.

Versões afetadas: body-parser 2.0.0 até 2.3.0 (corrigido na 2.4.0) e 1.20.8 e anteriores (corrigido na 1.20.9). A correção é atualizar para 2.4.0 ou superior, ou 1.20.9 ou superior. Quem não precisa de corpos comprimidos pode definir inflate como false, o que rejeita requisições codificadas antes de criar o stream de descompressão. Esse paliativo rejeita corpos comprimidos, então quem precisa aceitá-los deve atualizar.

Por que isso importa

Para quem opera APIs em Express, o ponto sensível é a posição do body-parser na cadeia de middlewares. Se ele roda globalmente antes da autenticação, qualquer cliente anônimo alcança o código vulnerável. Vale conferir a versão instalada, inclusive em dependências transitivas, e decidir se a aplicação realmente precisa aceitar requisições comprimidas. É uma leitura editorial, mas o custo de desligar inflate costuma ser baixo para a maioria das APIs JSON.

Perguntas frequentes

Quais versões do body-parser são afetadas pelo CVE-2026-111181?

As versões 2.0.0 até 2.3.0 e as 1.20.8 e anteriores. A correção saiu na 2.4.0 e na 1.20.9. Apps Express 4 e 5 padrão se comportam da mesma forma.

Como a falha derruba o servidor?

O stream de descompressão continua aberto depois que o body-parser passa a requisição adiante, e ele não tem listener de erro. Bytes extras após um membro gzip válido geram um erro no decoder. Sem handler, o Node trata como exceção não capturada e encerra o processo.

Existe alternativa a atualizar o body-parser?

Sim, se a aplicação não precisa de corpos comprimidos: definir inflate como false rejeita requisições codificadas antes de criar o stream de descompressão. Quem precisa aceitar corpos comprimidos deve atualizar.

Preciso estar autenticado para explorar a falha?

Não necessariamente. Se o parser estiver montado globalmente antes da autenticação, a requisição não precisa casar com rota válida nem passar por checagem de login.

Fontes

Avalie este artigo:
Categoria
CEVIU Web Dev
Publicado
29 de outubro de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser