Zurück zum Blog
Security
FortgeschrittenFürPlatform EngineersSecurity EngineersDevSecOps
7 min

npm-Lieferkettenangriffe abwehren: Was wirklich hilft

Das npm-Ökosystem hat sich 2026 stark verändert. Was jetzt standardmäßig sicher ist, was Sie diese Woche selbst einschalten sollten und welche Lücken weiterhin ganz bei Ihnen liegen.

npm-lieferkettenangriffsupply-chain-securitytrusted-publishingnpm-provenancedevsecopsci-cd-sicherheit
Inhalt

Wenn Sie zuletzt nach dem Shai-Hulud-Wurm über npm-Lieferkettensicherheit gelesen haben, ist Ihr mentales Modell ein Jahr alt. 2026 kam vieles dazu, und ein Teil der damals überall empfohlenen Maßnahmen erledigt npm inzwischen selbst.

Hier steht, was heute tatsächlich gilt: was Sie geschenkt bekommen, was weiterhin optional ist, und was niemand für Sie löst.

npm-Lieferkettenangriffe abwehren: was Standard ist, was optional, und was bei Ihnen bleibt.

Der Angriff, auf den das alles antwortet

GitHub wurde am 14. September 2025 über den Shai-Hulud-Angriff informiert. Die Wiederholung lohnt, weil jede Maßnahme unten von ihm geprägt ist:

  • Einstieg über kompromittierte Maintainer-Konten, nicht über eine Paketschwachstelle.
  • Eingeschleust wurden bösartige Post-Install-Skripte in populäre Pakete.
  • Der Code war selbstreplizierend — ein Wurm.
  • Gestohlen wurden mehrere Arten von Geheimnissen, nicht nur npm-Tokens.

GitHub entfernte über 500 kompromittierte Pakete und blockierte Uploads, die den Indicators of Compromise entsprachen.

Jedes beteiligte Paket war eines, das Sie installieren wollten, von einem Maintainer mit gutem Ruf, in einer unauffälligen Versionsnummer.

Warum Ihr Scanner „sauber” meldete

npm audit gleicht Ihren Abhängigkeitsbaum mit einer Advisory-Datenbank ab. Damit ein Befund existiert, muss ihn zuerst jemand entdecken, melden und veröffentlichen.

Eine vor zwanzig Minuten publizierte Schadversion hat davon nichts durchlaufen. Kein Advisory, keine Übereinstimmung, sauberer Bericht.

Eine ehrliche Aktualisierung: Im August 2026 hat GitHub die Malicious-Packages-Daten der OpenSSF in die Advisory-Datenbank eingebunden. Malware-Advisories stehen jetzt neben CVEs, die Lücke ist kleiner als zuvor.

Geschlossen ist sie nicht. Ein Advisory hinkt dem Angriff weiterhin hinterher, und sich in dieser Verzögerung auszubreiten ist das gesamte Geschäftsmodell. Lassen Sie npm audit laufen — hören Sie nur auf, ein sauberes Ergebnis als Beweis Ihrer Unversehrtheit zu lesen.

Warum npm audit einen sauberen Baum meldet: die Advisory-Lücke, in der diese Angriffsklasse lebt.

Was Sie jetzt standardmäßig bekommen

Das ist der Teil, der sich geändert hat — und der Grund, warum die meisten Ratschläge aus 2025 neu gelesen werden müssen.

npm v12 deaktiviert Install-Skripte

Im Juni 2026 als Breaking Change angekündigt: npm v12 deaktiviert Install-Skripte standardmäßig. Angreifer nutzten sie, um Zugangsdaten schon bei der Installation abzuziehen, statt darauf zu warten, dass Ihr Code irgendetwas importiert. Reaktivieren lässt sich das durch gezielte Freigabe einzelner Skripte.

Dieselbe Änderung blockiert Abhängigkeiten über Git- oder Remote-URLs und schließt damit einen weiteren Ausführungspfad zur Installationszeit.

Das ist die wichtigste Zeile dieses Artikels. Genau der Vektor, den Shai-Hulud nutzte, ist standardmäßig aus — sofern Sie auf v12 sind.

Falls nicht, bleibt es Ihre Aufgabe:

Terminal window
npm ci --ignore-scripts

Oder in .npmrc:

ignore-scripts=true

