Skip to content

chore(node): a release de segurança do Node de 2026-10-21 (Brotli, TLS); o dev shell está na v24.21.0 #83

Open

Description

@h0ffmann

O que aconteceu

O aviso veio de um post numa rede social; os fatos abaixo vêm do nodejs.org, acessado em 2026-10-22.

Em 2026-10-21 o Node.js publicou uma release de segurança com 10 vulnerabilidades: 4 altas, 3 médias e 3 baixas (nodejs.org, October 2026 Security Releases). As altas:

CVE O que é Linhas afetadas
CVE-2026-111497 escrita fora dos limites no decodificador Brotli, que "permite execução remota de código" 22.x, 24.x, 26.x
CVE-2026-106069 o TLS aceita o certificado de outro host quando o host resolve "frouxamente" para um IP 22.x, 24.x, 26.x
CVE-2026-105483 o TLS aceita o certificado de outro host quando o IP vem escrito com dígitos de largura total 24.x, 26.x
CVE-2026-105482 dns.resolve trunca nomes com o caractere NUL 22.x, 24.x, 26.x

Uma média também é de TLS: CVE-2026-106072, nomes IPv4 não canônicos autenticados por SANs de DNS.

As versões corrigidas, segundo as notas de cada release (todas de 2026-10-21, "This is a security release"):

O 18 e o 20 estão em fim de vida (Previous releases): não recebem a correção. O post do Node diz que versões em fim de vida são sempre afetadas.

Onde o ptbr-writer usa Node

Onde Node Para quê
flake.nix, shell padrão (nixpkgs_3, rev 09063bd, de 2026-10-17) v24.21.0 (nix develop -c node --version) just figure (Archify), just ext-* (npm ci, npx vitest, npx playwright install)
flake.nix, shell .#site (nixpkgs do gleam-website, rev 6510408, de 2026-10-10) v24.21.0 (nix develop .#site -c node --version) just site; o site.yml roda just quality e just site nesse shell
.github/workflows/extension.yml actions/setup-node@v4, node-version: 22 npm ci, npx playwright install --with-deps chromium, Vitest, Playwright
.github/workflows/plugin.yml o Node que vem no ubuntu-latest npm install -g @anthropic-ai/claude-code
opencode/ptbr-writer.js o runtime do OpenCode, não o nosso roda o binário ptbr ask-levels por spawnSync

Fora da lista: o runtime do plugin do Claude Code são binários Rust estáticos (plugins/ptbr-writer/bin/tools.lock), sem Node. A extensão roda no navegador, não no Node; o Node só a compila e testa.

As duas versões do dev shell (v24.21.0) são anteriores à v24.22.1.

Risco aqui

Baixo, mas não zero. Node aqui é ferramenta de desenvolvimento e de CI, não um servidor exposto à internet. Nenhum código do repositório descomprime Brotli nem abre conexão TLS por conta própria (grep por brotli, zlib, https., tls. em opencode/, extension/build.mjs e no bin/ do Archify não acha nada).

O que sobra é o que o Node baixa: npm ci, npm install -g e npx playwright install fazem HTTPS para o registro do npm e para o CDN do Playwright. Um ataque pelas falhas de TLS precisa de um homem no meio e, pelas descrições, de um host escrito como IP; o registro e o CDN são nomes de DNS. Um ataque pelo Brotli precisa de uma resposta comprimida maliciosa de um servidor que o npm ou o Playwright aceitam. O curl das receitas não é Node.

Prioridade média: a correção é só subir a versão, e as quatro altas atingem a linha que usamos.

Pronto quando

  • O Node 24.22.1 fixado à mão no dev shell e no CI: fix(node): node 24.22.1 no dev shell e no CI, e o scan de CVE #86 (este repositório) e fix(gleam-website): node 24.22.1, and a CVE scan in CI picasso#143 (o shell do site); depois do merge do #143, nix flake update gleam-website code-graph e o submódulo forks/picasso (just pins).
  • Tirar a fixação quando o nixpkgs trouxer o nodejs >= 24.22.1: apagar nix/nodejs-bin.nix aqui e labs/gleam-website/nodejs-bin.nix no picasso, e voltar ao nodejs do nixpkgs. O cve.yml avisa quando a 24.22.1 também ficar afetada.
  • O nixpkgs tem nodejs ≥ 24.22.1 e o flake.lock aponta para ele (nix flake update nixpkgs); nix develop -c node --version mostra a versão nova.
  • O shell .#site também: o nixpkgs vem do gleam-website no picasso, e o just pins exige o mesmo rev no submódulo forks/picasso.
  • extension.yml pede node-version: 22.23.4 (ou ≥), não só 22; ou o log do job mostra que 22 já resolve para 22.23.4.
  • plugin.yml: decidir se fixa o Node com actions/setup-node em vez de usar o da imagem.
  • just quality, just ext-e2e e just site passam com a versão nova.

