[security] deps: vulnerability in undici (high) #96

Closed
opened 2026-07-01 00:06:34 +00:00 by maximus · 0 comments
Owner

Contexte

Detecte par le Defenseur (npm audit) le 2026-06-30. 4 advisories groupees (GHSA-p88m-4jfj-68fv, GHSA-vxpw-j846-p89q, GHSA-35p6-xmwp-9g52, GHSA-g8m3-5g58-fq7m), severite HIGH globale, corrigees en >=6.27.0.

Chaine transitive unique : expo > @expo/cli@54.0.24 > undici@6.25.0 (dev-only, tooling CLI). @expo/cli declare ^6.18.2 (compatible avec 6.27.0, dernier patch de la ligne 6.x). Aucun require('undici') dans le code applicatif.

Travail a faire

  • Ajouter "undici": "^6.27.0" dans le bloc overrides["@expo/cli"] existant (a cote de ws)
  • npm install
  • Verifier npm ls undici >= 6.27.0, npm audit ne liste plus undici

Fichiers concernes

  • package.json (section overrides.@expo/cli)
  • package-lock.json (regenere)

Surface de test

Aucune (dev-only, tooling CLI Metro/Expo). Verification : npx expo start demarre normalement.

Criteres d'acceptation

  • npm audit --json | jq '.vulnerabilities.undici' retourne null
  • npm ls undici >= 6.27.0
  • Override @expo/cli.ws existant inchange

Complexite estimee

Simple.

