NIS2 & DORA in force. EU AI Act next — book a demo

Testy penetracyjne Node.js / Express: prototype pollution, npm supply-chain i bezpieczeństwo backendu JavaScript

Node.js dominuje w nowoczesnym ekosystemie backendu JavaScript, ale jego dynamiczna natura i ogromny ekosystem npm tworzą unikalne powierzchnie ataku: prototype pollution, RCE przez deserializację, SSRF przez klientów HTTP (axios, node-fetch) oraz ryzyka supply-chain powiązane z zależnościami tranzytywnymi. Matproof Sentinel wykonuje ukierunkowane pentesty Node.js / Express z proof-of-exploit oraz raportami gotowymi do audytów już od 149 EUR.

Rozpocznij darmowy skan
MW
Written by Malte Wagenbach
Founder of Matproof Security. Specialized in AI-driven penetration testing and EU compliance (DORA, NIS2, ISO 27001, SOC 2).
Last reviewed: May 17, 2026

Dlaczego Node.js wymaga szczególnej uwagi pentestowej

Ekosystem Node.js doświadczył w latach 2023-2024 poważnych incydentów ilustrujących strukturalne ryzyka tego modelu. Podatność HTTP/2 Rapid Reset (CVE-2023-44487, CVSS 7.5) umożliwiła masowe ataki DDoS na eksponowane serwery Node.js, czyli Cloudflare wykrył ataki o natężeniu 398 milionów żądań na sekundę. Luka w jsonwebtoken (CVE-2022-23529) dotknęła praktycznie wszystkich aplikacji Node.js używających najczęściej wdrażanej biblioteki JWT. Najnowsza CVE-2024-39338 w axios wystawiła setki tysięcy aplikacji na SSRF przez zniekształcone względne adresy URL. Poza konkretnymi CVE, wzorce Node.js, takie jak dynamiczna manipulacja właściwości przez JSON.parse oraz rozległe użycie spread operatora, tworzą unikalne wektory dla prototype pollution potencjalnie prowadzące do RCE.

  • CVE-2023-44487 (HTTP/2 Rapid Reset, CVSS 7.5): masowe DDoS przeciw eksponowanym serwerom Node.js HTTP/2, Cloudflare, Google i AWS raportowały w 2023 ataki rzędu 398M żądań/s.
  • CVE-2022-23529 (jsonwebtoken): bypass walidacji podpisu JWT w najczęściej używanej bibliotece do uwierzytelniania Node.js, dotyczy około 9 milionów cotygodniowych pobrań z npm.
  • CVE-2024-39338 (axios SSRF): zniekształcone względne adresy URL umożliwiają ataki SSRF na wewnętrzne endpointy (AWS metadata, usługi wewnętrzne) przez najczęściej używanego klienta HTTP w Node.js (60M+ cotygodniowych pobrań).
  • Prototype pollution: wzorzec ataku specyficzny dla Node.js, eksploatowany w popularnych bibliotekach (lodash, jQuery, async) w celu eskalacji do RCE, wykryty w 13% aplikacji Node.js skanowanych przez Snyk w 2024.
  • Ryzyka npm supply-chain: 1,2 miliona pakietów npm, około 75% z zależnościami tranzytywnymi; znaczące incydenty: event-stream (2018), ua-parser-js (2021), color.js / faker.js (2022).
  • Express.js, najczęściej wdrażany framework Node.js, nie zawiera domyślnych zabezpieczeń przed CSRF, XSS ani injection. Odpowiedzialność za każde security middleware spoczywa na deweloperze.
  • Dla fintechów objętych DORA art. 24 lub SaaS objętych NIS2 udokumentowany pentest Node.js stanowi standard zgodności.