Die ehrlichen Kosten: Pakete mit nativen Bestandteilen brauchen ihren Build-Schritt. Ein pauschales Verbot in einem großen Monorepo bricht Installationen. Standardmäßig verbieten, Ausnahmen freigeben — dieses Modell fährt pnpm seit Längerem über allowBuilds, mit dangerouslyAllowAllBuilds für den kompletten Ausstieg. Der Name verrät, was die Maintainer davon halten.

Dependabot wartet drei Tage

Seit Juli 2026 warten Dependabot-Versionsupdates, bis ein Release mindestens drei Tage alt ist, bevor ein Pull Request geöffnet wird. Erkennungssignale bekommen so einen Vorsprung. Standardmäßig aktiv, und Sicherheitsupdates sind ausgenommen — kritische Fixes verzögern sich nicht.

Angreifer leben von Geschwindigkeit. Das nimmt sie ihnen, und kostet Sie praktisch nichts.

pnpm setzt eine strengere Variante schon bei der Installation durch:

pnpm-workspace.yaml
minimumReleaseAge: 10080 # Minuten — eine Woche

Eine jüngere Version kommt gar nicht erst infrage. minimumReleaseAgeExclude deckt die Pakete ab, die Sie sofort wollen.

Klassische Tokens gibt es nicht mehr

Die npm-Dokumentation ist eindeutig: Seit November 2025 werden nur noch granulare Zugriffstokens unterstützt, Legacy-Tokens wurden entfernt.

Granulare Tokens lassen sich nach Paket, Scope und Organisation eingrenzen, auf IP-Bereiche beschränken und mit einem Ablaufdatum von mindestens einem Tag versehen.

Ein Fallstrick, den man kennen sollte: Granulare Tokens haben eine Option Bypass 2FA. Sie ist standardmäßig aus, hebt aber im aktivierten Zustand sowohl konto- als auch paketweite 2FA beim Veröffentlichen aus. Wenn Sie 2FA für ein Paket erzwingen und jemand ein Bypass-Token besitzt, ist Ihre Durchsetzung nicht das, wofür Sie sie halten.

Seit August 2026 können Bypass-2FA-Tokens keine Konto- oder Governance-Aktionen mehr ausführen — E-Mail oder Passwort ändern, 2FA-Konfiguration anfassen, Tokens verwalten, Maintainer hinzufügen. Dafür ist immer eine interaktive Challenge nötig. Direkt veröffentlichen dürfen sie weiterhin.

Kompromittierte Konten bekommen eine Abkühlphase

Seit Juni 2026 gehen npm-Konten mit hoher Reichweite für 72 Stunden in einen Nur-Lese-Modus, wenn die E-Mail geändert oder ein 2FA-Wiederherstellungscode benutzt wird. Phishing steht am Anfang dieser Kampagnen; das verschafft dem echten Maintainer Zeit zur Rückgewinnung, bevor das Konto veröffentlichen kann.

Was weiterhin optional ist

Standardeinstellungen decken den letzten Angriff ab. Das Folgende schalten Sie selbst ein.

Trusted Publishing

OIDC zwischen npm und Ihrem CI-Anbieter. Ein benannter Workflow ist zum Veröffentlichen autorisiert. Jede Veröffentlichung erzeugt ein kurzlebiges, signiertes Credential, das sich weder aus Logs extrahieren noch wiederverwenden lässt.

permissions:
id-token: write # für OIDC erforderlich
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: '24'
registry-url: 'https://registry.npmjs.org'
package-manager-cache: false # in Release-Builds nie cachen
- run: npm ci
- run: npm test
- run: npm publish

Randbedingungen für die Planung:

  • npm CLI 11.5.1+, Node 22.14.0+
  • GitHub Actions, GitLab CI/CD und CircleCI seit April 2026
  • Nur cloud-gehostete Runner — selbst gehostete werden nicht unterstützt
  • Bis zu 10 Trusted Publisher pro Paket

Dieselbe Idee wie beim Abschaffen von Service-Account-Schlüsseln mit Workload Identity Federation: kein langlebiges Credential speichern, sondern pro Lauf ein kurzlebiges gegen eine verifizierte Identität ausstellen.

Der npm-Veröffentlichungspfad mit langlebigem Token gegenüber Trusted Publishing mit OIDC.

Wer so aus GitHub Actions oder GitLab CI/CD veröffentlicht, erhält Provenance-Attestierungen automatisch — ohne --provenance. Für CircleCI nicht unterstützt, und für Pakete aus privaten Repositories wird keine erzeugt, selbst wenn das Paket öffentlich ist.

Staged Publishing

