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
- expressjs.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 29 de outubro de 2026
- Editoria
- CEVIU Web Dev