Co konkretnie testujemy w aplikacji Node.js / Express

  • Prototype pollution: injection właściwości do Object.prototype przez JSON.parse, body-parser, qs.parse lub Object.assign, ścieżki eskalacji do RCE przez gadget chains (lodash.template, w stylu kibana).
  • Podatności jsonwebtoken: akceptowany algorytm 'none', algorithm confusion HS256/RS256, jwt-decode używany do weryfikacji (antywzorzec), brak walidacji 'exp' i 'iat'.
  • npm supply chain: pełny audyt zależności (npm audit --production), pakiety z podejrzanymi skryptami post-install, zależności z niezałatanymi CVE w package-lock.json.
  • SSRF przez klientów HTTP: axios (CVE-2024-39338), node-fetch, got, request, bypass walidacji URL przez względne adresy URL, IPv6, kodowanie Unicode, DNS rebinding requests.
  • Header injection (CRLF injection): wstrzyknięcie carriage return w nagłówkach HTTP przez parametry użytkownika. Express do 4.18.2 podatny zgodnie z CVE-2022-24999.
  • Konfiguracja HTTP/2: ekspozycja na CVE-2023-44487 (Rapid Reset), jeśli HTTP/2 włączone bez stream-level rate-limiting; weryfikacja zabezpieczeń settings_max_concurrent_streams.
  • NoSQL injection przez mongoose / mongodb: operatory $ne, $gt, $where w zapytaniach użytkownika; bypass uwierzytelniania przez wstrzyknięty $or/$and; manipulacja arbitralnymi operatorami $set.
  • Niebezpieczna deserializacja: użycie node-serialize (znana podatność), eval() z danymi użytkownika, vm.runInNewContext bez sandboxa, child_process.exec z inputem użytkownika.
  • Konfiguracja Express: middleware uwierzytelniające w złej kolejności, brak helmet (nagłówki bezpieczeństwa), express-rate-limit nieskonfigurowany, cookie-parser bez secret, express-session ze store in-memory na produkcji.
  • Logowanie danych wrażliwych: Winston / Pino skonfigurowane do logowania pełnych nagłówków Authorization, ciał żądań zawierających hasła, parametrów query z tokenami.

Sample finding

Critical

Możliwy do wykorzystania Prototype Pollution prowadzący do RCE w body-parser z gadget chain lodash

Aplikacja Express używa body-parser do przetwarzania żądań JSON bez restrykcyjnej konfiguracji. Testowanie ujawnia, że atakujący może wysłać payload JSON zawierający klucz '__proto__', który globalnie zatruwa Object.prototype. Przykładowo POST /api/profile z body {"__proto__": {"polluted": true}} powoduje, że wszystkie obiekty JavaScript w późniejszym wykonaniu dziedziczą właściwość 'polluted'. Aplikacja używa również lodash.template z częściowo kontrolowanym przez użytkownika szablonem w funkcji generowania raportu, co tworzy klasyczny łańcuch eksploatacji (gadget chain): prototype pollution prowadzi do lodash.template, a następnie do RCE. Test wykazuje wykonanie dowolnego kodu z uprawnieniami procesu Node.js.

Fix: Natychmiastowa aktualizacja do wersji z patchami: body-parser >= 1.20.3, lodash >= 4.17.21. Skonfiguruj body-parser z opcją { strict: true, reviver: function (key, value) { if (key === '__proto__' || key === 'constructor') return undefined; return value; } }, aby blokować wrażliwe klucze. Zastąp lodash.template bibliotekami szablonów w sandboxie (handlebars w trybie strict lub ESLint z regułami no-prototype-builtins). Wprowadź Object.freeze(Object.prototype) przy starcie aplikacji, aby blokować jakiekolwiek root-level pollution. Ustaw strict CSP policy z wyłączonym 'unsafe-eval'. Włącz tryb strict ECMAScript przez 'use strict' we wszystkich modułach.

Reference: CVE-2022-24999 (qs prototype pollution) · CWE-1321 (Prototype Pollution) · OWASP A08:2021 (Software and Data Integrity Failures) · Snyk Research: Prototype Pollution Attacks in Node.js · NIST SP 800-218 (SSDF)

Porównanie opcji pentestu Node.js

Free scanMatproof SentinelTraditional consultancy
Automated scan engine✓ (3-min preview)✓ Full scan✗ Manual only
OWASP Top 10 coveragePartial✓ Complete✓ Complete
Proof-of-exploit evidence✓ Per finding✓ Per finding
Regulatory mapping (DORA/NIS2/ISO 27001)✓ Automated✓ Manual
Audit-ready PDF report✓ Instant✓ 2–4 weeks delivery
Continuous / recurring scans✓ Per deploy✗ Annual engagement
Time to first result~3 min~30 min full scan2–4 weeks
Price€0From €149€8,000–€25,000
Source code review (SAST)✓ On Growth plan✓ Scoped engagement
API testing (REST/GraphQL)✓ Automated✓ Manual