Mai 2026, optional. Credentials allein verteilen kein Paket mehr: Die Version bleibt im Staging, bis ein Maintainer sie mit 2FA freigibt, in der CLI oder auf npmjs.com.

Das ist die Maßnahme, die eine vollständig kompromittierte Pipeline überlebt. Ein Angreifer mit Ihren CI-Credentials bekommt eine gestagte Version und eine Benachrichtigung an einen Menschen — kein Release.

Die nicht mehr genutzten Türen schließen

Trusted Publishing einzurichten und den alten Automation-Token gültig zu lassen, bringt wenig. Sobald der neue Ablauf läuft:

  1. Package Settings → Publishing access → „Require two-factor authentication and disallow tokens”
  2. Nicht mehr benötigte Automation-Tokens widerrufen

Und bei der 2FA-Einrichtung ist npms Empfehlung eindeutig: WebAuthn statt TOTP. TOTP-Codes sind phishbar.

Beobachten, was den Runner verlässt

GitHubs Actions Network Firewall ist in der Technical Preview und protokolliert den gesamten ausgehenden Verkehr von Workflow-Läufen — Sie sehen also, wenn ein Job plötzlich mit einer Domain spricht, mit der er nie zuvor gesprochen hat.

Das ist der einzige Punkt hier, der Erkennung statt Prävention leistet, und deshalb überproportional wertvoll.

Was all das nicht löst

Der Abschnitt, den Hersteller-Posts weglassen.

Ein kompromittierter Maintainer kann weiterhin Schadcode veröffentlichen. Trusted Publishing belegt, dass das Paket aus dem richtigen Workflow im richtigen Repository kam. Über die Gutartigkeit des Codes sagt es nichts. Mit Commit-Zugriff attestiert die Provenance getreulich einen bösartigen Build.

Install-Skripte sind nicht der einzige Ausführungspfad. Dass npm v12 sie schließt, verteuert das aktuelle Muster. Gegen eine Nutzlast in der Bibliothek, die Sie importieren und ausführen, hilft es nicht.

Cooldowns sind ein Kompromiss, kein Gewinn. Sie akzeptieren ein Fenster mit einer bekannt verwundbaren Version, um nicht die Ersten mit einer bösartigen zu sein. Meist richtig. Ein Kompromiss bleibt es — genau deshalb nimmt Dependabot Sicherheitsupdates aus.

Fast nichts davon ist Erkennung. Jede Maßnahme senkt die Wahrscheinlichkeit, Schadcode auszuführen. Nur Egress-Monitoring sagt Ihnen, dass es bereits passiert ist. Gehen Sie davon aus, dass die Antwort ja lauten könnte — und wissen Sie, wie schnell Sie jedes Geheimnis rotieren können, das ein Build-Job sieht.

Womit anfangen

Womit anfangen
Maßnahme Aufwand Status
Auf npm v12 wechseln (Install-Skripte aus) Stunden Nach Upgrade Standard
Dependabot-Cooldown Keiner Bereits aktiv
Nur-Lese-Tokens fürs Installieren; kein Publish-Token im Build-Job Stunden Bei Ihnen
Trusted Publishing + Tokens verbieten Stunden Optional
Staged Publishing Stunden Optional
minimumReleaseAge (pnpm) Stunden Optional
Granulare Tokens auf Bypass-2FA prüfen Minuten Bei Ihnen
WebAuthn statt TOTP Minuten Bei Ihnen
Egress-Monitoring auf CI-Runnern Tage Preview

Zwei Dinge diese Woche: auf npm v12 wechseln oder bis dahin ignore-scripts setzen, und Publish-Tokens aus jedem Job entfernen, der auch Abhängigkeiten installiert. Damit ist der Weg abgedeckt, den Shai-Hulud tatsächlich genommen hat.

Das Fazit

Der Ratschlag von 2025 lautete: „Tun Sie das selbst, weil es sonst niemand tut.” Im Lauf von 2026 hat das Ökosystem die beiden wirksamsten Punkte — keine Install-Skripte, keine sofortigen Updates — zum Standard gemacht.

Das ist echter Fortschritt. Es bedeutet aber auch, dass sich das verbleibende Risiko verschoben hat: Es sitzt jetzt in dem, was weiterhin ausgeschaltet ist — Trusted Publishing, Staged Publishing und jede Vorstellung davon, mit wem Ihre Build-Maschinen sprechen.

