Skip to content

fix(deps): fastify 5.12.5, nodemailer 10.0.14 e os pisos de fast-uri e brace-expansion - #1032

Closed
GabrielAderaldo wants to merge 1 commit into
devfrom
fix/deps-audit-fastify-nodemailer
Closed

GabrielAderaldo wants to merge 1 commit into
devfrom
fix/deps-audit-fastify-nodemailer

Conversation

@GabrielAderaldo

Copy link
Copy Markdown
Contributor

Por quê

O audit (produção — blocking) reprovou a #1030 (bump da 1.0.0-rc.4) com 10 advisories high e 6 moderate em dependências de runtime. Todos foram publicados depois do último CI verde da dev (01/10), e a produção atual (rc.3) carrega as mesmas versões. Esta PR entra antes da promoção da rc.4, que passa a incluí-la — mesmo caminho do nodemailer na rc.3.

O que muda

Pacote De → para Advisories fechados
fastify 5.12.1 → 5.12.5 high: GHSA-p68q-wchp-6fh7 (authentication bypass via URL malformada até o not-found encapsulado), GHSA-hwr6-493r-vm6h, GHSA-9q9j-q6p8-xq58 (bypass de validação), GHSA-667r-xxjv-c9mm · moderate: GHSA-4mh8-r7rc-xpvc
nodemailer 9.1.1 → 10.0.14 (major) high: GHSA-prgh-xp8r-p3m5, GHSA-v53p-9fqp-m79j (DoS no addressparser) · moderate: GHSA-g57g-f23g-4646, GHSA-6vj9-mwq6-2f5v, GHSA-8vvx-rff5-p5rq
fast-uri (override) >=3.1.6 → >=3.1.8 <4 high: GHSA-58mr-gqgx-xq4g (acerta exatamente a 3.1.6, o piso antigo), GHSA-qw65-cvwx-89v3 · moderate: GHSA-hrr3-gc8f-f4qj
brace-expansion (override) >=5.0.9 → >=5.0.12 <6 high: GHSA-6j4f-fj2g-mc7p, GHSA-qhr7-859c-m2p7 · moderate: GHSA-q2hr-2g5m-vwhr

3 arquivos: package.json (pins exatos, como cobra production-deps-pinned.test.ts), pnpm-lock.yaml e pnpm-workspace.yaml (pisos + histórico da rodada no comentário, no padrão das anteriores).

nodemailer 10 — a major

O changelog da 10.0.0 declara uma única quebra: Node ≥ 20 (o projeto é 24). O pacote migrou para TypeScript e passou a publicar os próprios tipos, mantendo o layout do @types/nodemailer — os três imports de src/modules/notifications/adapters/email/nodemailer.ts (inclusive nodemailer/lib/smtp-pool e smtp-transport) tipam sem mudança. A 10.0.15 saiu hoje e está na quarentena de minimumReleaseAge; a 10.0.14 é a mais nova madura.

Supersede a #1023 (Dependabot, 10.0.9), que não fecha os advisories do addressparser publicados depois dela.

Gate

🤖 Generated with Claude Code

…e brace-expansion — o audit de produção voltou a recusar a árvore

O `audit (produção — blocking)` reprovou a PR da 1.0.0-rc.4 com 10 advisories high e 6 moderate
em dependências de runtime, todas publicadas depois do último CI verde da dev (01/10). A
produção atual (rc.3) carrega as mesmas versões.

- fastify 5.12.1 → 5.12.5: GHSA-p68q-wchp-6fh7 (authentication bypass via URL malformada até o
  not-found encapsulado), GHSA-hwr6-493r-vm6h e GHSA-9q9j-q6p8-xq58 (bypass de validação de
  request e de header), GHSA-667r-xxjv-c9mm (troca de body por colisão de validação async) — high;
  GHSA-4mh8-r7rc-xpvc (DoS em trailer HTTP/2, moderate, fechado só na 5.12.5).
- nodemailer 9.1.1 → 10.0.14: GHSA-prgh-xp8r-p3m5 e GHSA-v53p-9fqp-m79j (DoS quadrático no
  addressparser) — high; GHSA-g57g-f23g-4646, GHSA-6vj9-mwq6-2f5v, GHSA-8vvx-rff5-p5rq — moderate.
  A única quebra da major 10 é exigir Node ≥ 20 (o projeto é 24). A 10.0.15 saiu hoje e está na
  quarentena de `minimumReleaseAge`; a 10.0.14 é a mais nova madura. Substitui a #1023 (Dependabot,
  10.0.9), que não fecha os advisories posteriores.
