Repository navigation
chore(node): a release de segurança do Node de 2026-10-21 (Brotli, TLS); o dev shell está na v24.21.0 #83
Description
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-graphe o submóduloforks/picasso(just pins). - Tirar a fixação quando o nixpkgs trouxer o
nodejs>= 24.22.1: apagarnix/nodejs-bin.nixaqui elabs/gleam-website/nodejs-bin.nixno picasso, e voltar aonodejsdo nixpkgs. Ocve.ymlavisa quando a 24.22.1 também ficar afetada. - O nixpkgs tem
nodejs≥ 24.22.1 e oflake.lockaponta para ele (nix flake update nixpkgs);nix develop -c node --versionmostra a versão nova. - O shell
.#sitetambém: o nixpkgs vem do gleam-website no picasso, e ojust pinsexige o mesmo rev no submóduloforks/picasso. -
extension.ymlpedenode-version: 22.23.4(ou ≥), não só22; ou o log do job mostra que22já resolve para 22.23.4. -
plugin.yml: decidir se fixa o Node comactions/setup-nodeem vez de usar o da imagem. -
just quality,just ext-e2eejust sitepassam 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_DNEpara 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: 22resolve hoje no runner, e qual Node vem noubuntu-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
h0ffmann commentedon Oct 22, 2026
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.
flake.lock,package-lock.jsonem todo o histórico,build/,dist/, submódulosAs versões que o CI usou de fato:
site.yml, o Node do Nix pelogleam-websitegleam-website: gleam 1.19.1 | node v24.21.0release.yml,nix developnodejs-24.21.0extension.yml,node-version: 22Found in cache @ /opt/hostedtoolcache/node/22.23.3/x64O
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 oactions/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, pacotenodejs 22.22.1+dfsg…ubuntu1), também afetada, e oaptainda não oferece versão nova. O nixpkgsnixos-unstablede hoje (02c087f, 2026-10-20) ainda traznodejs24.21.0 enodejs_2222.23.3, os dois afetados: umnix flake updatesozinho 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.txtdo nodejs.org, e o CI fixa a 24.22.1. O shell.#sitepega o Node dolabs/gleam-websitedo picasso, então a correção vai também para o picasso.fix(node): node 24.22.1 no dev shell e no CI, e o scan de CVE
fix(node): node 24.22.1 no dev shell e no CI, e o scan de CVE (#86)
fix(node): o shell do site no Node 24.22.1, pelo picasso 5da5237 (#83) (
fix(node): o shell do site no Node 24.22.1, pelo picasso 5da5237 (#83)
fix(node): node 24.22.1 no dev shell e no CI, e o scan de CVE