Skip to content

fix(security): #4702 — monter nodemailer en 10 et undici en 7.30 - #4756

Merged
maxgfr merged 2 commits into
issue-4693-deps-runtime-afrom
issue-4702-deps-runtime-b
Oct 7, 2026
Merged

maxgfr merged 2 commits into
issue-4693-deps-runtime-afrom
issue-4702-deps-runtime-b

Conversation

@maxgfr

@maxgfr maxgfr commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Closes #4702

Empilée sur #4751 (#4693, même lockfile) : à merger après elle. Le diff propre à cette PR est le dernier commit.

Résumé

  • notifications : nodemailer ^9.0.1 → ^10.0.15 (6 CVE, dont une injection CRLF SMTP et une validation TLS insuffisante).
    • nodemailer 10 embarque ses types, donc @types/nodemailer est retiré.
    • Son export par défaut est désormais un objet, plus un namespace : nodemailer.Transporter ne compile plus (TS2503). Le script d'aperçu scripts/previewMails.ts importe donc type Transporter nommément, comme le worker le faisait déjà.
    • C'est ce paquet qui fournissait jusqu'ici les types Node, par référence. Or TypeScript 6 n'inclut plus @types/* par défaut : d'où le Cannot find name 'process' qui cassait la PR Dependabot chore(deps): bump nodemailer from 9.0.6 to 10.0.9 #4689. "types": ["node"] est désormais déclaré dans le tsconfig.
    • Seule rupture de la v10 : Node ≥ 20 (le dépôt exige Node 24).
  • app : undici ^7.24.4 → ^7.30.0 (12 CVE, dont un contournement de validation de certificat TLS).
  • next-auth déclare nodemailer en peer optionnel pour son provider Email, que l'app n'utilise pas (ProConnect uniquement). pnpm installait quand même la ligne 7.x vulnérable. Le peer est retiré par override ('next-auth>nodemailer': '-').
  • Transitifs : les dépendances signalées high par pnpm audit --prod (brace-expansion, fast-uri, fast-xml-builder, immutable, source-map-js, tmp) sont re-résolues dans leurs plages, sans override permanent. Quelques correctifs de patch montent au passage (postcss, browserslist, rollup…).

Vérification

  • pnpm audit --prod : plus aucun high ni critique. Restent esbuild (low), fast-xml-parser et uuid (moderate).
  • pnpm typecheck, pnpm lint:check, pnpm format:check : OK.
  • pnpm test : notifications 165/165 ; app 7202/7206 en suite complète. Les 4 échecs sont des timeouts sous forte charge machine ; relancés seuls, ces fichiers passent (103/103).
  • pnpm --filter app build et pnpm --filter notifications build : OK.
  • scripts/previewMails.ts est hors du tsconfig de CI. Vérifié avec un tsc --noEmit ciblé : l'erreur nodemailer a disparu. Restent des erreurs de type sur les payloads d'exemple (round manquant, etc.), antérieures à cette PR et sans lien avec nodemailer.

Limites

  • fetch() global. Le bump d'undici protège le code qui importe le paquet, c'est-à-dire l'Agent mTLS de SUIT (suitClient.ts, scripts/check-suit-connection.ts). Le fetch() global, lui, utilise l'undici embarqué dans Node, quel que soit le package.json. Quand suitClient.ts passe son Agent en dispatcher, la connexion TLS passe par l'undici du paquet, mais l'implémentation de fetch reste celle de Node.
    • Node 24.19.0 et 24.20.0 embarquent undici 7.29.0, dans la plage vulnérable de GHSA-w293-vg96-wgc3 (>= 7.24.1, < 7.29.1). Node 24.21.0 (7 septembre 2026, dernière 24.x publiée) embarque 7.29.1, la version corrigée.
    • Cette faille ne touche que BalancedPool avec une option connect/tls contenant une fonction. fetch() passe par Agent, que l'advisory déclare non affecté, et le dépôt n'utilise BalancedPool nulle part.
  • Image Docker. Le Dockerfile part de node:24-alpine, un tag flottant : la version de Node, donc d'undici embarqué, dépend du jour du build. Épingler Node (version exacte ou digest) est à traiter dans un suivi séparé, hors de cette PR.
  • E2E. e2e.yaml ne se déclenche automatiquement que sur une PR vers alpha. Cette PR, empilée sur fix(security): #4693 — monter next-auth en 4.24.15 et next en 16.3.8 #4751, n'a donc pas de « Test e2e » : la suite tournera une fois fix(security): #4693 — monter next-auth en 4.24.15 et next en 16.3.8 #4751 mergée et cette branche rebasée sur alpha (ou par un lancement manuel du workflow sur la branche).

