Principais conclusões
- As vulnerabilidades do Node.js ocorrem por meio de três vetores: o ambiente de execução, as dependências do npm (incluindo as transitivas) e APIs mal configuradas de HTTP, TLS ou do sistema de arquivos.
- A traversal de caminho, a poluição de protótipos, o ReDoS e os bugs de DoS no HTTP/2 são as classes de vulnerabilidades que causarão danos reais em ambientes de produção em 2026.
- Lançamentos recentes de segurança corrigiram problemas de alta gravidade em todas as linhas de versão ativas – porém, as correções para o Node.js 20.x e versões anteriores estão no fim da vida útil (EOL) e não receberão mais correções do desenvolvedor original.
- A detecção exige a combinação do npm audit, de um scanner SCA e de verificações de versão em tempo de execução; nenhuma ferramenta isolada consegue detectar tudo.
A maioria das brechas no Node.js não começa com uma vulnerabilidade “zero-day”. Elas começam com um arquivo `package.json` que ninguém alterou nos últimos 14 meses, rodando em uma versão LTS que, discretamente, chegou ao fim de sua vida útil. As vulnerabilidades do Node.js são excepcionalmente fáceis de ignorar — até que um CVE apareça em uma dependência transitiva da qual você nem sabia que possuía; de repente, o scanner começa a alertar e você não consegue identificar imediatamente o que realmente está exposto.
Este artigo aborda os riscos reais em 2026: o que as recentes atualizações de segurança corrigiram, quais classes de vulnerabilidades continuam aparecendo em ambiente real, como identificá-las em sua pilha de sistemas e as práticas de aplicação de patches que se mostram eficazes sob a pressão de auditorias.
Por que as aplicações Node.js costumam ser alvo de ataques
O Node.js está na interseção de três elementos que os invasores adoram: um enorme ecossistema público de pacotes, um ciclo de eventos JavaScript de thread único que penaliza o uso excessivo da CPU e um ambiente de execução que frequentemente fica exposto diretamente à internet por meio de servidores HTTP e APIs. Essa combinação gera uma ampla superfície de ataque e uma longa lista de implantações sem patches.
Mais especificamente:
- O npm é o maior repositório de pacotes do mundo – e o alvo mais visado por pacotes maliciosos. A Sonatype bloqueou 136.107 ataques de malware de código aberto somente no primeiro trimestre de 2026, sendo que o npm foi responsável por 75% de todos os novos pacotes maliciosos detectados naquele trimestre.
- Execução em uma única thread significa que uma expressão regular lenta ou uma solicitação que sobrecarregue a CPU pode paralisar todo o processo – nenhuma outra solicitação é atendida até que ela seja concluída.
- Implantações de produção de longa duração geralmente rodam em versões do Node em fim de vida (EOL), pois a atualização implica testar todas as dependências quanto a alterações que causem incompatibilidades, o que as equipes adiam indefinidamente.
- Frameworks como Express, Next.js e NestJS constituem a camada voltada para o público de uma grande parte das APIs da web; portanto, qualquer falha na análise de HTTP, nos cabeçalhos ou no roteamento fica diretamente acessível pela internet.
- Profundidade de dependência transitiva – um aplicativo típico do Node.js utiliza centenas de pacotes, e a maioria das equipes audita apenas aqueles que elas mesmas declararam. Tudo o que está abaixo disso é executado com base na confiança.
As vulnerabilidades mais comuns do Node.js
Essas são as categorias que aparecem com mais frequência nos relatórios do CVE, nos resultados dos scanners e nas análises pós-incidente. Cada uma delas tem um padrão de correção diferente; portanto, reconhecê-las imediatamente economiza tempo quando um CVE é divulgado.
Poluição causada por protótipos
A poluição de protótipos permite que um invasor injete propriedades em Object.prototype, que passa a aparecer em todos os objetos no ambiente de execução. Isso geralmente ocorre devido a operações de mesclagem ou clonagem não sanitizadas em entradas JSON — o tipo de coisa que parece inofensiva até você perceber que a propriedade que acabou de definir agora pode ser lida por um código que não tem absolutamente nada a ver com ela. lodash, minimist, e vários carregadores de configuração já tiveram CVEs relatados para esse problema. O impacto varia desde a contornada da autenticação até a execução de código arbitrário, dependendo de qual código posterior utilize a propriedade corrompida.
Percorrimento de caminhos nas APIs de arquivos e HTTP
A percorrida de caminho continua aparecendo nesta lista porque o Node.js está sempre encontrando novos casos extremos. CVE-2025-27210 era uma correção incompleta para um bug específico do Windows no path.normalize() e path.join() envolvendo nomes de dispositivos como CON, PRN e AUX – o tipo de problema que só ocorre no Windows e que quase ninguém testa. A CVE-2025-55130, corrigida em janeiro de 2026, é um problema relacionado: cadeias de links simbólicos criadas propositalmente podem contornar as restrições –allow-fs-read e –allow-fs-write do modelo de permissão. Qualquer código que aceite um caminho de arquivo fornecido pelo usuário está sujeito a esse risco.
Ataque de Negação de Serviço por Expressões Regulares (ReDoS)
O ReDoS é praticamente uma vulnerabilidade característica do Node.js. O ciclo de eventos de thread único faz com que uma expressão regular lenta não apenas retarde uma solicitação, mas pare tudo até que ela seja concluída. Uma string de entrada manipulada — muitas vezes com apenas algumas centenas de caracteres e o padrão de retrocesso adequado — pode ser enviada por um invasor remoto para manter a CPU a 100% e bloquear todas as outras solicitações.
A vulnerabilidade CVE-2024-21538 no cross-spawn é um bom exemplo do alcance desse efeito em cadeia. O cross-spawn é uma dependência transitiva do jest, eslint, webpack, create-react-app e milhares de outras ferramentas — a maioria dos projetos Node.js o possui em várias camadas de dependências sem nem mesmo saber. Uma única vulnerabilidade em um pacote como esse afeta milhões de projetos simultaneamente.
Ataques à cadeia de suprimentos por meio do npm
Pacotes maliciosos no registro do npm — sejam eles publicados abertamente ou injetados por meio de contas de mantenedores comprometidas — são um problema cada vez maior. O typosquatting (publicar “lodesh” na esperança de que alguém não perceba a falta do “e”) já existe há anos, mas os ataques mais sofisticados comprometem diretamente pacotes legítimos e amplamente utilizados. Assim que uma versão maliciosa entra no registro, qualquer projeto que utilize um intervalo de versões (^ ou ~) em vez de uma versão fixa irá baixá-la na próxima instalação.
HTTP/2 e ataques de negação de serviço (DoS) via TLS
A implementação do HTTP/2 no Node.js tem sido uma fonte recorrente de vulnerabilidades de DoS. O CVE-2025-59465 é a falha mais recente no servidor HTTP/2: um quadro HEADERS do HTTP/2 malformado causa uma falha de Negação de Serviço sem a necessidade de autenticação. O CVE-2025-59464 envolve um vazamento de memória no tratamento de erros TLS durante o processamento do certificado do cliente, que se acumula até que o processo fique sem memória. Nenhuma das duas vulnerabilidades requer exploração sofisticada; basta enviar os bytes corretos para uma porta aberta.
Vulnerabilidades do Node.js corrigidas nas versões de segurança de 2026
O Node.js lançou duas atualizações de segurança importantes em 2026 — em 13 de janeiro e 24 de março —, ambas afetando todas as linhas de versão ativas. A atualização de março é particularmente reveladora: uma de suas correções de alta gravidade era um patch incompleto de janeiro, o que significa que a falha no TLS não havia sido totalmente corrigida na primeira vez. Isso não é incomum em ambientes de execução complexos, mas ressalta por que é importante manter-se atualizado com a versão pontual mais recente, e não apenas com a versão principal mais recente.
13 de janeiro de 2026 – Lançamento de atualização de segurança:
|
CVE |
Gravidade |
Afetados |
O que ele faz |
|
CVE-2026-21636 |
Médio |
v25 (modelo de permissões) |
As conexões UDS ignoram as verificações do comando `–allow-net`, permitindo o acesso a serviços locais privilegiados |
|
CVE-2026-21637 |
Médio |
20.x, 22.x, 24.x, 25.x |
Os callbacks do TLS PSK/ALPN lançam exceções não tratadas, causando a falha do servidor e vazamento de descritores de arquivo |
|
CVE-2025-55130 |
Alto |
Todas as linhas ativas |
Cadeias de links simbólicos criadas de forma específica contornam as restrições de –allow-fs-read / –allow-fs-write no modelo de permissões |
|
CVE-2025-55131 |
Alto |
Todas as linhas ativas |
A condição de corrida faz com que o `Buffer.alloc` não seja preenchido com zeros, expondo a memória remanescente |
|
CVE-2025-59465 |
Alto |
Todas as linhas ativas |
Um quadro com cabeçalhos HTTP/2 malformados causa a falha do servidor – não é necessária autenticação |
|
CVE-2025-59464 |
Médio |
Todas as linhas ativas |
Vazamento de memória no processamento de certificados de cliente TLS leva a um ataque DoS remoto ao longo do tempo |
Versões corrigidas: 20.20.0, 22.22.0, 24.13.0, 25.3.0.
24 de março de 2026 – Atualização de segurança
|
CVE |
Gravidade |
Afetados |
O que ele faz |
|
CVE-2026-21637 |
Alto |
20.x, 22.x, 24.x, 25.x |
Correção incompleta de janeiro – as exceções do SNICallback ainda contornam os manipuladores de erros do TLS e causam a falha do processo |
|
CVE-2026-21710 |
Alto |
20.x, 22.x, 24.x, 25.x |
Uma solicitação HTTP com o nome de cabeçalho __proto__ causa uma falha por TypeError não interceptada – não é necessária autenticação |
|
CVE-2026-21713 |
Médio |
20.x, 22.x, 24.x, 25.x |
A comparação HMAC com tempo não constante vaza dados de temporização, com risco potencial de falsificação de MAC em determinadas condições |
|
CVE-2026-21714 |
Médio |
20.x, 22.x, 24.x, 25.x |
Os quadros WINDOW_UPDATE do HTTP/2 no fluxo 0 causam um vazamento de memória que leva ao esgotamento dos recursos |
|
CVE-2026-21717 |
Médio |
20.x, 22.x, 24.x, 25.x |
Cadeias de caracteres semelhantes a números inteiros geram um hash previsível no V8 – entradas criadas especificamente para o `JSON.parse` podem prejudicar significativamente o desempenho |
|
CVE-2026-21711 |
Médio |
v25 (modelo de permissões) |
O servidor UDS realiza a ligação/escuta sem a opção –allow-net, expondo pontos finais de IPC locais |
|
CVE-2026-21712 |
Médio |
24.x, 25.x |
Um IDN com formato incorreto na função url.format() causa uma falha de asserção e leva o processo a travar |
Versões corrigidas: 20.20.2, 22.22.2, 24.14.1, 25.8.2.
Observação: O Node.js 20.x e versões anteriores estão agora em fim de vida útil (EOL) — a versão 18.x desde abril de 2025 e a 20.x desde 30 de abril de 2026 — sem que haja mais correções do desenvolvedor original. v24.16.0 A versão LTS ativa atual é a 24.x (mais recente: v24.16.0).
Como detectar vulnerabilidades no Node.js
Nenhuma ferramenta isolada detecta tudo. As lacunas entre as ferramentas são, na verdade, onde as vulnerabilidades permanecem por mais tempo — algo que não aparece no npm audit porque ainda não está no banco de dados de alertas, algo que aparece no seu scanner SCA, mas não na verificação de versão em tempo de execução. As etapas abaixo constituem a base mínima.
Execute o comando `npm audit` – mas não pare por aí
O npm audit é gratuito e integrado, verificando seus pacotes npm em relação a entradas conhecidas do Common Vulnerabilities and Exposures (CVE) no banco de dados de alertas. Dito isso, ainda é a análise inicial mais rápida:
npm audit--audit-level=high
npm audit fix
Ele não detectará vulnerabilidades no próprio ambiente de execução do Node.js, em pacotes internos não publicados e em qualquer coisa que ainda não tenha sido relatada ao feed de alertas do GitHub. Pense nisso como o mínimo, não como o máximo.
Adicionar um scanner SCA
Uma ferramenta de Análise de Composição de Software – Snyk, Trivy, GitHub Dependabot – preenche as lacunas deixadas pela auditoria do npm: dependências transitivas, questões de licença, CVEs em tempo de execução e imagens base de contêineres. O relatório “Snyk State of Open Source Security” de 2024 constatou que 25% das equipes monitoram apenas dependências diretas e quase 5% não monitoram nenhuma. É exatamente assim que vulnerabilidades transitivas permanecem sem correção por meses. O mesmo relatório constatou que as organizações que investem em treinamento em segurança da cadeia de suprimentos caíram de 53% em 2023 para apenas 35% em 2024 – mesmo com o número de equipes que precisam corrigir ou substituir pacotes vulneráveis permanecendo estável acima de 40%. As equipes estão se empenhando menos para se antecipar ao problema, enquanto este não diminui.
Verifique a versão do seu ambiente de execução do Node.js
Correr node -v de acordo com o cronograma de lançamentos do Node.js e os boletins CVE mais recentes. Em maio de 2026, a versão LTS atual é a 24.x, com a 22.x ainda em manutenção LTS. Abaixo da versão 22.x, você está distribuindo um ambiente de execução vulnerável, independentemente de quão limpa sua árvore de dependências pareça. Essa verificação é frequentemente ignorada porque o ambiente de execução é visto como infraestrutura — algo de que a equipe de plataforma cuida — em vez de código de aplicativo, que é de responsabilidade do desenvolvedor. Na prática, é ambos.
Gerar e monitorar uma SBOM
A Lista de Componentes de Software fornece o gráfico completo de dependências transitivas em um formato que você pode analisar novamente mais tarde, sem precisar recompilar a partir do código-fonte. Gere um com cyclonedx-npm ou syft, salve-o e execute-o semanalmente com os feeds atualizados do CVE. Uma SBOM permite detectar vulnerabilidades que foram divulgadas após o lançamento do produto — sem ela, você teria que recompilar a partir do código-fonte para descobrir isso.
Acompanhe a lista de discussão sobre segurança do Node.js
Inscreva-se na lista de discussão nodejs-sec – ela abrange todos os lançamentos relacionados à segurança no Projeto Node.js e na organização mais ampla do GitHub mantida pela equipe do Node.js. Os avisos pré-lançamento geralmente são divulgados de 3 a 7 dias antes dos patches, o que é tempo suficiente para programar janelas de manutenção e informar a equipe de plantão. A maioria dos engenheiros fica sabendo das vulnerabilidades (CVEs) do Node.js por meio de seus scanners – que já estão um ou dois dias atrasados em relação ao feed de avisos.
Melhores práticas para mitigar vulnerabilidades do Node.js
Automatizar a aplicação de patches
Os ciclos manuais de correção não são escaláveis. Quando um profissional já revisou, testou e implementou uma correção, o CVE já está público há tempo suficiente para que varreduras oportunistas o detectem. O relatório de 2024 da Snyk constatou que 74% das equipes estabelecem metas de SLA de uma semana ou menos para vulnerabilidades de alta gravidade — mas, mesmo assim, 52% regularmente não cumprem esses prazos. A dificuldade não está no esforço; está no volume enorme de itens a serem corrigidos.
A automação é o que realmente preenche essa lacuna: atualizações automatizadas de dependências na integração contínua (CI), aplicação automatizada de patches em tempo de execução na camada de infraestrutura e alertas automatizados que encaminham os CVEs certos às pessoas certas, em vez de sobrecarregar todo mundo com alertas irrelevantes do scanner.
Bloqueie e fixe suas dependências
Utilização package-lock.json (ou pnpm-lock.yaml ou yarn.lock) e faça o commit. Em seguida, vá além: defina as dependências diretas com versões específicas em package.json, e não intervalos. O ^ e ~ Os operadores são o que faz com que uma “correção” em um pacote transitivo altere silenciosamente o comportamento do seu ambiente de execução, sem que você precise fazer nada. Na CI, execute npm ci em vez de npm install – a compilação falha caso haja qualquer discrepância entre o arquivo de bloqueio e o manifesto, permitindo que você detecte o problema antes que o produto seja lançado.
Mantenha-se atualizado com as versões LTS ativas
O projeto Node.js segue um cronograma LTS previsível: as versões com números pares tornam-se LTS, enquanto as ímpares não. O Node.js 20.x chegou ao fim de vida útil em 30 de abril de 2026, e o 24.x é a versão LTS ativa. O Node.js 18.x chegou ao fim de vida útil em abril de 2025; o 16.x, em setembro de 2023. Se você estiver usando qualquer uma dessas versões, estará acumulando CVEs sem correção por parte do desenvolvedor original.
O processo de atualização das versões 16.x, 18.x ou 20.x para as versões 22.x ou 24.x costuma ser viável, mas exige que todas as dependências sejam testadas. O principal obstáculo, na prática, costuma ser um ou dois pacotes que não acompanharam as novas APIs do Node — vale a pena identificá-los e resolvê-los, em vez de continuar usando um ambiente de execução em fim de vida (EOL) indefinidamente.
Validar todas as entradas no limite
Poluição de protótipos, traversal de caminho, ReDoS, injeção de comando – todas essas são, em essência, falhas na validação de entrada. Um validador de esquema como o zod, o joi ou o ajv em cada ponto de entrada HTTP detecta a maior parte dessas falhas antes que elas cheguem à lógica da sua aplicação. Não incorpore entradas do usuário em objetos. Não passe entradas do usuário para `exec`, `eval`, `Function` ou padrões de expressões regulares sem limites. Nada disso é um trabalho glamoroso, mas é aí que reside o risco real.
Executar com o mínimo de privilégios
Utilize o modelo de permissões do Node.js quando for apropriado (lembrando que ele ainda é experimental e apresenta lacunas documentadas). Execute contêineres como usuários não root. Utilize sistemas de arquivos somente leitura sempre que possível, remova as capacidades desnecessárias e trate o modelo de permissões como uma camada entre várias, em vez de como uma sandbox completa.
Está usando uma versão do Node.js que chegou ao fim da vida útil (EOL)? A TuxCare oferece cobertura de segurança estendida
Nem toda organização consegue fazer a atualização de acordo com o cronograma do fornecedor. O Node.js 16.x chegou ao fim da vida útil (EOL) em setembro de 2023. O Node.js 18.x seguiu o mesmo caminho em abril de 2025. Para as equipes que ainda estão executando essas versões — muitas vezes devido a uma cadeia de dependências específica, a um requisito de conformidade ou a uma migração em andamento —, o problema prático é claro: as vulnerabilidades (CVEs) continuam se acumulando sem que haja um patch disponível do desenvolvedor original.
O Suporte de Ciclo de Vida Ilimitado (ELS) da TuxCare para o Node.js resolve essa questão diretamente. A TuxCare faz o backport de patches de segurança para o Node.js 12, 14, 16, 18 e 20 — fornecidos aos seus sistemas pelo tempo que você precisar, sem precisar esperar por uma versão do desenvolvedor original que não vai sair. Isso é particularmente útil para:
- Equipes em meio ao processo de migração que precisam de suporte durante a transição para uma linha LTS compatível
- Organizações com requisitos de conformidade (PCI DSS, SOC 2, FedRAMP) que tratam os ambientes de execução em fim de vida útil (EOL) como constatações automáticas de auditoria
- Equipes de infraestrutura que gerenciam grandes frotas, nas quais as atualizações do Node.js exigem testes coordenados em dezenas de serviços
Os patches da ELS cobrem as vulnerabilidades de segurança (CVEs) que realmente importam — aquelas que aparecem no seu scanner e nos relatórios de conformidade — sem exigir que você avance mais rápido do que o permitido pelo seu plano de migração.
Reduza o risco de vulnerabilidades do Node.js com a TuxCare
As vulnerabilidades do Node.js não vão diminuir. O npm é muito grande, o ambiente de execução está amplamente implantado e o intervalo entre o momento em que um CVE é divulgado e quando a maioria das equipes realmente aplica a correção continua sendo preocupantemente longo. As equipes que administram isso bem não estão fazendo nada de extraordinário — elas automatizaram as partes enfadonhas, monitoram os feeds certos, sabem o que há em sua árvore de dependências e têm um plano para o que acontecerá quando uma linha de lançamento chegar ao fim da vida útil (EOL).
Tanto a detecção quanto a mitigação são necessárias. A detecção indica o que está com problema; a mitigação é onde o trabalho de fato acontece. Entre as duas, o fator mais importante geralmente é o tempo de aplicação do patch — reduzir o intervalo entre a divulgação e a implantação é o que diminui a exposição no mundo real, e não apenas a limpeza detectada pelo scanner.
Para tirar dúvidas sobre a estratégia de aplicação de patches ou o suporte estendido para versões do Node.js que chegaram ao fim da vida útil (EOL), entre em contato com um especialista em segurança da TuxCare.