Pakiety pentestów Node.js

Single Run
€149 one-time
  • 1 full pentest scan
  • AI-prioritized findings with CVSS 3.1
  • Proof-of-exploit per finding
  • Audit-ready PDF report
  • Regulatory mapping (DORA, NIS2, ISO 27001)
Buy single run
Recommended
Starter
€299 / month
  • Unlimited scans (up to 3 domains)
  • Continuous monitoring
  • CI/CD integration (GitHub, GitLab)
  • All regulatory mappings
  • Priority support
Start Starter
Growth
€799 / month
  • Unlimited scans + domains
  • Authenticated / White-Box testing
  • API & cloud infrastructure tests
  • Dedicated security account manager
  • 24h SLA response time
Contact for Growth

Najczęściej zadawane pytania o pentest Node.js / Express

Jaka jest różnica między pentestem Node.js a standardowym npm-audit?

npm audit identyfikuje znane CVE w zainstalowanych zależnościach przez bazę GitHub Advisory. Pentest Node.js idzie dalej: testujemy wzorce specyficzne dla runtime (prototype pollution, SSRF przez klientów HTTP, deserializacja), konfigurację middleware Express oraz wykazujemy rzeczywistą eksploatowalność z proof-of-exploit. npm audit raportuje 'jest CVE'. Pentest wykazuje 'oto jak jest eksploatowane w waszym kodzie'.

Jak audytujecie łańcuch dostaw npm?

Nasz proces obejmuje cztery warstwy: (1) statyczna analiza package-lock.json w celu identyfikacji wszystkich zależności tranzytywnych (często 800-2000+ na projekt); (2) krzyżowe odniesienie do NVD, GitHub Advisory i Snyk Database dla niezałatanych CVE; (3) detekcja podejrzanych pakietów (typosquatting, skrypty post-install, nowe pakiety o niskim pobraniu); (4) rekomendacje pinningu i migracji do utrzymywanych alternatyw. W końcowym raporcie dostarczamy pełne mapowanie ryzyk supply-chain.

Moja aplikacja Node.js używa NestJS / Fastify / Koa zamiast Express. Czy pentest ma zastosowanie?

Tak. Pokrywamy cały ekosystem Node.js: NestJS, Fastify, Koa, Hapi, AdonisJS, RedwoodJS oraz Next.js (po stronie API routes). Klasy podatności są w dużej mierze wspólne (prototype pollution, deserializacja, SSRF, supply-chain), ale adaptujemy wektory testowe do każdego frameworka.

Czy pentest może testować nasze API GraphQL w Node.js (Apollo, GraphQL Yoga)?

Tak. API GraphQL w Node.js wymagają specyficznych testów wykraczających poza tradycyjny OWASP API Top 10: query depth limiting (DoS przez zagnieżdżone zapytania), introspection na produkcji (wyciek schematu), ataki batch query oraz autoryzacja na poziomie resolverów.

Jak obsługujecie testy Node.js na architekturach serverless (Lambda, Vercel, Cloudflare Workers)?

Testujemy serverlessowe funkcje Node.js jak każdy endpoint HTTP, ze szczególną uwagą na specyfikę: timing cold-start side-channel, wyciek zmiennych środowiskowych przez stack traces, eskalacja uprawnień IAM role (Lambda), niezamierzone współdzielenie stanu między wywołaniami.

Jak długo trwa kompletny pentest Node.js?

Pełny zautomatyzowany skan (pokrywający 7 głównych klas podatności Node.js) trwa około 60 minut dla typowej aplikacji Express. Dla bardziej złożonych aplikacji (mikroserwisy Node.js, GraphQL) 2-4 godziny. Raport gotowy do audytu w ciągu 24 godzin.

Related

Go deeper — related blog articles

Zabezpiecz swoją aplikację Node.js już teraz

Pierwszy skan w 3 minuty, kompletny pentest Node.js w 60 minut z proof-of-exploit dla każdego znaleziska. Raport gotowy do audytów DORA / NIS2 / ISO 27001 już od 149 EUR.

Rozpocznij darmowy skan