Test plan

- notifications : nodemailer ^10.0.15 (6 CVE sur la ligne 9). nodemailer 10
  embarque ses types : @types/nodemailer est retiré. Il tirait jusqu'ici les
  types Node par référence, et TypeScript 6 n'inclut plus @types/* par défaut,
  d'où le « Cannot find name 'process' » de la PR Dependabot #4689 :
  types: ["node"] est déclaré explicitement dans le tsconfig.
- app : undici ^7.30.0 (12 CVE dont un contournement de validation TLS).
- next-auth déclare nodemailer en peer optionnel pour son provider Email, non
  utilisé : le peer est retiré par override au lieu d'installer la ligne 7.x.
- Re-résolution, dans leurs plages, des dépendances transitives signalées high
  par pnpm audit --prod (brace-expansion, fast-uri, fast-xml-builder,
  immutable, source-map-js, tmp).
@socket-security

socket-security Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedundici@​7.24.8 ⏵ 7.30.093 +1100 +61100 +197100
Updatednodemailer@​9.0.6 ⏵ 10.0.1598 +3100 +2898 +296 +3100

View full report

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Audit d'accessibilité ultra11y — RGAA

✅ Aucune non-conformité relevée par le moteur statique.

2026-10-07 · 355 fichiers · 2/106 critères tranchés dans ce run · 2 moteur · 104 à compléter par scan ou adjudication

Périmètre de ce run — 0 page rendue : aucun test rendered n'a été exécuté
27 test(s) static — critères : 1.1 · 2.1 · 5.7 · 5.8 · 6.2 · 7.1 · 8.2 · 8.3 · 8.4 · 8.5 · 8.10 · 9.3 · 10.1 · 10.12 · 11.1 · 11.5 · 11.6 · 11.8 · 11.9
3 test(s) rendered prévus — critères : 1.1 · 8.1 · 10.7
Couverture moteur : 49 critère(s) reçoivent un signal normatif — 21 critère(s) peuvent produire un NC décisif · 41 reçoivent des preuves candidates (avec chevauchement) · 1 autre reçoit une recommandation advisory
228 test(s) judgment sur 92 critère(s), tous transmis à l'IA tant qu'ils ne sont pas tranchés

Rapport complet (HTML, captures annotées) : artefact ultra11y-pr-static du run.

Voir le run et son résumé de job

@maxgfr
maxgfr had a problem deploying to build-review-auto October 6, 2026 12:50 — with GitHub Actions Failure
@maxgfr
maxgfr deployed to build-review-auto October 6, 2026 16:34 — with GitHub Actions Active
@maxgfr
maxgfr deployed to review-auto October 6, 2026 16:45 — with GitHub Actions Active
@maxgfr
maxgfr marked this pull request as ready for review October 7, 2026 09:50
@maxgfr
maxgfr requested review from LucasCharrier and Viczei October 7, 2026 09:50

@iterion-forge-egapro iterion-forge-egapro Bot 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.

Revi — aucun problème détecté dans le périmètre revu.

Détails du run IA · Iterion

Run : 01a115c5-686e-7ecb-94f9-bb794002ca4a

Tokens du run au moment de publier : 69 255.