- overrides: fast-uri `>=3.1.8 <4` e brace-expansion `>=5.0.12 <6`. A 5ª rodada do fast-uri
  acertou a própria 3.1.6 que era o piso — o aviso do pnpm-workspace.yaml se cumpriu de novo.

`pnpm audit --prod`: No known vulnerabilities found. Gate verde: typecheck, format:check, lint e
test — 11908 testes, 11884 pass, 0 falhas, 19 skipped, 5 todo (#388).

Assisted-by: Claude-Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 5, 2026 19:18

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@GabrielAderaldo

Copy link
Copy Markdown
Contributor Author

Testes locais completos — 78c45f28 (Node 24.16, macOS arm64, compose efêmero core-api-test)

Unitário — pnpm run test

11908 testes: 11884 pass, 0 falhas, 19 skipped, 5 todo (#388). typecheck, format:check e lint verdes. pnpm audit --prod: No known vulnerabilities found.

Integração — scripts/ci/test-integration.ts, uma suíte por vez

Suíte pass fail
contracts 102 0
auth 47 0
partners 50 0
programs 10 0
budget-plans 109 0
financial 213 0
etl · etl:orchestrate · etl:contracts · etl:financial 2 · 2 · 2 · 2 0
storage · photo · logo (MinIO) 13 · 5 · 4 0
infra 21 0
notifications (Mailpit, SMTP real — exercita o nodemailer 10) 98 0 (1 skip)
Total 679 0

etl:budget-plans (2 fail, Table 'legacy.budget_plans' doesn't exist) é a suíte que o integration.yml exclui de propósito — falha igual sem esta PR.

e2e HTTP — pnpm run test:integration:all (Bruno contra o src/server.ts real)

O servidor sobe com fastify 5.12.5 e as migrations aplicam (inclusive a 0020). A coleção fica vermelha, mas idêntica à dev sem esta PR, medida em A/B com o mesmo env:

dev@fbbca89d (fastify 5.12.1, nodemailer 9.1.1) esta PR
Principal 164/191 requests 164/191 requests
Regressão (z-pending-fixes) 28/47 28/47
Asserções que falham 57 57 — diff vazio, nome a nome

Esta PR não introduz regressão no e2e. Os vermelhos já existem na dev, e não têm relação com dependência:

  • ~22× SEC — … -> 403: o RBAC está fixado em bypass no composition root ([auth] 🔓 REVERTER AUTH_RBAC_MODE=bypass — reformular e estruturar permissões do cliente #634), todo autenticado é super-usuário — a coleção ainda espera enforced.
  • scripts/e2e/ não exporta VAN_S3_REGION/VAN_S3_BUCKET: o servidor não sobe sem elas (fail-fast da rc.2) — rodei com um env local à parte. O .env.example também não lista nenhuma VAN_*.
  • foto do usuário 503 (photo-storage-unavailable): S3_ACCESS_KEY_ID=dev-access-key fixo no bruno-all.sh não bate com a credencial do MinIO vinda de secrets/.
  • DELETE /contracts/:id responde 200 onde a coleção espera 405; login do operador de budget-plans dá 401.

Nada disso é escopo desta PR — fica registrado para issue própria.

🤖 Generated with Claude Code

@GabrielAderaldo

Copy link
Copy Markdown
Contributor Author

Superado pelo #1037, que já entrou na dev em e70f5847.

Medido antes de fechar:

este PR dev hoje
fastify 5.12.5 5.12.5 — igual
nodemailer 10.0.14 10.0.15 — mais nova na dev
fast-uri (piso) >=3.1.8 >=3.1.7
brace-expansion (piso) >=5.0.12 >=5.0.11

Os dois pisos daqui são mais altos, e cheguei a preparar uma branch para aproveitá-los. A leitura do pnpm-workspace.yaml desfez isso: a norma registrada ali é fixar a mínima versão que fecha a advisory vigente — "Piso subido para 3.1.6 — a MÍNIMA que fecha as quatro" (linha 45) —, não a mais nova publicada. A advisory vigente de fast-uri corrige em >=3.1.7, então o piso da dev já é essa mínima; a 3.1.7 não é vulnerável, e subir para >=3.1.8 não fecharia advisory alguma.

E não haveria efeito prático: com os pisos da dev, o lock já resolve fast-uri@3.1.8 e brace-expansion@5.0.12. pnpm audit, de produção e de todas as deps, devolve No known vulnerabilities found.

Mergear este PR, por outro lado, rebaixaria o nodemailer de 10.0.15 para 10.0.14.

Nada se perde no fechamento: o assunto inteiro está na dev.

Assisted-by: Claude-Code:claude-opus-5

@GabrielAderaldo
GabrielAderaldo deleted the fix/deps-audit-fastify-nodemailer branch October 6, 2026 23:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants