Penetration Test Node.js / Express: Prototype Pollution, Supply-Chain npm e Sicurezza Backend JavaScript
Node.js domina il backend JavaScript moderno, ma la sua natura dinamica e l'ecosistema npm enorme creano superfici di attacco uniche: prototype pollution, RCE via deserializzazione, SSRF via client HTTP (axios, node-fetch), rischi supply-chain per dipendenze transitive. Matproof Sentinel esegue pentest Node.js / Express mirati con prova di sfruttamento e report audit-ready da 149 €.
Perché Node.js richiede attenzione pentest specifica
L'ecosistema Node.js ha vissuto incidenti recenti che illustrano i rischi strutturali. HTTP/2 Rapid Reset (CVE-2023-44487, CVSS 7.5) ha permesso DDoS massivi contro server Node.js esposti — Cloudflare ha rilevato attacchi da 398 milioni di richieste/secondo. La falla jsonwebtoken (CVE-2022-23529) ha compromesso virtualmente tutte le applicazioni Node che usavano la libreria più diffusa per validazione JWT. CVE-2024-39338 in axios espone centinaia di migliaia di applicazioni a SSRF tramite URL relativi malformati. Oltre alle CVE, i pattern Node.js come manipolazione dinamica di proprietà via JSON.parse e uso esteso dello spread operator creano vettori unici di prototype pollution con escalation potenziale a RCE. Per aziende italiane con Node.js (fintech, SaaS, e-commerce), un pentest Node.js documentato è essenziale per DORA / NIS2 / GDPR compliance.
- CVE-2023-44487 (HTTP/2 Rapid Reset, CVSS 7.5): DDoS massivo contro server Node.js HTTP/2 — Cloudflare/Google/AWS hanno rilevato attacchi a 398M req/sec nel 2023.
- CVE-2022-23529 (jsonwebtoken): bypass validazione JWT signature nella libreria più usata per autenticazione Node.js — affligge ≈ 9M download/settimana npm.
- CVE-2024-39338 (axios SSRF): URL relativi malformati permettono SSRF contro endpoint interni (AWS metadata, servizi interni) via la libreria HTTP client più usata di Node.js (60M+ download/settimana).
- Prototype pollution: pattern di attacco Node.js-specifico sfruttato in librerie popolari (lodash, jQuery, async) per escalation a RCE — rilevato in 13% delle applicazioni Node scannate da Snyk nel 2024.
- Rischi supply-chain npm: 1.2M package npm, ~75% con dipendenze transitive; incidenti notori: event-stream (2018), ua-parser-js (2021), color.js/faker.js (2022).
- Express.js, il framework Node più diffuso, non include protezioni default contro CSRF, XSS, injection — la responsabilità di ogni middleware di sicurezza è dello sviluppatore.
- Per fintech italiani sotto DORA Art. 24 o SaaS sotto NIS2 (D.Lgs. 138/2024), pentest Node.js documentato è elemento standard di compliance.
Cosa testiamo specificamente in un'applicazione Node.js / Express
- Prototype pollution: injection di proprietà in Object.prototype via JSON.parse, body-parser, qs.parse, Object.assign — chain di escalation a RCE via gadget chains (lodash.template).
- jsonwebtoken vulnerabilities: algoritmo « none » accettato, confusion HS256/RS256, jwt-decode usato per verifica (anti-pattern), no validation exp/iat.
- npm supply chain: audit completo dipendenze (npm audit --production), package con post-install suspect, dipendenze con CVE non patchate in package-lock.json.
- SSRF via HTTP client: axios (CVE-2024-39338), node-fetch, got, request — bypass validazione URL via relativi, IPv6, encoding Unicode, DNS rebinding.
- Header injection (CRLF): injection di newline negli HTTP header via parametri utente — Express < 4.18.3 vulnerabile (CVE-2022-24999).
- HTTP/2 configuration: exposure a CVE-2023-44487 (Rapid Reset) se HTTP/2 abilitato senza rate-limiting al livello stream; verifica settings_max_concurrent_streams.
- NoSQL injection (mongoose/mongodb): operatori $ne, $gt, $where in query utente; bypass auth via $or/$and; operatori $set arbitrari.
- Insecure deserialization: uso di node-serialize (notoriamente vulnerabile), eval() con dati utente, vm.runInNewContext senza sandbox, child_process.exec con input utente.
- Express configuration: middleware auth in ordine sbagliato, helmet assente (security headers), express-rate-limit non configurato, cookie-parser senza secret.
- Logging dati sensibili: Winston/Pino configurato per loggare Authorization header completi, body con password, query params con token.
Esempio di finding
Prototype Pollution sfruttabile a RCE in body-parser con gadget chain lodash
L'applicazione Express usa body-parser per processare richieste JSON senza configurazione restrittiva. Il test rivela che un attaccante può inviare un payload JSON contenente la chiave « __proto__ » che inquina Object.prototype globalmente. Per esempio, POST /api/profile con body {"__proto__": {"polluted": true}} fa sì che tutti gli oggetti JavaScript ereditino la proprietà 'polluted'. L'applicazione usa lodash.template con template parzialmente controllato dall'utente nella funzione di generazione report, creando una catena di sfruttamento classica: prototype pollution → lodash.template → RCE. Il test dimostra esecuzione di codice arbitrario con privilegi del processo Node.js.
Correzione: Aggiornamento immediato versioni patched: body-parser ≥ 1.20.3, lodash ≥ 4.17.21. Configurare body-parser con opzione reviver per bloccare chiavi sensibili. Sostituire lodash.template con librerie templating sandboxed. Implementare Object.freeze(Object.prototype) all'avvio dell'applicazione per bloccare pollution a livello root. Configurare CSP strict con 'unsafe-eval' disabilitato.
Riferimento: CVE-2022-24999 (qs prototype pollution) · CWE-1321 (Prototype Pollution) · OWASP A08:2021 · Snyk Research: Prototype Pollution Attacks in Node.js
Pentest Node.js: opzioni a confronto
| — | Scan gratuito | Matproof Sentinel | Consulenza tradizionale |
|---|---|---|---|
| Motore di scansione automatizzato | ✓ (anteprima 3 min) | ✓ Scansione completa | ✗ Solo manuale |
| Copertura OWASP Top 10 | Parziale | ✓ Completa | ✓ Completa |
| Prova di exploit | ✗ | ✓ Per finding | ✓ Per finding |
| Mapping normativo (DORA/NIS2/ISO 27001) | ✗ | ✓ Automatizzato | ✓ Manuale |
| Report PDF pronto per l'audit | ✗ | ✓ Immediato | ✓ Consegna 2–4 settimane |
| Scansioni continue / ricorrenti | ✗ | ✓ Per deploy | ✗ Impegno annuale |
| Tempo al primo risultato | ~3 min | ~30 min scansione completa | 2–4 settimane |
| Prezzo | €0 | Da €149 | €8.000–€25.000 |
| Revisione codice sorgente (SAST) | ✗ | ✓ Piano Growth | ✓ In scope |
| Test API (REST/GraphQL) | ✗ | ✓ Automatizzato | ✓ Manuale |
Pacchetti pentest Node.js
- 1 scansione pentest completa
- Risultati prioritizzati da AI con CVSS 3.1
- Proof-of-exploit per ogni finding
- Report PDF (pronto per l'audit)
- Mapping normativo (DORA, NIS2, ISO 27001)
- Scansioni illimitate (fino a 3 domini)
- Monitoraggio continuo
- Integrazione CI/CD (GitHub, GitLab)
- Tutti i mapping normativi
- Supporto prioritario
- Scansioni + domini illimitati
- Test autenticati / White-Box
- Test API e infrastruttura cloud
- Account manager dedicato
- SLA risposta 24h
Domande frequenti sul pentest Node.js / Express
Differenza tra pentest Node.js e audit standard npm-audit?
npm audit identifica CVE note nelle dipendenze installate via GitHub Advisory database. Pentest Node.js va oltre: testiamo pattern runtime specifici (prototype pollution, SSRF via HTTP client, deserialization), Express middleware configuration, e dimostriamo sfruttabilità reale di ogni finding con proof-of-exploit. npm audit dice « c'è una CVE ». Pentest dimostra « ecco come si sfrutta nel tuo codice ».
Come auditate la supply-chain npm?
Quattro layer: (1) analisi statica package-lock.json per identificare tutte le dipendenze transitive (spesso 800-2000+ per progetto); (2) cross-reference con NVD, GitHub Advisory, Snyk Database; (3) detection di package sospetti (typosquatting, scripts post-install, package recenti con pochi download); (4) raccomandazioni di pinning e migration a alternative mantenute.
La mia applicazione Node.js usa NestJS / Fastify / Koa invece di Express. Il pentest si applica?
Sì. Copriamo tutto l'ecosistema Node.js: NestJS, Fastify, Koa, Hapi, AdonisJS, RedwoodJS, e Next.js (API routes). Le classi di vulnerabilità sono largamente comuni (prototype pollution, deserialization, SSRF, supply-chain), ma adattiamo i vettori di test a ogni framework.
Il pentest può testare APIs GraphQL Node.js (Apollo, GraphQL Yoga)?
Sì. APIs GraphQL Node.js richiedono test specifici oltre OWASP API Top 10: query depth limiting (DoS via query nested), introspection in produzione (schema leak), batch query attacks, authorization a livello resolver.
Come gestite i test Node.js su architetture serverless (Lambda, Vercel, Cloudflare Workers)?
Testiamo functions serverless Node.js come ogni endpoint HTTP, con attenzione a specifiche: cold-start timing side-channel, leak di variabili ambiente via stack trace, IAM role privilege escalation (Lambda), shared state involontario tra invocazioni (instance reuse).
Quanto tempo richiede un pentest Node.js completo?
60 minuti per applicazione Express tipica. Per microservizi Node.js / GraphQL: 2-4 ore. Report audit-ready entro 24 ore.
Argomenti correlati
Approfondisci — articoli correlati dal blog
Proteggi la tua applicazione Node.js ora
Primo scan in 3 minuti, pentest Node.js completo in 60 minuti con prova di sfruttamento per ogni finding. Report audit-ready DORA / NIS2 / ISO 27001 da 149 €.
Avvia scan gratuito