O Node.js publicou dez avisos de segurança em 21 de outubro de 2026. Quatro têm gravidade alta, incluindo a falha no descompactador Brotli que pode permitir execução remota de código. Para conferir sua aplicação, identifique a versão do processo em execução e os recursos utilizados. As fichas detalham as condições de cada falha e as versões corrigidas no comunicado oficial.
Aplicativo
Node.js
Data do compilado
Vulnerabilidades
10
A situação “corrigida” indica que o projeto disponibilizou a correção. Confira a versão carregada pelos seus processos após a atualização. As verificações propostas devem usar arquivos e serviços de teste em ambiente isolado.
Gravidade altaCorreção disponível
Byte NUL altera o nome consultado pelas funções de DNS
As funções dns.resolve*() e dns.reverse() encaminham entradas para a biblioteca c-ares como strings da linguagem C. Um byte NUL encerra a string nesse percurso, fazendo a consulta considerar somente o trecho anterior ao caractere. Sua aplicação pode validar um nome completo contra uma lista de domínios permitidos e receber registros de outro domínio, sem erro de resolução.
Casos de uso afetados
Você recebe um hostname informado por um cliente, confere o domínio permitido e usa dns.resolve*() para obter o destino da conexão. Uma entrada com NUL pode produzir uma consulta diferente daquela autorizada pela validação.
Confira na sua instância
Localize as chamadas a dns.resolve*() e dns.reverse(), incluindo as variantes utilizadas por dependências. Acrescente aos testes de validação um hostname com um byte NUL entre duas partes do nome. Confira se a entrada é recusada e se o resolvedor não retorna registros para o prefixo anterior ao NUL. Examine separadamente a validação da aplicação e o comportamento do Node.js atualizado.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
A correção anterior, CVE-2026-48930, abrangia dns.lookup() e as opções de host dos módulos net e tls. Ela não cobria todas as funções deste aviso.
Gravidade altaCorreção disponível
IPv4 com algarismos Unicode pode receber validação de certificado inadequada
Um endereço como 127.0.0.1 pode ser normalizado para um IPv4 comum, mas tls.checkServerIdentity() não o classificava como endereço IP. A verificação recorria aos nomes DNS e ao Common Name do certificado. Com isso, um certificado sem o endereço correspondente no campo SAN de IP podia autenticar a conexão, inclusive quando apresentava um nome DNS numérico com curinga.
Casos de uso afetados
Você permite que o destino de uma conexão TLS seja preenchido com caracteres Unicode. Um IPv4 escrito com algarismos de largura completa pode chegar à verificação de identidade por um caminho diferente daquele usado para a grafia ASCII.
Confira na sua instância
Examine a normalização dos destinos TLS recebidos pela aplicação. Em laboratório, compare a validação de 127.0.0.1 e 127.0.0.1 com um certificado de teste que contenha somente DNS:127.0.0.1, sem SAN de IP correspondente. A grafia Unicode não deve permitir que esse certificado autentique o endereço IP. Confirme que sua aplicação mantém a verificação de identidade habilitada.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
A fonte identifica uma regressão posterior à correção da CVE-2026-48618 e lista somente as linhas 26.x e 24.x para este aviso.
Gravidade altaCorreção disponível
IPv4 com zero inicial pode validar certificado de outro endereço
A conexão de rede e a verificação do certificado podem interpretar de formas diferentes um IPv4 com zero inicial. Para tls.checkServerIdentity(), a normalização WHATWG interpreta 0127 como octal, resultando no primeiro octeto 87. Alguns resolvedores de sistema, como o citado para macOS, interpretam esse mesmo trecho como decimal e conectam ao primeiro octeto 127. Essa divergência permite autenticar o servidor conectado com um certificado emitido para outro IP.
Casos de uso afetados
Sua aplicação aceita endereços IPv4 com zeros iniciais em destinos TLS. O comportamento depende do resolvedor do sistema, por isso um teste feito em outra plataforma pode não representar o servidor que você utiliza.
Confira na sua instância
Procure endereços com zeros iniciais nas configurações e nas entradas aceitas pelo cliente TLS. No mesmo sistema operacional usado pela aplicação, compare o endereço retornado pelo resolvedor com a interpretação do hostname pela API URL. Após atualizar, confira se grafias não canônicas são recusadas na verificação TLS e mantenha um teste de conexão com o endereço canônico e o certificado correspondente.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
A divergência depende da interpretação do resolvedor da plataforma. O aviso cita 0127.0.0.1 como exemplo.
Gravidade altaCorreção disponível
Descompactação Brotli pode corromper memória e permitir execução remota
O decodificador Brotli incluído no Node.js interpreta uma troca inválida de bloco como necessidade temporária de receber mais bytes. Em vez de encerrar com um erro de formato, o processamento em streaming continua acrescentando conteúdo a um buffer interno de oito bytes. A escrita além desse espaço pode corromper a memória do processo. Um atacante capaz de fornecer conteúdo Brotli para descompactação por node:zlib pode provocar encerramento do serviço, exposição de memória ou execução remota de código.
Casos de uso afetados
Você descompacta conteúdo Brotli recebido por requisições, respostas de serviços externos ou arquivos enviados à aplicação. O cenário depende de esse conteúdo alcançar o decodificador de node:zlib, diretamente ou por uma dependência.
Confira na sua instância
Localize as chamadas a brotliDecompress, brotliDecompressSync e createBrotliDecompress, incluindo aquelas feitas por bibliotecas. Identifique quais recebem conteúdo externo e confira process.version no processo que realiza a descompactação. Após atualizar e reiniciar esse processo, valide a leitura de um arquivo Brotli conhecido e o tratamento de erros com uma amostra inválida não exploratória. A aplicação deve lidar com a recusa do formato sem encerrar o serviço.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
O comunicado classifica a falha como alta. Um teste com arquivo inválido comum verifica o tratamento de erros, mas não substitui a conferência da versão corrigida do runtime.
Gravidade moderadaCorreção disponível
Resposta recebida em conexão ociosa pode ser associada à próxima requisição
O agente HTTP pode reutilizar uma conexão keep-alive com uma resposta não solicitada ainda pendente de leitura. A proteção contra esse conteúdo depende de uma consulta de entrada e saída pelo event loop. Quando um trabalho síncrono adia essa consulta, a conexão pode ser atribuída a outra requisição antes de a proteção examinar os bytes recebidos. O cliente então aceita a resposta anterior como resposta à nova requisição.
Casos de uso afetados
Você mantém conexões HTTP abertas para consultar um serviço externo. Um servidor que envia conteúdo durante o período ocioso pode fazer sua aplicação consumir uma resposta que não corresponde à consulta seguinte.
Confira na sua instância
Revise a configuração dos agentes HTTP e identifique as chamadas que reutilizam sockets. Em um teste local, registre a sequência de requisições e respostas de duas chamadas consecutivas com keep-alive. Inclua uma resposta não solicitada durante o intervalo ocioso e confira se ela é descartada, sem aparecer como resultado da segunda chamada. Verifique também a versão do processo que executa esse cliente.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
O aviso complementa a correção incompleta da CVE-2026-48931.
Gravidade moderadaCorreção disponível
Certificado com nome DNS numérico pode autenticar IPv4 não canônico
Grafias de IPv4 como 127.1, 2130706433 e 0x7f.0.0.1 não eram reconhecidas como endereços IP por tls.checkServerIdentity(). A função normalizava o valor e o comparava aos nomes DNS do certificado. Assim, um certificado com DNS:127.0.0.1 podia autenticar esse destino sem possuir o SAN de IP correspondente. A exploração exige um certificado emitido por uma autoridade confiável para o cliente e um resolvedor que aceite essas grafias.
Casos de uso afetados
Você aceita destinos TLS escritos como IPv4 abreviado, inteiro ou hexadecimal em uma plataforma cujo resolvedor reconhece essas formas, como a glibc. A validação pode aceitar um certificado com nome DNS numérico para uma conexão a IP.
Confira na sua instância
Verifique quais formatos de endereço sua aplicação permite nos destinos TLS. Em laboratório, compare a validação de 127.0.0.1 com 127.1 usando um certificado de teste que tenha apenas DNS:127.0.0.1. Confira se a forma abreviada é recusada pelo runtime corrigido e se o certificado sem SAN de IP continua sendo rejeitado para o endereço canônico. Execute a conferência na plataforma usada pelo serviço.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
A gravidade moderada corresponde à classificação individual do aviso, embora as notas de release agrupem esta correção com outra falha de TLS.
Gravidade moderadaCorreção disponível
Snapshots podem repetir UUIDs e números aleatórios entre processos
Os caches de entropia de crypto.randomUUID(), crypto.randomUUIDv7() e crypto.randomInt() podem ser gravados em snapshots de inicialização. Isso ocorre quando essas funções, ou uma API que depende delas, são chamadas durante a construção do snapshot. Processos iniciados com o mesmo artefato reutilizam os valores preservados até a renovação do cache. A repetição pode atingir até 127 UUIDs e cerca de mil valores de randomInt(), causando colisões e permitindo prever valores a partir de outro processo.
Casos de uso afetados
Você constrói snapshots com --build-snapshot e gera identificadores durante a preparação. Instâncias iniciadas com esse mesmo snapshot podem produzir sequências iguais.
Sua aplicação executável usa useSnapshot e chama URL.createObjectURL() durante o build, alcançando indiretamente uma das funções que preenchem o cache.
Confira na sua instância
Revise o código executado durante a criação do snapshot, incluindo chamadas indiretas a funções aleatórias. Inicie dois processos independentes com o mesmo artefato de teste e compare as sequências iniciais de identificadores ou números produzidos pelas funções utilizadas. Após atualizar o Node.js, reconstrua os snapshots e executáveis afetados e repita a comparação para conferir se a sequência compartilhada desapareceu.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
A condição descrita depende do preenchimento do cache durante a construção do snapshot. O simples uso dessas funções em uma aplicação sem esse processo de construção não caracteriza o cenário do aviso.
Gravidade baixaCorreção disponível
Leitura de ZIP pode retornar conteúdo diferente após erro no cabeçalho
A leitura de zipEntry.modified pode encontrar uma divergência entre o cabeçalho local de um ZIP e seu diretório central. O erro é capturado, mas zlib.ZipFile mantém em cache o cabeçalho inválido sem a posição inicial do conteúdo. Uma leitura posterior pode devolver bytes do começo do arquivo escolhidos pelo atacante. A conferência CRC-32 também pode aceitar esses bytes, pois o atacante controla o valor registrado no diretório central.
Casos de uso afetados
Você usa zlib.ZipFile para inspecionar arquivos enviados por clientes e libera a extração por outra biblioteca. O conteúdo aprovado pelo scanner pode ser diferente daquele extraído depois.
Sua rotina consulta a data de modificação das entradas ou compacta novamente o ZIP antes de ler seu conteúdo, alcançando o caminho que mantém o cabeçalho inválido em cache.
Confira na sua instância
Revise o uso de zlib.ZipFile e a ordem entre a leitura de modified e a leitura do conteúdo. Nos testes de regressão, use um ZIP de laboratório com divergência entre o cabeçalho local e o diretório central. Confira se a sequência termina com a rejeição do arquivo, sem retornar bytes do início como conteúdo da entrada. Compare também os arquivos inspecionados com aqueles obtidos pelo extrator utilizado depois.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
A fonte restringe este aviso à linha 26.x e à API zlib.ZipFile.
Gravidade baixaCorreção disponível
Permissão com curinga pode autorizar um caminho mais curto
A busca na árvore de permissões do Node.js pode encerrar a comparação antes de verificar todo o prefixo de uma autorização com curinga. Quando o caminho consultado é mais curto, ele pode ser aceito indevidamente. A falha exige que essa autorização esteja diretamente sob a raiz da árvore de permissões, condição possível quando ela é a única autorização de leitura ou de escrita.
Casos de uso afetados
Você inicia um processo com o Permission Model e concede acesso apenas a arquivos que seguem um padrão. Uma autorização como --allow-fs-read=/etc/passwd.* pode também permitir a leitura de /etc/passwd, embora esse caminho não corresponda ao padrão.
Você usa --allow-fs-write com curinga para limitar os arquivos modificáveis por um script. Um caminho mais curto pode receber acesso quando a autorização ocupa a posição descrita na árvore.
Confira na sua instância
Confira os argumentos --allow-fs-read e --allow-fs-write usados para iniciar o processo. Em um diretório de teste, compare o acesso a um arquivo que corresponde ao padrão com o acesso a outro cujo nome termina antes do prefixo do curinga. Teste cada escopo com uma única autorização, preservando a condição descrita no aviso. O arquivo fora do padrão deve receber permissão negada após a atualização.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
A causa desta falha é diferente daquela registrada na CVE-2026-58043.
Gravidade baixaCorreção disponível
fs.realpathSync revela caminhos fora das permissões de leitura
A função fs.realpathSync() não aplicava as verificações de leitura exigidas pelo Permission Model. Um código executado com --permission e acesso restrito podia consultar a existência de arquivos e resolver destinos de links simbólicos fora dos diretórios autorizados. Isso permite descobrir caminhos do sistema de arquivos mesmo quando a configuração pretende restringir essas consultas.
Casos de uso afetados
Você executa scripts com --permission e limita a leitura a uma pasta de trabalho. Chamadas a fs.realpathSync() podem revelar a existência de arquivos ou o destino de links simbólicos localizados fora dessa pasta.
Confira na sua instância
Examine as chamadas a fs.realpathSync(), distinguindo-as de fs.realpathSync.native(). Em um teste com as mesmas permissões do serviço, consulte um arquivo conhecido fora da pasta autorizada e um link simbólico cujo destino esteja fora dela. Após atualizar, confira se as consultas sem permissão são recusadas e se a resolução dos caminhos permitidos continua funcionando.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
node 26.x
>= 26.0.0, < 26.12.1
26.12.1
node 24.x
>= 24.0.0, < 24.22.1
24.22.1
node 22.x
>= 22.0.0, < 22.23.4
22.23.4
A CVE-2026-21715 havia corrigido somente fs.realpathSync.native(). Este aviso descreve exposição de caminhos, sem afirmar acesso ao conteúdo dos arquivos.
Programador há mais de 20 anos, fundador da Powertic e da Promovaweb. Embaixador do n8n no Brasil e da Baserow, Chatwoot, Miro e Kestra. Membro do Product Team do Mautic.
Canais oficiais
Nossos Links
Encontre a Promovaweb no canal que combina com o seu próximo passo.