
Preuve de concept d'exploitation pour CVE-2026-21710, une faille de gestion des requêtes HTTP dans Node.js provoquant une TypeError non interceptée via l'en-tête __proto__, conduisant à un déni de service.
| Champ | Valeur |
|---|
| ID CVE | CVE-2026-21710 |
| Publié | 2026-03-30 |
| CVSS v3.1 | 7.5 ÉLEVÉ (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) |
| CWE | CWE-770 — Allocation de ressources sans limites ni limitation |
| Versions concernées | Node.js 20.x, 22.x, 24.x, 25.x |
| Corrigé dans | Versions de sécurité de mars 2026 |
Une faille dans la gestion des requêtes HTTP de Node.js provoque une TypeError non interceptée lorsqu'une requête est reçue avec un en-tête nommé __proto__ et que l'application accède à req.headersDistinct.
dest["__proto__"] renvoie Object.prototype plutôt que undefined, ce qui entraîne l'appel de .push() sur un objet qui n'est pas un tableau. Cette exception est levée de manière synchrone à l'intérieur d'un getter de propriété et ne peut pas être interceptée par les écouteurs d'événements error — elle ne peut pas être gérée sans envelopper chaque accès à req.headersDistinct dans un try/catch.
Le getter headersDistinct accumule les valeurs d'en-tête dans un objet simple :
const dest = {};
// ...
dest[name] = dest[name] || [];
dest[name].push(value);
Lorsque name === "__proto__" :
dest["__proto__"] renvoie Object.prototype (valeur véridique, pas undefined)|| [] est ignorée.push(value) est appelé sur Object.prototype → TypeError: dest[name].push is not a function| Fichier | Description |
|---|---|
server.js | Serveur HTTP vulnérable (accède directement à req.headersDistinct) |
poc.js | Preuve de concept d'exploitation |
Réservé à la recherche en sécurité autorisée / à la divulgation responsable.
node server.js
# Écoute sur http://127.0.0.1:3000
node poc.js
Sortie attendue :
__proto__ est envoyé ; le serveur plante avec une TypeError non interceptée.