Périmètre revu : correctness: packages/app/package.json, packages/notifications/package.json (version bumps, @types/nodemailer removal) ; tooling/types: packages/notifications/tsconfig.json (types: ["node"] semantics vs other @types devDeps) ; security: pnpm-workspace.yaml override 'next-auth>nodemailer': '-' (verified next-auth 4.24.15 declares nodemailer as optional peer; vulnerable 7.x fully removed from lockfile) ; security/data: pnpm-lock.yaml — nodemailer/undici/next-auth resolutions, remaining undici copies traced to dev-only consumers (@semantic-release/github, jsdom, testcontainers), transitive bumps (brace-expansion, tmp, fast-uri, immutable, source-map-js, fast-xml-builder) all in-range with integrity hashes ; compatibility: nodemailer 10.0.15 bundled types (export default + Transporter/SendMailOptions exported — matches transporter.ts/jobHandler.ts usage); engines node>=20 vs repo node>=24; undici 7.30.0 exists, engines node>=20.18.1 ; requirements: issue #4702 (fetched from forge) vs delivered versions

Revue mono (single model family).

Étape Modèle Harness Effort demandé Tokens
Revue GLM glm-5.3 claude_code max 55 185
Synthèse · GLM glm-5.3 claude_code medium 14 070

Tokens cumulés des appels IA, pas la taille du contexte. L’effort indiqué est le réglage demandé au modèle.

@LucasCharrier LucasCharrier left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Mise à jour des dépendances runtime cohérente avec la PR de base et la configuration TypeScript. Approuvé.

…nodemailer 10

nodemailer 10 expose un objet par défaut, plus un namespace :
nodemailer.Transporter ne compile plus (TS2503). Le type est importé
nommément.
@maxgfr
maxgfr deployed to build-review-auto October 7, 2026 13:42 — with GitHub Actions Active
@maxgfr
maxgfr deployed to review-auto October 7, 2026 13:47 — with GitHub Actions Active
@tokenbureau

tokenbureau Bot commented Oct 7, 2026

Copy link
Copy Markdown

🎉 Deployment for commit 46054f3 :

Ingresses
Docker images
  • 📦 docker pull apache/apisix:3.11.0-debian
  • 📦 docker pull axllent/mailpit:v1.31.0
  • 📦 docker pull docker.io/valkey/valkey:9.0.2
  • 📦 docker pull haproxy:3.2.23-alpine3.24
  • 📦 docker pull harbor.fabrique.social.gouv.fr/egapro/egapro/app:sha-46054f356fd6b0aa09df95b7fcb28dd6ba36a1a6
Debug

@Viczei

Viczei commented Oct 7, 2026

Copy link
Copy Markdown
Collaborator

Retour de revue non bloquant — état consulté : 46054f356fd6b0aa09df95b7fcb28dd6ba36a1a6.

Aucune anomalie bloquante identifiée dans la mise à jour nodemailer / undici lors de la revue initiale. La suppression du peer nodemailer de NextAuth correspond à l'absence d'utilisation du provider Email. Fusionner après #4751, dont cette PR dépend.

Les points ouverts sont consignés en suivi et ne constituent pas une demande de changements de ma part.

@Viczei Viczei left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approbation avec les retours consignés en suivi non bloquant : #4756 (comment). Les points encore ouverts et les limites de vérification restent ceux du commentaire.

@maxgfr
maxgfr merged commit 553dda9 into issue-4693-deps-runtime-a Oct 7, 2026
26 checks passed
@maxgfr
maxgfr deleted the issue-4702-deps-runtime-b branch October 7, 2026 17:12
@maxgfr maxgfr linked an issue Oct 7, 2026 that may be closed by this pull request

This branch was successfully deployed

2 active deployments
build-review-auto — 46054f35 Deployed Oct 7, 2026 by maxgfr via build-app #6599
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.

Sécurité : mettre à jour nodemailer (10.0.2) et undici (7.29.1)

3 participants