fix(deps): patch @react-navigation/core moderate vuln #118

Closed
defenseur-auto-bot wants to merge 1 commit from defenseur-auto/555fcee5a0-1789711205793 into master
First-time contributor

Vuln modérée détectée dans @react-navigation/core (pas de GHSA assigné).
Fix: npm audit fix met à jour les transitifs dans package-lock.json.
Tests: npm test pass (smoke OK, 9/9).
Source: defenseur-auto 2026-09-18.

Closes #<ISSUE_NUMBER>

🤖 Generated with Claude Code

Closes #117

Vuln modérée détectée dans `@react-navigation/core` (pas de GHSA assigné). Fix: `npm audit fix` met à jour les transitifs dans `package-lock.json`. Tests: `npm test` pass (smoke OK, 9/9). Source: defenseur-auto 2026-09-18. Closes #<ISSUE_NUMBER> <!-- defenseur-auto:dep=@react-navigation/core --> 🤖 Generated with [Claude Code](https://claude.com/claude-code) Closes #117
defenseur-auto-bot added 1 commit 2026-09-18 06:02:19 +00:00
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
defenseur-auto-bot changed title from WIP: fix(deps): patch @react-navigation/core moderate vuln to fix(deps): patch @react-navigation/core moderate vuln 2026-09-18 06:02:20 +00:00
maximus added the
source:defenseur
status:review
type:security
labels 2026-09-25 00:32:11 +00:00
Owner

Review — REQUEST_CHANGES

Résumé : le npm audit fix monte bien @react-navigation/core 7.14.0 → 7.22.1, mais il réécrit 272 entrées du lock, embarque un second SDK Expo (57) imbriqué et retire deux paquets top-level dont la config de build dépend. Le smoke test passe, mais le bundling Metro/Babel est cassé. La branche est en plus en conflit avec master.

Problèmes bloquants

  1. babel-preset-expo et @expo/metro-config disparaissent du top-level (package-lock.json). Ils sont déplacés sous node_modules/expo/node_modules/. Or :

    • babel.config.js:5 résout "babel-preset-expo" depuis la racine du projet ;
    • sql-transformer.js:1 fait require("@expo/metro-config/babel-transformer") depuis la racine.

    Vérifié avec npm ci --ignore-scripts sur le lock de la PR (e15dba2) :

    FAIL babel-preset-expo MODULE_NOT_FOUND
    FAIL @expo/metro-config/babel-transformer MODULE_NOT_FOUND
    

    Le même contrôle sur le lock de la base (fccd7fa) rend OK pour les deux. expo start et le build EAS échoueraient au premier bundle. npm test reste vert (smoke OK) parce que le smoke test ne lance ni Babel ni Metro : la mention « tests pass » dans le corps de la PR ne couvre pas cette régression.

  2. Un SDK Expo 57 est imbriqué dans Expo 54 : node_modules/expo/node_modules/expo@57.0.23, avec @expo/cli@57, expo-modules-core@57, expo-modules-autolinking@57, react-native-worklets@0.10, metro 0.84.5, @react-native/* 0.86/0.87, et un @react-native/metro-config@0.87.1 au top-level (149 entrées ajoutées au total). La cause : des paquets sous expo/ déclarent un peer expo: "*", et npm l'a résolu vers la dernière version publiée. Ce n'est pas un correctif ciblé. Cet arbre contourne aussi les pins de sécurité posés récemment (overrides metro ^0.83.8 de #114, par exemple).

  3. Branche périmée et non fusionnable (mergeable: false). La base est fccd7fa ; depuis, master a reçu #101, #105, #109, #111, #114 et #116, qui modifient tous package.json (overrides) et package-lock.json. Un rebase ne suffit pas : le lock doit être régénéré contre le package.json actuel.

Correctif proposé

Repartir de master et viser la dépendance seule, sans npm audit fix global :

npm install @react-navigation/core@^7.22.1 --package-lock-only   # or a scoped override if needed

Ensuite, vérifier que node_modules/babel-preset-expo et node_modules/@expo/metro-config restent au top-level, qu'aucun node_modules/expo/node_modules/expo n'apparaît, et lancer un vrai bundle (npx expo export --platform android) en plus de npm test. Une piste pour la CI : ajouter au smoke test un require.resolve de ces deux modules, ce qui aurait rougi sur cette PR.

Remarques non bloquantes

  • Le corps de la PR contient un placeholder resté tel quel, Closes #<ISSUE_NUMBER>, en plus du Closes #117 valide. Le message de commit ne contient aucun mot-clé de fermeture.
  • Aucun GHSA n'est cité : l'intérêt réel du bump est invérifiable depuis l'issue.
## Review — REQUEST_CHANGES **Résumé** : le `npm audit fix` monte bien `@react-navigation/core` 7.14.0 → 7.22.1, mais il réécrit 272 entrées du lock, embarque un second SDK Expo (57) imbriqué et retire deux paquets top-level dont la config de build dépend. Le smoke test passe, mais le bundling Metro/Babel est cassé. La branche est en plus en conflit avec `master`. ### Problèmes bloquants 1. **`babel-preset-expo` et `@expo/metro-config` disparaissent du top-level** (`package-lock.json`). Ils sont déplacés sous `node_modules/expo/node_modules/`. Or : - `babel.config.js:5` résout `"babel-preset-expo"` depuis la racine du projet ; - `sql-transformer.js:1` fait `require("@expo/metro-config/babel-transformer")` depuis la racine. Vérifié avec `npm ci --ignore-scripts` sur le lock de la PR (e15dba2) : ``` FAIL babel-preset-expo MODULE_NOT_FOUND FAIL @expo/metro-config/babel-transformer MODULE_NOT_FOUND ``` Le même contrôle sur le lock de la base (fccd7fa) rend `OK` pour les deux. `expo start` et le build EAS échoueraient au premier bundle. `npm test` reste vert (`smoke OK`) parce que le smoke test ne lance ni Babel ni Metro : la mention « tests pass » dans le corps de la PR ne couvre pas cette régression. 2. **Un SDK Expo 57 est imbriqué dans Expo 54** : `node_modules/expo/node_modules/expo@57.0.23`, avec `@expo/cli@57`, `expo-modules-core@57`, `expo-modules-autolinking@57`, `react-native-worklets@0.10`, metro 0.84.5, `@react-native/*` 0.86/0.87, et un `@react-native/metro-config@0.87.1` au top-level (149 entrées ajoutées au total). La cause : des paquets sous `expo/` déclarent un peer `expo: "*"`, et npm l'a résolu vers la dernière version publiée. Ce n'est pas un correctif ciblé. Cet arbre contourne aussi les pins de sécurité posés récemment (overrides metro `^0.83.8` de #114, par exemple). 3. **Branche périmée et non fusionnable** (`mergeable: false`). La base est `fccd7fa` ; depuis, `master` a reçu #101, #105, #109, #111, #114 et #116, qui modifient tous `package.json` (overrides) et `package-lock.json`. Un rebase ne suffit pas : le lock doit être régénéré contre le `package.json` actuel. ### Correctif proposé Repartir de `master` et viser la dépendance seule, sans `npm audit fix` global : ```bash npm install @react-navigation/core@^7.22.1 --package-lock-only # or a scoped override if needed ``` Ensuite, vérifier que `node_modules/babel-preset-expo` et `node_modules/@expo/metro-config` restent au top-level, qu'aucun `node_modules/expo/node_modules/expo` n'apparaît, et lancer un vrai bundle (`npx expo export --platform android`) en plus de `npm test`. Une piste pour la CI : ajouter au smoke test un `require.resolve` de ces deux modules, ce qui aurait rougi sur cette PR. ### Remarques non bloquantes - Le corps de la PR contient un placeholder resté tel quel, `Closes #<ISSUE_NUMBER>`, en plus du `Closes #117` valide. Le message de commit ne contient aucun mot-clé de fermeture. - Aucun GHSA n'est cité : l'intérêt réel du bump est invérifiable depuis l'issue.
Owner

Closing in favor of a targeted fix from current master (see review above): npm audit fix rewrote 272 lock entries, broke babel-preset-expo / @expo/metro-config hoisting and pulled a nested Expo 57 tree. Superseded by /fix-issue 117.

Closing in favor of a targeted fix from current master (see review above): `npm audit fix` rewrote 272 lock entries, broke babel-preset-expo / @expo/metro-config hoisting and pulled a nested Expo 57 tree. Superseded by /fix-issue 117.
maximus closed this pull request 2026-09-25 00:36:56 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#118
No description provided.