Plan global (issues #95-#99)

5 vulnerabilites deps trouvees par le meme scan Defenseur, toutes resolubles par overrides scopes dans le meme bloc package.json (aucun code applicatif touche) :

Issue Package Fix Risque
#95 shell-quote react-devtools-core.shell-quote -> ^1.8.4 Nul (dev-only)
#96 undici @expo/cli.undici -> ^6.27.0 Nul (dev-only)
#97 ws 4 nouveaux scopes (react-native, @react-native/dev-middleware, metro, react-devtools-core) -> ^7.5.11 Medium — touche Fast Refresh/dev-middleware, verification manuelle requise
#98 js-yaml 2 scopes distincts (@expo/xcpretty -> ^4.2.0, @istanbuljs/load-nyc-config -> ^3.15.0) Nul (dev-only, istanbul jamais active)
#99 tar @expo/cli.tar -> ^7.5.16+ Nul (dev-only)

Strategie retenue : une seule PR groupant les 9 overrides dans le meme bloc package.json (au lieu de 5 PRs separees), suivie d'un npm install unique et d'une verification manuelle ciblee sur #97 (le seul cas a risque reel : Fast Refresh, debugger websocket, build EAS).

Bloc overrides final propose :

"overrides": {
  "esbuild": "^0.25.0",
  "@xmldom/xmldom": "^0.8.13",
  "uuid": "^11.1.1",
  "postcss": "^8.5.10",
  "@expo/cli": {
    "ws": "^8.20.1",
    "undici": "^6.27.0",
    "tar": "^7.5.19"
  },
  "react-devtools-core": {
    "shell-quote": "^1.8.4",
    "ws": "^7.5.11"
  },
  "react-native": { "ws": "^7.5.11" },
  "@react-native/dev-middleware": { "ws": "^7.5.11" },
  "metro": { "ws": "^7.5.11" },
  "@expo/xcpretty": { "js-yaml": "^4.2.0" },
  "@istanbuljs/load-nyc-config": { "js-yaml": "^3.15.0" }
}

Ordre de verification post-fix :

  1. npm install, npm audit -> 0 finding sur les 5 packages
  2. npx expo start -> boot propre
  3. Fast Refresh sur un fichier source pendant que l'app tourne (valide #97)
  4. Debugger/DevTools websocket stable (valide #97)
  5. Build EAS preview Android (sanity check global, valide que Metro/dev-middleware tolerent le bump)
## Contexte Detecte par le Defenseur (npm audit) le 2026-06-30. 4 advisories groupees (GHSA-p88m-4jfj-68fv, GHSA-vxpw-j846-p89q, GHSA-35p6-xmwp-9g52, GHSA-g8m3-5g58-fq7m), severite HIGH globale, corrigees en `>=6.27.0`. Chaine transitive unique : `expo > @expo/cli@54.0.24 > undici@6.25.0` (dev-only, tooling CLI). `@expo/cli` declare `^6.18.2` (compatible avec 6.27.0, dernier patch de la ligne 6.x). Aucun `require('undici')` dans le code applicatif. ## Travail a faire - [ ] Ajouter `"undici": "^6.27.0"` dans le bloc `overrides["@expo/cli"]` existant (a cote de `ws`) - [ ] `npm install` - [ ] Verifier `npm ls undici` >= 6.27.0, `npm audit` ne liste plus undici ## Fichiers concernes - `package.json` (section `overrides.@expo/cli`) - `package-lock.json` (regenere) ## Surface de test Aucune (dev-only, tooling CLI Metro/Expo). Verification : `npx expo start` demarre normalement. ## Criteres d'acceptation - [ ] `npm audit --json | jq '.vulnerabilities.undici'` retourne null - [ ] `npm ls undici` >= 6.27.0 - [ ] Override `@expo/cli.ws` existant inchange ## Complexite estimee Simple. ## Plan global (issues #95-#99) 5 vulnerabilites deps trouvees par le meme scan Defenseur, toutes resolubles par overrides scopes dans le meme bloc `package.json` (aucun code applicatif touche) : | Issue | Package | Fix | Risque | |---|---|---|---| | #95 | shell-quote | `react-devtools-core.shell-quote` -> `^1.8.4` | Nul (dev-only) | | #96 | undici | `@expo/cli.undici` -> `^6.27.0` | Nul (dev-only) | | #97 | ws | 4 nouveaux scopes (`react-native`, `@react-native/dev-middleware`, `metro`, `react-devtools-core`) -> `^7.5.11` | **Medium** — touche Fast Refresh/dev-middleware, verification manuelle requise | | #98 | js-yaml | 2 scopes distincts (`@expo/xcpretty` -> `^4.2.0`, `@istanbuljs/load-nyc-config` -> `^3.15.0`) | Nul (dev-only, istanbul jamais active) | | #99 | tar | `@expo/cli.tar` -> `^7.5.16`+ | Nul (dev-only) | **Strategie retenue** : une seule PR groupant les 9 overrides dans le meme bloc `package.json` (au lieu de 5 PRs separees), suivie d'un `npm install` unique et d'une verification manuelle ciblee sur #97 (le seul cas a risque reel : Fast Refresh, debugger websocket, build EAS). Bloc `overrides` final propose : ```json "overrides": { "esbuild": "^0.25.0", "@xmldom/xmldom": "^0.8.13", "uuid": "^11.1.1", "postcss": "^8.5.10", "@expo/cli": { "ws": "^8.20.1", "undici": "^6.27.0", "tar": "^7.5.19" }, "react-devtools-core": { "shell-quote": "^1.8.4", "ws": "^7.5.11" }, "react-native": { "ws": "^7.5.11" }, "@react-native/dev-middleware": { "ws": "^7.5.11" }, "metro": { "ws": "^7.5.11" }, "@expo/xcpretty": { "js-yaml": "^4.2.0" }, "@istanbuljs/load-nyc-config": { "js-yaml": "^3.15.0" } } ``` Ordre de verification post-fix : 1. `npm install`, `npm audit` -> 0 finding sur les 5 packages 2. `npx expo start` -> boot propre 3. Fast Refresh sur un fichier source pendant que l'app tourne (valide #97) 4. Debugger/DevTools websocket stable (valide #97) 5. Build EAS preview Android (sanity check global, valide que Metro/dev-middleware tolerent le bump)
maximus added the
type:security
source:defenseur
labels 2026-07-01 00:06:34 +00:00
maximus added the
status:ready
label 2026-07-01 00:17:45 +00:00
maximus added
status:approved
and removed
status:ready
labels 2026-07-01 00:32:45 +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-liste#96
No description provided.