Não conferido

  • ⚠ Os registros em cve.org e nvd.nist.gov: em 2026-10-22 a API do CVE respondeu CVE_RECORD_DNE para CVE-2026-111497 e CVE-2026-106069, e o NVD não devolveu nada. Os IDs, títulos e severidades vêm só do nodejs.org.
  • ⚠ Se o nixpkgs (nixos-unstable) já tem o Node 24.22.1.
  • ⚠ Para qual 22.x o node-version: 22 resolve hoje no runner, e qual Node vem no ubuntu-latest.
  • ⚠ Se o npm ou o Playwright pedem e decodificam respostas em Brotli com o zlib do Node.
  • ⚠ A versão do Node dentro do OpenCode.

Activity

  1. added
    tipo/chorePins, atualizações e manutenção, sem mudar o comportamento
    área/site`site/`: a página em Gleam e o GitHub Pages
    área/ci`.github/workflows/` e a porta de qualidade do CI
    status/triagemAinda não examinado, ou possivelmente obsoleto
    prioridade/médiaA próxima, quando nenhuma alta está aberta
    on Oct 22, 2026
  2. h0ffmann commented on Oct 22, 2026

    @h0ffmann
    OwnerAuthor

    Varredura: onde uma versão afetada foi usada

    Varri o repositório atrás de qualquer registro de uma versão do Node afetada pela release de 2026-10-21: 22.x abaixo de 22.23.4, 24.x abaixo de 24.22.1, 26.x abaixo de 26.12.1, e as linhas 18 e 20, em fim de vida. Foram quatro fontes, lidas em 2026-10-22.

    Fonte Cobertura Achado
    histórico do git 214 commits, todos os arquivos e mensagens, fora os locks nenhuma versão do Node
    PRs e issues 63 PRs, 20 issues, 1 comentário, 0 comentários de revisão nenhuma versão do Node fora desta issue
    logs do CI 230 de 230 execuções baixadas três versões, todas afetadas (abaixo)
    locks, shells e artefatos locais flake.lock, package-lock.json em todo o histórico, build/, dist/, submódulos os dois dev shells em v24.21.0, afetada

    As versões que o CI usou de fato:

    Versão Afetada Onde Execuções Exemplo
    24.21.0 sim, abaixo de 24.22.1 site.yml, o Node do Nix pelo gleam-website 154 39738588833: gleam-website: gleam 1.19.1 | node v24.21.0
    24.21.0 sim release.yml, nix develop 1 39730260690: nodejs-24.21.0
    22.23.3 sim, abaixo de 22.23.4 extension.yml, node-version: 22 23 39734057417: Found in cache @ /opt/hostedtoolcache/node/22.23.3/x64

    O plugin.yml (51 execuções) usa o Node que já vem no runner, e a versão não aparece nos logs ⚠. O aviso "Node.js 20 is deprecated" de 54 logs é do runtime que roda o actions/checkout@v4, não do código do projeto.

    Fora do repositório, a máquina do dono tem o Node do Ubuntu na v22.22.1 (apt, pacote nodejs 22.22.1+dfsg…ubuntu1), também afetada, e o apt ainda não oferece versão nova. O nixpkgs nixos-unstable de hoje (02c087f, 2026-10-20) ainda traz nodejs 24.21.0 e nodejs_22 22.23.3, os dois afetados: um nix flake update sozinho não corrige.

    A correção vem em PR: o Node dos dev shells passa a ser o binário oficial da 24.22.1, fixado pelo sha256 do SHASUMS256.txt do nodejs.org, e o CI fixa a 24.22.1. O shell .#site pega o Node do labs/gleam-website do picasso, então a correção vai também para o picasso.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    prioridade/médiaA próxima, quando nenhuma alta está abertastatus/triagemAinda não examinado, ou possivelmente obsoletotipo/chorePins, atualizações e manutenção, sem mudar o comportamentoárea/ci`.github/workflows/` e a porta de qualidade do CIárea/site`site/`: a página em Gleam e o GitHub Pages

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions