[security] deps: decode-uri-component 0.5.0 publiee, re-tester l'acceptation de #120 (moderate) #126

Closed
opened 2026-10-02 18:08:19 +00:00 by maximus · 1 comment
Owner

Detection

Detecte par le Defenseur defenseur-simpl-liste le 2026-10-02T05:15:09Z. Confirme par npm audit sur master (99ecb73) apres npm ci : 12 cles (8 high, 3 moderate, 1 low).

Findings

  • [MEDIUM] defenseur-simpl-liste-deps-npm-audit-simpl-liste-decode-uri-component — 1147955, DoS par decodage exponentiel d'une entree percent-encodee malformee, borne <=0.4.2
  • [MEDIUM] ...-query-string (parent, 5.0.0 - 9.4.1)
  • [MEDIUM] ...-expo-router (parent, dep directe)

Analyse

#120 a ferme ce sujet le 2026-09-27 comme inatteignable, risque accepte. Fait nouveau : decode-uri-component@0.5.0 est publiee et sort de la borne <=0.4.2. Le declencheur de l'acceptation est donc a re-verifier.

Chemin : expo-router@6.0.23 -> query-string@7.1.3 -> decode-uri-component@0.2.2. query-string@7 declare ^0.2.2 : un override vers 0.5.0 saute trois mineurs 0.x (format de module et API a verifier, non verifie dans cette analyse). Le fixAvailable de npm (downgrade expo-router@5.1.11) est a ecarter.

Resolution suggeree

  1. Lire le format de decode-uri-component@0.5.0 (npm view decode-uri-component@0.5.0 type exports main) : si ESM seul, require() depuis query-string@7 (CJS) casse -> conserver l'acceptation de #120 et fermer avec le constat.
  2. Sinon tester "overrides": { "decode-uri-component": "^0.5.0" } et prouver par l'appel reel, pas par le compteur :
node -e "const q=require('query-string'); console.log(q.parse('a=%E0%A4%A&b=1'))"
npx expo export --platform android
  1. Verifier le deep linking expo-router sur appareil (c'est le consommateur de query-string).

Issue cree par /analyse-vulnerabilite. Le Defenseur ne porte pas encore l'etat accepted (rapport regenere a chaque scan, editer le JSON est un no-op). Pour un faux positif : fermer l'issue avec un commentaire d'analyse. Pour une vraie cause racine cote scanner : ouvrir une issue dans agent-defenseurs.

## Detection Detecte par le Defenseur **defenseur-simpl-liste** le 2026-10-02T05:15:09Z. Confirme par `npm audit` sur master (`99ecb73`) apres `npm ci` : 12 cles (8 high, 3 moderate, 1 low). ## Findings - [MEDIUM] `defenseur-simpl-liste-deps-npm-audit-simpl-liste-decode-uri-component` — 1147955, DoS par decodage exponentiel d'une entree percent-encodee malformee, borne `<=0.4.2` - [MEDIUM] `...-query-string` (parent, `5.0.0 - 9.4.1`) - [MEDIUM] `...-expo-router` (parent, dep directe) ## Analyse #120 a ferme ce sujet le 2026-09-27 comme **inatteignable, risque accepte**. Fait nouveau : `decode-uri-component@0.5.0` est publiee et sort de la borne `<=0.4.2`. Le declencheur de l'acceptation est donc a re-verifier. Chemin : `expo-router@6.0.23 -> query-string@7.1.3 -> decode-uri-component@0.2.2`. `query-string@7` declare `^0.2.2` : un override vers 0.5.0 saute trois mineurs 0.x (format de module et API a verifier, non verifie dans cette analyse). Le `fixAvailable` de npm (downgrade `expo-router@5.1.11`) est a ecarter. ## Resolution suggeree 1. Lire le format de `decode-uri-component@0.5.0` (`npm view decode-uri-component@0.5.0 type exports main`) : si ESM seul, `require()` depuis `query-string@7` (CJS) casse -> conserver l'acceptation de #120 et fermer avec le constat. 2. Sinon tester `"overrides": { "decode-uri-component": "^0.5.0" }` et prouver par l'appel reel, pas par le compteur : ```bash node -e "const q=require('query-string'); console.log(q.parse('a=%E0%A4%A&b=1'))" npx expo export --platform android ``` 3. Verifier le deep linking expo-router sur appareil (c'est le consommateur de `query-string`). --- _Issue cree par /analyse-vulnerabilite. Le Defenseur ne porte pas encore l'etat `accepted` (rapport regenere a chaque scan, editer le JSON est un no-op). Pour un **faux positif** : fermer l'issue avec un commentaire d'analyse. Pour une **vraie cause racine cote scanner** : ouvrir une issue dans `agent-defenseurs`._
maximus added the
type:security
source:defenseur
labels 2026-10-02 18:08:19 +00:00
Author
Owner

Re-test du 2026-10-05 : acceptation de #120 maintenue

Etape 1 de la resolution suggeree, critere d arret atteint :

$ npm view decode-uri-component@0.5.0 type exports
type: "module", exports: { default: "./index.js" }

decode-uri-component@0.5.0 est ESM pur. query-string@7.1.3 fait const decodeComponent = require("decode-uri-component") (CJS) : l override vers 0.5.0 remplacerait la fonction par un namespace de module. Le code vulnerable reste inatteignable (expo-router n appelle que stringify(), cf. #120). Override ecarte.

Fait nouveau : expo-router@58.0.13 (2026-10-03, dist-tag next, SDK 58) retire query-string de ses dependances. Aucun backport sur les lignes de maintenance a ce jour :

ligne version query-string
sdk-54 (installee) 6.0.24 ^7.1.3
sdk-55 55.0.18 ^7.1.3
sdk-56 56.2.21 ^7.1.3
sdk-57 57.0.24 ^7.1.3
next 58.0.13+ absent

Declencheurs de sortie, a surveiller :

npm view expo-router@sdk-54 dependencies --json | jq ".[\"query-string\"]"   # null = backport

ou passage au SDK 58. Les 3 findings moderate (decode-uri-component, query-string, expo-router) restent dans le rapport Defenseur.

## Re-test du 2026-10-05 : acceptation de #120 maintenue Etape 1 de la resolution suggeree, critere d arret atteint : ``` $ npm view decode-uri-component@0.5.0 type exports type: "module", exports: { default: "./index.js" } ``` `decode-uri-component@0.5.0` est **ESM pur**. `query-string@7.1.3` fait `const decodeComponent = require("decode-uri-component")` (CJS) : l override vers 0.5.0 remplacerait la fonction par un namespace de module. Le code vulnerable reste inatteignable (expo-router n appelle que `stringify()`, cf. #120). Override ecarte. **Fait nouveau** : `expo-router@58.0.13` (2026-10-03, dist-tag `next`, SDK 58) **retire** `query-string` de ses dependances. Aucun backport sur les lignes de maintenance a ce jour : | ligne | version | query-string | |---|---|---| | sdk-54 (installee) | 6.0.24 | ^7.1.3 | | sdk-55 | 55.0.18 | ^7.1.3 | | sdk-56 | 56.2.21 | ^7.1.3 | | sdk-57 | 57.0.24 | ^7.1.3 | | next | 58.0.13+ | **absent** | Declencheurs de sortie, a surveiller : ```bash npm view expo-router@sdk-54 dependencies --json | jq ".[\"query-string\"]" # null = backport ``` ou passage au SDK 58. Les 3 findings moderate (`decode-uri-component`, `query-string`, `expo-router`) restent dans le rapport Defenseur.
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#126
No description provided.