Web Entwicklung
Sichere NPM-Entwicklung: Best Practices für mehr Sicherheit in deinem Projekt
In der heutigen Welt der Webentwicklung sind NPM-Pakete allgegenwärtig. Sie ermöglichen es Entwicklern, schnell auf eine Vielzahl von Funktionen und Bibliotheken zuzugreifen, ohne das Rad neu erfinden zu müssen. Doch mit dieser Bequemlichkeit kommt auch eine Verantwortung: die Sicherheit. In diesem Artikel werden wir uns ansehen, wie du eine sichere NPM-Entwicklung in deinem Team gewährleisten kannst.
Adrian Natter
Third Party NPM-Pakete sind ein wesentlicher Bestandteil der modernen Webentwicklung. Ob große Frameworks wie React, Angular oder Next.js oder Utility-Bibliotheken wie Lodash und Axios - sie alle helfen Entwicklern, schneller und effizienter zu arbeiten. Doch die Verwendung von Drittanbieter-Paketen bringt auch Sicherheitsrisiken mit sich wie einige prominente Beispiele in der Vergangenheit gezeigt haben.
Risiken bei der Verwendung von Third Party NPM-Paketen
Ein prominentes Beispiel ist der Shai-Hulud NPM-Wurm, der rund 400.000 Zugangsdaten erbeutet hat. Angreifer können bösartigen Code in NPM-Pakete einschleusen, die dann von Entwicklern unwissentlich in ihre Projekte integriert werden. Dies kann dazu führen, dass sensible Daten kompromittiert werden oder sogar ganze Unternehmen lahmgelegt werden. Ein gezielter Angriff um sensible Daten zu stehlen war der S1ngularity Vorfall. Hier wurde ein post-install Skript in ein populäres NPM-Paket eingeschleust, welches dann bei der Installation sensible Daten von Entwicklern an einen Angreifer sendete.
Doch nicht nur bösartiger Code stellt ein Risiko dar. Auch unabsichtliche Sicherheitslücken in Drittanbieter-Paketen können ausgenutzt werden. Eine im Dezember 2025 entdeckte Schwachstelle in React Server Components CVE-2025-55182 auch bekannt als "React2Shell" ermöglicht es Angreifern, Code auf dem Server auszuführen. Die Schwachstelle wurde zwar schnell behoben, aber Systeme die nicht direkt aktualisiert wurden, bleiben anfällig. AWS hat berichtet das Stunden nach der Veröffentlichung der Schwachstelle bereits erste Angriffe von chinesischen Hackern beobachtet wurden.
Wie kann eine sichere NPM-Entwicklung gewährleistet werden?
Die große Abhängigkeit von Third Party NPM-Paketen macht es schwierig, eine sichere NPM-Entwicklung zu gewährleisten. Dennoch gibt es einige bewährte Methoden, die jeder Entwickler befolgen sollte, um die Sicherheit seiner Projekte zu verbessern. Wenn NPM-Pakete eingesetzt werden muss man sich einerseits von Supply-Chain-Angriffen schützen, andererseits aber auch sicherstellen, dass keine Schwachstellen durch veraltete Pakete entstehen.
Best Practices für sichere NPM-Entwicklung
Post-Install Skripte deaktivieren
Eine der effektivsten Maßnahmen gegen bösartigen Code in NPM-Paketen ist das Deaktivieren von Post-Install Skripten. Diese Skripte werden automatisch ausgeführt, wenn ein Paket installiert wird. Dies kann dazu genutzt werden, bösartigen Code auszuführen. Durch das Deaktivieren dieser Skripte kann das Risiko minimiert werden.
Es wird empfohlen, die Post-Install Skripte global zu deaktivieren, um sicherzustellen, dass alle Projekte im Team geschützt sind. Dies kann durch den folgenden Befehl erreicht werden:
$ npm config set ignore-scripts true
In deinem User .npmrc File sollte sich dann folgender Eintrag befinden:
ignore-scripts=trueCooldown Perioden für neue Pakete einführen
Bevor ein neues NPM-Paket in einem Projekt verwendet wird, sollte es eine Cooldown Periode geben. Da sich Schadcode oft in neuen Releases versteckt, ist es sinnvoll, eine Wartezeit von einigen Tagen oder Wochen einzuführen, bevor ein neues Paket in einem Projekt verwendet wird. In dieser Zeit kann die Community das Paket überprüfen und eventuelle Sicherheitslücken identifizieren.
npm bietet dafür ein --before Flag an, mit dem Pakete nur installiert werden, wenn sie vor einem bestimmten Datum veröffentlicht wurden. Zum Beispiel:
$ npm install express --before=2025-11-01
npm ci verwenden
Anstatt npm install zu verwenden, sollte npm ci genutzt werden. Dieser Befehl installiert die Abhängigkeiten basierend auf der package-lock.json Datei.
Wenn lockfiles und package.json nicht synchron sind, schlägt der Befehl fehl. Dies stellt sicher, dass nur die getesteten und genehmigten Versionen der Pakete installiert werden.
$ npm ci
Nicht jedes Paket blind übernehmen
Alle Pakete auf einmal aktualisieren mag verlockend klingen, aber es ist wichtig, jedes Paket sorgfältig zu überprüfen, bevor es aktualisiert wird. Entwickler sollten die Release-Notes lesen, die Community-Aktivität überprüfen und sicherstellen, dass keine neuen Sicherheitslücken eingeführt werden.
Monitoring und automatisierte Sicherheitsprüfungen einführen
Ein laufendes Monitoring der verwendeten NPM-Pakete ist entscheidend. Tools wie Snyk, Dependabot oder npm audit können dabei helfen, bekannte Sicherheitslücken in den verwendeten Paketen zu identifizieren und automatisch Updates vorzuschlagen.
Software Bill of Materials (SBOM) pflegen
Eine Software Bill of Materials (SBOM) ist eine detaillierte Liste aller Komponenten, Bibliotheken und Abhängigkeiten, die in einem Softwareprojekt verwendet werden. Dies ist übrigens verpflichtend für viele Unternehmen die vom Cyber Resilience Act (CRA) betroffen sind. Die Pflege einer SBOM hilft dabei, den Überblick über alle verwendeten NPM-Pakete zu behalten und erleichtert die Identifizierung von potenziellen Sicherheitsrisiken.
Weniger ist mehr
Bei jeder npm Installation sollte hinterfragt werden, ob das Paket wirklich benötigt wird. Jedes zusätzliche Paket erhöht die Angriffsfläche. Weniger Pakete bedeuten weniger potenzielle Schwachstellen. Node.js und das JavaScript-Ökosystem bieten immer mehr native Funktionen, die den Einsatz von Drittanbieter-Paketen überflüssig machen.
Fazit
Eine sichere Softwareentwicklung mit NPM-Paketen erfordert Aufmerksamkeit und Sorgfalt. Durch die Implementierung der oben genannten Best Practices können Entwickler das Risiko von Sicherheitslücken erheblich reduzieren. Falls du Unterstützung bei der Implementierung dieser Maßnahmen in deinem Team benötigst oder eine Sicherheitsüberprüfung einer existierenden Codebasis wünschst, stehen wir dir gerne zur Verfügung. Kontaktiere uns einfach für eine Beratung!
Adrian Natter