
Proof-of-concept exploit per CVE-2026-21710, una vulnerabilità nella gestione delle richieste HTTP di Node.js che causa un TypeError non catturato tramite l'header `__proto__`, portando a un denial of service.
| Campo | Valore |
|---|
| ID CVE | CVE-2026-21710 |
| Pubblicato | 2026-03-30 |
| CVSS v3.1 | 7.5 ALTO (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) |
| CWE | CWE-770 — Allocazione di risorse senza limiti o limitazione |
| Versioni interessate | Node.js 20.x, 22.x, 24.x, 25.x |
| Corretto in | Rilasci di sicurezza di marzo 2026 |
Una vulnerabilità nella gestione delle richieste HTTP di Node.js causa un TypeError non catturato quando viene ricevuta una richiesta con un header denominato __proto__ e l'applicazione accede a req.headersDistinct.
dest["__proto__"] risolve a Object.prototype anziché a undefined, causando la chiamata di .push() su un non-array. Questa eccezione viene lanciata in modo sincrono all'interno di un getter di proprietà e non può essere intercettata dai listener dell'evento error — non può essere gestita senza avvolgere ogni accesso a req.headersDistinct in un try/catch.
Il getter headersDistinct accumula i valori degli header in un oggetto semplice:
const dest = {};
// ...
dest[name] = dest[name] || [];
dest[name].push(value);
Quando name === "__proto__":
dest["__proto__"] restituisce Object.prototype (truthy, non undefined)|| [] viene saltata.push(value) viene chiamato su Object.prototype → TypeError: dest[name].push is not a function| File | Descrizione |
|---|---|
server.js | Server HTTP vulnerabile (accede direttamente a req.headersDistinct) |
poc.js | Exploit proof-of-concept |
Solo per ricerca sulla sicurezza autorizzata / divulgazione responsabile.
node server.js
# In ascolto su http://127.0.0.1:3000
node poc.js
Output previsto:
__proto__ viene inviato; il server va in crash con un TypeError non catturato.