deps: vitest et @vitest/mocker 4.1.11 → 4.1.12 (GHSA-qxg6-89mg-rqv8, GHSA-xp26-3454-mjgp) #486

Open
opened 2026-10-21 23:50:22 +00:00 by maximus · 0 comments
Owner

Contexte

Relevé par la revue indépendante de la PR #485 (commentaire 26321). Deux avis de gravité modérée sont parus le 2026-10-21, vers 19:50 UTC. npm audit n'est plus à 0, sur main comme sur la PR. Décision de Max (2026-10-21) : issue séparée, #485 reste telle que relue.

Avis (npm audit, 2026-10-21)

ID Paquet Gravité Titre Plage touchée
GHSA-qxg6-89mg-rqv8 @vitest/mocker modérée Vitest: Code injection via unauthenticated manual mock registration >=2.1.0-beta.7 <4.1.12
GHSA-xp26-3454-mjgp @vitest/mocker modérée Vitest: Windows backslash traversal bypasses the @vitest/mocker redirect allowlist fix >=4.1.11 <4.1.12

Surface

vitest est l'outil de test, jamais livré dans l'application : l'app n'est pas touchée. L'exposition se limite au poste de développement et à la CI, pendant npm test.

Correctif attendu

  • vitest et @vitest/mocker (et les autres @vitest/* de même version, s'il y en a) passent de 4.1.11 à 4.1.12 dans package-lock.json seulement : package.json déclare "vitest": "^4.1.9", qui couvre la 4.1.12.
  • Méthode de #483 (PR #485) : laisser npm 11 résoudre, puis ne garder que les entrées de la famille vitest / @vitest/*.
    • npm 10 plante sur l'arbre vitest (crash edgesOut de l'arborist, voir la mémoire du projet).
    • La paire vitest ↔ @vitest/mocker est épinglée mutuellement (piège 9 de /fix-issue).
  • Vérifications :
    • npm ci sous npm 10 et sous npm 11, puis forme canonique sous npm 11 : install --package-lock-only doit laisser le lock identique à l'octet ;
    • npm audit à 0 ;
    • build et tests verts.
  • Niveau normal selon REVIEW.md, si aucun paquet n'est ajouté ni retiré.

Critères d'acceptation

  • npm audit à 0.
  • package.json inchangé ; le diff du lock se limite à la famille vitest.
  • npm ci passe sous npm 10 et sous npm 11 ; npm run build et npm test verts.
  • Une puce Sécurité dans les deux CHANGELOG : outil de test, rien de changé dans l'app livrée.
  • La lecture datée « npm audit à 0 » de CLAUDE.md et de docs/architecture.md est mise à jour.

Liens : PR #485 (commentaire 26321), #483.

Analyse (/analyze, 2026-10-21, main dbe6884)

  • Prémisse confirmée sur main : npm audit signale les deux avis modérés (GHSA-qxg6-89mg-rqv8, GHSA-xp26-3454-mjgp).
  • La famille compte 8 paquets en 4.1.11, épinglés exactement les uns aux autres : vitest, @vitest/expect, @vitest/mocker, @vitest/pretty-format, @vitest/runner, @vitest/snapshot, @vitest/spy et @vitest/utils.
  • Manifestes de la 4.1.12 : dépendances, pairs et engines identiques à la 4.1.11 (hors version de la famille). Seul le pair optionnel @vitest/browser-webdriverio de vitest passe de 4.1.11 à ^4.1.11 ; il n'est pas installé ici.
  • Simulation sur une copie du lock :
    • npx --yes npm@11.21.0 update vitest --package-lock-only --ignore-scripts monte exactement les 8 entrées de la famille en 4.1.12 ; aucune clé ajoutée ni retirée, package.json inchangé ;
    • npm 10.9.4 plante (Cannot read properties of null (reading 'edgesOut')) et ne change rien, comme le note la mémoire du projet.

Décision de Max (2026-10-21)

Lock seulement, comme pour vite (#483) : package.json reste à "vitest": "^4.1.9". Niveau normal, sans /pr-brief.

Travail à faire

  • npx --yes npm@11.21.0 update vitest --package-lock-only --ignore-scripts, puis npm ci. Le diff du lock doit se limiter aux 8 entrées de la famille (versions, resolved, integrity, références internes de la famille, pair optionnel de vitest).
  • Vérifications :
    • git diff --exit-code package.json ;
    • clés de .packages identiques ;
    • chaque integrity égale à npm view <paquet>@4.1.12 dist.integrity ;
    • npm ci passe sous npm 10.9.4 et sous npm 11.21.0, et installe 4.1.12 ;
    • forme canonique : npm@11.21.0 install --package-lock-only --ignore-scripts laisse le lock identique à l'octet ;
    • npm audit à 0 ;
    • sonde rouge, npm run build, npm test.
  • Mutation : le lock de main (4.1.11) ramène les deux avis à npm audit.
  • Une puce Sécurité dans CHANGELOG.md et dans CHANGELOG.fr.md, sous la section non publiée : outil de test, rien de changé dans l'app livrée.
  • La lecture datée « npm audit à 0 au 2026-10-20 (#483) » de CLAUDE.md et de docs/architecture.md passe à la date du merge, avec #486 ; seuls la date et le lien changent.

Surface de test

Aucun code de l'app ne change. Les preuves sont npm audit, npm ci sous les deux npm, la forme canonique et la suite vitest complète : c'est l'outil lui-même qui change, donc la suite entière doit rester verte, 2560 tests à dbe6884.

Complexité

Simple. Prochaine étape : /fix-issue 486.

## Contexte Relevé par la revue indépendante de la PR #485 (commentaire 26321). Deux avis de gravité modérée sont parus le 2026-10-21, vers 19:50 UTC. `npm audit` n'est plus à 0, sur `main` comme sur la PR. **Décision de Max (2026-10-21)** : issue séparée, #485 reste telle que relue. ## Avis (`npm audit`, 2026-10-21) | ID | Paquet | Gravité | Titre | Plage touchée | |---|---|---|---|---| | GHSA-qxg6-89mg-rqv8 | `@vitest/mocker` | modérée | Vitest: Code injection via unauthenticated manual mock registration | `>=2.1.0-beta.7 <4.1.12` | | GHSA-xp26-3454-mjgp | `@vitest/mocker` | modérée | Vitest: Windows backslash traversal bypasses the @vitest/mocker redirect allowlist fix | `>=4.1.11 <4.1.12` | ## Surface `vitest` est l'outil de test, jamais livré dans l'application : l'app n'est pas touchée. L'exposition se limite au poste de développement et à la CI, pendant `npm test`. ## Correctif attendu - `vitest` et `@vitest/mocker` (et les autres `@vitest/*` de même version, s'il y en a) passent de 4.1.11 à 4.1.12 dans `package-lock.json` seulement : `package.json` déclare `"vitest": "^4.1.9"`, qui couvre la 4.1.12. - Méthode de #483 (PR #485) : laisser npm 11 résoudre, puis ne garder que les entrées de la famille `vitest` / `@vitest/*`. - npm 10 plante sur l'arbre vitest (crash `edgesOut` de l'arborist, voir la mémoire du projet). - La paire `vitest` ↔ `@vitest/mocker` est épinglée mutuellement (piège 9 de `/fix-issue`). - Vérifications : - `npm ci` sous npm 10 et sous npm 11, puis forme canonique sous npm 11 : `install --package-lock-only` doit laisser le lock identique à l'octet ; - `npm audit` à 0 ; - build et tests verts. - Niveau normal selon `REVIEW.md`, si aucun paquet n'est ajouté ni retiré. ## Critères d'acceptation - [ ] `npm audit` à 0. - [ ] `package.json` inchangé ; le diff du lock se limite à la famille `vitest`. - [ ] `npm ci` passe sous npm 10 et sous npm 11 ; `npm run build` et `npm test` verts. - [ ] Une puce Sécurité dans les deux CHANGELOG : outil de test, rien de changé dans l'app livrée. - [ ] La lecture datée « `npm audit` à 0 » de `CLAUDE.md` et de `docs/architecture.md` est mise à jour. Liens : PR #485 (commentaire 26321), #483. ## Analyse (`/analyze`, 2026-10-21, `main` `dbe6884`) - Prémisse confirmée sur `main` : `npm audit` signale les deux avis modérés (GHSA-qxg6-89mg-rqv8, GHSA-xp26-3454-mjgp). - La famille compte 8 paquets en 4.1.11, épinglés exactement les uns aux autres : `vitest`, `@vitest/expect`, `@vitest/mocker`, `@vitest/pretty-format`, `@vitest/runner`, `@vitest/snapshot`, `@vitest/spy` et `@vitest/utils`. - Manifestes de la 4.1.12 : dépendances, pairs et `engines` identiques à la 4.1.11 (hors version de la famille). Seul le pair optionnel `@vitest/browser-webdriverio` de `vitest` passe de `4.1.11` à `^4.1.11` ; il n'est pas installé ici. - Simulation sur une copie du lock : - `npx --yes npm@11.21.0 update vitest --package-lock-only --ignore-scripts` monte exactement les 8 entrées de la famille en 4.1.12 ; aucune clé ajoutée ni retirée, `package.json` inchangé ; - npm 10.9.4 plante (`Cannot read properties of null (reading 'edgesOut')`) et ne change rien, comme le note la mémoire du projet. ## Décision de Max (2026-10-21) Lock seulement, comme pour `vite` (#483) : `package.json` reste à `"vitest": "^4.1.9"`. Niveau normal, sans `/pr-brief`. ## Travail à faire - [ ] `npx --yes npm@11.21.0 update vitest --package-lock-only --ignore-scripts`, puis `npm ci`. Le diff du lock doit se limiter aux 8 entrées de la famille (versions, `resolved`, `integrity`, références internes de la famille, pair optionnel de `vitest`). - [ ] Vérifications : - `git diff --exit-code package.json` ; - clés de `.packages` identiques ; - chaque `integrity` égale à `npm view <paquet>@4.1.12 dist.integrity` ; - `npm ci` passe sous npm 10.9.4 et sous npm 11.21.0, et installe 4.1.12 ; - forme canonique : `npm@11.21.0 install --package-lock-only --ignore-scripts` laisse le lock identique à l'octet ; - `npm audit` à 0 ; - sonde rouge, `npm run build`, `npm test`. - [ ] Mutation : le lock de `main` (4.1.11) ramène les deux avis à `npm audit`. - [ ] Une puce Sécurité dans `CHANGELOG.md` et dans `CHANGELOG.fr.md`, sous la section non publiée : outil de test, rien de changé dans l'app livrée. - [ ] La lecture datée « `npm audit` à 0 au 2026-10-20 (#483) » de `CLAUDE.md` et de `docs/architecture.md` passe à la date du merge, avec #486 ; seuls la date et le lien changent. ## Surface de test Aucun code de l'app ne change. Les preuves sont `npm audit`, `npm ci` sous les deux npm, la forme canonique et la suite vitest complète : c'est l'outil lui-même qui change, donc la suite entière doit rester verte, 2560 tests à `dbe6884`. ## Complexité Simple. Prochaine étape : `/fix-issue 486`.
maximus added the
status:triage
type:security
source:human
labels 2026-10-21 23:50:22 +00:00
maximus added
status:in-progress
and removed
status:triage
labels 2026-10-22 01:31:14 +00:00
maximus added
status:ready
and removed
status:in-progress
labels 2026-10-22 01:33:03 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#486
No description provided.