npm audit wird Ihnen weiterhin sagen, der Baum sei sauber. Es beantwortet eine engere Frage als die, die Sie stellen sollten.

Häufig gestellte Fragen

Führt npm Install-Skripte noch standardmäßig aus?

Auf npm v12 nicht mehr. GitHub kündigte im Juni 2026 an, dass npm v12 eine Breaking Change mitbringt, die Install-Skripte standardmäßig deaktiviert — Angreifer nutzen sie, um Zugangsdaten bereits bei der Installation abzuziehen, statt auf die Laufzeit zu warten. Skripte lassen sich durch gezielte Freigabe einzelner Skripte wieder aktivieren. Dieselbe Änderung blockiert außerdem Abhängigkeiten über Git- oder Remote-URLs und schließt damit einen weiteren Ausführungspfad. Wer noch ein älteres npm nutzt, muss ignore-scripts selbst setzen.

Schützt npm audit vor Lieferkettenangriffen?

Nicht vor einer vor einer Stunde publizierten Version. npm audit gleicht Ihren Baum mit der Advisory-Datenbank ab, es muss also zuerst jemand etwas finden, melden und veröffentlichen. GitHub hat diese Lücke im August 2026 verkleinert, indem die Malicious-Packages-Daten der OpenSSF in die Advisory-Datenbank eingebunden wurden — Malware-Advisories stehen nun neben CVEs. Ein Advisory hinkt dem Angriff dennoch hinterher, und genau in dieser Verzögerung liegt das Geschäftsmodell dieser Kampagnen. Lassen Sie audit laufen, aber lesen Sie ein sauberes Ergebnis nicht als Unbedenklichkeitsbescheinigung.

Was ist der Dependabot-Cooldown?

Seit Juli 2026 warten Dependabot-Versionsupdates, bis ein Release mindestens drei Tage verfügbar ist, bevor ein Pull Request geöffnet wird — so bleibt Zeit, dass Erkennungssignale auftauchen, bevor ein bösartiges Release Ihr Projekt erreicht. Das ist standardmäßig aktiv. Sicherheitsupdates sind ausgenommen und werden weiterhin sofort geöffnet, kritische Fixes verzögern sich also nicht. pnpm bietet mit minimumReleaseAge eine strengere Variante derselben Idee: eine Version, die jünger als der konfigurierte Wert ist, wird gar nicht erst installiert.

Was ist npm Trusted Publishing?

Eine OIDC-Vertrauensbeziehung zwischen npm und Ihrem CI-Anbieter, sodass ein benannter Workflow ohne langlebigen Token veröffentlichen kann. Jede Veröffentlichung nutzt ein kurzlebiges, kryptografisch signiertes Credential, das sich weder aus Logs extrahieren noch wiederverwenden lässt. Es folgt dem OpenSSF-Standard, den PyPI, RubyGems, crates.io und NuGet bereits übernommen haben. Unterstützt werden GitHub Actions, GitLab CI/CD und — seit April 2026 — CircleCI, ausschließlich auf cloud-gehosteten Runnern, mit npm CLI 11.5.1 oder neuer und Node 22.14.0 oder höher.

Was ist aus den klassischen npm-Tokens geworden?

Sie sind weg. Die npm-Dokumentation hält fest, dass seit November 2025 nur noch granulare Zugriffstokens unterstützt werden und Legacy-Tokens entfernt wurden. Granulare Tokens lassen sich nach Paket, Scope und Organisation eingrenzen, auf IP-Bereiche beschränken und mit einem Ablaufdatum von mindestens einem Tag versehen. Achten Sie auf die Option Bypass 2FA: Sie ist standardmäßig aus, hebt aber im aktivierten Zustand sowohl konto- als auch paketweite 2FA beim Veröffentlichen aus.

Was ist Staged Publishing?

Eine optionale npm-Funktion aus Mai 2026. Eine Veröffentlichung geht nicht allein mit Credentials live — die Version bleibt in einem Staging-Zustand, bis ein Maintainer sie mit 2FA in der npm-CLI oder auf npmjs.com freigibt. Das entkoppelt die Credentials Ihrer CI-Pipeline von der Fähigkeit, ein Paket tatsächlich zu verteilen, und kappt damit die Kette von einer kompromittierten Pipeline bis zur Malware beim Nutzer.

Aus der Community

Diskussion im Fediverse

Antworten von Mastodon und Bluesky — direkt aus dem offenen Netz, ohne Tracking.

Antworten werden geladen …

ENDE