Skip to content

🔒 fix(deps): résorber les 5 vulnérabilités high et les surveiller en CI - #73

Merged
jefBinomed merged 2 commits into
developfrom
chore/audit-deps
Aug 13, 2026
Merged

🔒 fix(deps): résorber les 5 vulnérabilités high et les surveiller en CI#73
jefBinomed merged 2 commits into
developfrom
chore/audit-deps

Conversation

@jefBinomed

@jefBinomed jefBinomed commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Résorbe les 5 vulnérabilités high qui traînaient sur develop, et ferme le trou qui leur permettait de passer inaperçues.

Le trou

npm audit figurait dans scripts/verify.sh mais n'avait aucun job dans la CI. Les vulnérabilités remontaient donc en local — et uniquement pour qui lançait le script — sans jamais rendre la CI rouge. Elles pouvaient dériver indéfiniment.

Les 5 failles

Toutes transitives, aucune dépendance directe concernée :

Paquet Avant → après Nature
brace-expansion 5.0.7 → 5.0.9 DoS par expansion non bornée (OOM), plus contournement du correctif CVE-2026-14257
nanoid 3.3.15 → 3.3.18 Boucles infinies sur taille négative ou nulle
postcss 8.5.16 → 8.5.26 Path traversal via sourceMappingURL → divulgation de .map arbitraires
socket.io-parser 4.2.6 → 4.2.7 Épuisement mémoire zero-attachment
undici 7.28.0 → 7.29.0 Désynchronisation de réponses, injection CRLF, fuite inter-utilisateurs via Cache-Control, injection d'attributs de cookie

socket.io-parser et undici sont les deux qui touchent le chemin d'exécution réel du serveur — le reste relève de la chaîne de build.

Correctif

  • npm audit fix sans --force : 5 bumps patch/mineurs, package.json inchangĂ© ;
  • job audit ajoutĂ© Ă  develop.yml, au seuil high ;
  • scripts/verify.sh alignĂ© sur le mĂŞme seuil ;
  • CLAUDE.md mis Ă  jour.

Pourquoi le seuil high et pas le défaut

Le défaut de --audit-level est null : échec sur n'importe quelle sévérité, jusqu'à info. C'est plus strict que ce qui motive cette PR — les 5 failles corrigées sont toutes high.

Le coût de la stricte n'est pas théorique. npm audit interroge la base d'avis du registre à l'instant du run, alors que le lockfile est gelé. Un avis publié entre deux commits rend donc rouge la PR suivante, quels que soient son auteur et son sujet : le job n'accuse pas le coupable, il accuse le prochain qui passe. Au seuil par défaut, un simple low sur une transitive de build suffirait à bloquer quelqu'un sur un problème qui n'est pas le sien — sans issue propre si le correctif n'existe pas ou impose un --force cassant.

Le seuil high réserve l'interruption aux failles qui la justifient. Les low/moderate restent consultables avec npm audit sans option, et les alertes Dependabot du dépôt (actives) couvrent la veille de fond.

Le job CI et verify.sh partagent volontairement le même seuil : un écart ferait échouer localement ce qui passe en CI, alors que le script sert précisément de garde avant PR.

Validation

./scripts/verify.sh : typecheck, lint, coverage, e2e, build, audit et docs — 7/7 OK. Premier passage complet avec l'audit au vert.

npm audit remontait 5 failles high sur develop, toutes transitives, sans
que rien n'échoue : le contrôle vivait dans scripts/verify.sh mais
n'avait aucun job dans la CI. Les vulnérabilités pouvaient donc dériver
indéfiniment tant que personne ne lançait le script en local.

- npm audit fix (sans --force) : brace-expansion 5.0.7 → 5.0.9,
  nanoid 3.3.15 → 3.3.18, postcss 8.5.16 → 8.5.26,
  socket.io-parser 4.2.6 → 4.2.7, undici 7.28.0 → 7.29.0.
  Cinq bumps patch/mineurs sur des dépendances transitives ;
  package.json est inchangé, aucune dépendance directe ne bouge ;
- job `audit` ajouté à develop.yml. npm audit sort en code non nul dès
  qu'il trouve quelque chose, donc aucune commande supplémentaire n'est
  nécessaire pour faire échouer le job ;
- CLAUDE.md : verify.sh y était présenté comme le miroir de la CI, ce
  qui est faux au niveau ligne Ă  ligne et m'a fait conclure Ă  tort que
  develop était déjà rouge sur l'audit. Nuance ajoutée.

./scripts/verify.sh : typecheck, lint, coverage, e2e, build, audit et
docs OK — audit inclus pour la première fois.
Le défaut de `--audit-level` est `null`, soit un échec sur n'importe
quelle sévérité, `info` comprise. Le job tel qu'ajouté au commit
précédent était donc plus strict que ce qui l'a motivé : les 5 failles
corrigées étaient toutes `high`, mais un simple avis `low` sur une
transitive de build aurait bloqué la CI.

Le coût n'est pas théorique : `npm audit` interroge la base d'avis du
registre à l'instant du run, alors que le lockfile est gelé. Un avis
publié entre deux commits rend rouge la PR suivante, quels que soient
son auteur et son sujet — le job n'accuse pas le coupable, il accuse le
prochain qui passe. Autant réserver cette interruption aux failles qui
la justifient.

- job CI et scripts/verify.sh alignés sur `--audit-level=high` : un
  écart entre les deux ferait échouer localement ce qui passe en CI,
  alors que le script sert de garde avant PR ;
- CLAUDE.md mis en cohérence : le seuil est explicite, et `npm audit`
  sans option reste la commande pour la photo complète.

Les alertes Dependabot du dépôt, déjà actives, couvrent la veille de
fond sur les sévérités inférieures.
@jefBinomed
jefBinomed merged commit 2fd0423 into develop Aug 13, 2026
8 checks passed
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.

1 participant