Zod 4.6.6 enthält keinen Schadcode, obwohl die Versionshinweise der Validierungsbibliothek sechs Commits eines Angreifers aufführen. Den Nachlader aus diesen Commits lieferte npm nie aus. Die Bibliothek zählt rund 342 Millionen Downloads pro Woche.
drweb.de als bevorzugte Quelle auf Google hinzufügenQualitätsgeprüfte Inhalte direkt in Google News & DiscoverJetzt hinzufügenAm 21. September landeten die Commits direkt auf dem Hauptzweig, alle unter dem Konto von Maintainer Colin McDonnell. Derselbe Nachlader tauchte binnen einer Stunde auch bei Standard Schema und bei McDonnells TypeScript-Laufzeit nub auf.[1] Der Angreifer hatte seine verseuchte Fassung selbst als 4.6.6 nummeriert. Noch vor Mitternacht machte McDonnell die Änderungen per Revert rückgängig, ohne sie aus der Git-Historie zu löschen. Deshalb stehen die Commits in den Release-Notes der echten Version 4.6.6 vom 11. Oktober.[3]
Das Wichtigste in Kürze
- Das npm-Paket zod 4.6.6 enthält weder die Schadcode-Datei noch einen Installations-Hook.
- Der Nachlader liest die Adresse seines Servers aus einem Smart Contract auf der Ethereum-Blockchain.
- Trusted Publishing und eine Freigabe-Umgebung stoppten jeden Versuch, eine verseuchte Version zu veröffentlichen.
- Nur nub 0.9.4 erreichte die Registry, dort blockierte der Malware-Scan von npm die Version vor der Freigabe.
Wie sollte der Nachlader funktionieren?

Adresse aus der Blockchain. Die Datei meta.test.mjs fragt über drei öffentliche Ethereum-Schnittstellen einen festen Smart Contract ab, liest daraus eine Domain und lädt von dort JavaScript nach.[2] Den nachgeladenen Code kann der Angreifer jederzeit tauschen, ohne eine neue Paketversion zu veröffentlichen. Eine Domain kann ein Hoster sperren, den Eintrag in der Blockchain nicht. Googles Threat Intelligence Group beschrieb im Oktober 2025, wie eine staatliche Gruppe aus Nordkorea das als EtherHiding bekannte Verfahren einsetzt.[4]
Falsch verdrahtet. Der Angreifer trug den Aufruf „preinstall“ in die oberste Ebene der package.json ein. Die Paketverwaltung führt Lebenszyklus-Skripte aber nur aus, wenn sie im Feld „scripts“ stehen.[5] Selbst eine veröffentlichte Zod-Version hätte den Nachlader bei der Installation also nicht gestartet.
Warum kam der Schadcode nicht auf npm?
Gebundene Pipeline. Zod veröffentlicht über Trusted Publishing, und der zugehörige Eintrag bei npm gilt nur für die GitHub-Umgebung „npm“, deren Läufe ein Maintainer freigeben muss.[2] Binnen gut drei Stunden probierte der Angreifer mehrere Umwege aus, vom Release bei jedem Push bis zu einem neuen Workflow mit einem npm-Token.[3] „Zods Release-CI hat wie vorgesehen funktioniert“, schreibt McDonnell. Nach seiner Einschätzung war eine Berechtigung für Git-Pushes kompromittiert, kein npm- oder GitHub-Token.[1]
Anders als bei keyv. Im August schoben Angreifer über das GitHub-Konto des Maintainers hinter keyv ebenfalls Dateien direkt auf den Hauptzweig. Die echte Release-Pipeline des Projekts veröffentlichte danach die vergifteten Versionen mit gültiger Provenance. Bei Zod stand zwischen Push und Paket die Freigabe durch einen Menschen.
Zod hat kein Malware-Scanner geschützt, sondern ein Freigabeknopf, den der Angreifer nicht drücken konnte.
Michael Dobler, Herausgeber Dr. Web
Die Umwege des Angreifers
Was sollten Entwicklungsteams jetzt prüfen?
Zod-Nutzer müssen nichts zurückrollen, die Versionen 4.6.7 und 4.6.8 aus den Angreifer-Commits existieren auf npm nicht. Für die eigene Lieferkette lohnen sich vier Schritte:
- Den Hauptzweig per Regelwerk gegen direkte Pushes sperren. Zods Angreifer kam mit einer einzigen Push-Berechtigung bis in den Release-Workflow.
- Eigene Pakete über Trusted Publishing mit einer GitHub-Umgebung veröffentlichen, die eine Freigabe verlangt. Seit Mai erzwingt das Staged Publishing von npm auf Wunsch zusätzlich eine Bestätigung per 2FA.[6]
- Installations-Skripte in CI-Läufen mit der npm-Option ignore-scripts abschalten und nur für Pakete erlauben, die native Module kompilieren.[7]
- Versionen und Herkunft aller Abhängigkeiten dokumentieren. Ab dem 11. Dezember 2027 verlangt der Cyber Resilience Act von Herstellern die gebotene Sorgfalt beim Einbau quelloffener Komponenten.[8]
Offene Frage. Wie die Push-Berechtigung abhandenkam, hat McDonnell in seinen bisherigen Stellungnahmen nicht erklärt. Seit dem 24. September veröffentlicht der Maintainer alle seine Pakete nur noch per manuell gestartetem Workflow mit Pflicht-2FA.[1] Begriffe wie Supply-Chain-Angriff erklärt unser Cybersecurity-Glossar.
Quellen
8 Quellen anzeigenQuellen ausblenden
- GitHubSecurity advisory: malicious npm package changes affecting zod, nub, and standard-schema (21.09.2026, mit Stellungnahme von Colin McDonnell vom 22.09.2026)
- colinhacks/zod (GitHub)Commit d821685 „Fix bugs and improve performance“
- colinhacks/zod (GitHub)Cleanup bad commits (#6620) (21.09.2026) und Release v4.6.6
- Google Threat Intelligence GroupDPRK Adopts EtherHiding: Nation-State Malware Hiding on Blockchains
- npm Docsscripts (abgerufen am 12.10.2026)
- npm DocsTrusted publishing for npm packages (abgerufen am 12.10.2026)
- npm Docsconfig, Option ignore-scripts (abgerufen am 12.10.2026)
- EUR-LexVerordnung (EU) 2024/2847 (Cyber Resilience Act), Art. 13 Abs. 5 und Art. 71
Mehr Newshunger?
- Warum braucht die npm-Bibliothek mathmain einen verschlüsselten Loader?
- Keyv kompromittiert: Der Angriff auf die npm-Lieferkette läuft noch
- Dependabot wartet jetzt drei Tage: GitHubs neue Standard-Wartezeit gegen Lieferketten-Angriffe
- 30 manipulierte npm-Pakete: Red Hats Lieferkette unter Beschuss
- Miasma: npm-Wurm stiehlt Cloud-Zugänge
- 42 TanStack-Pakete vergiftet: Wurm umgeht SLSA-Provenance erstmals
- Cybersecurity Grundlagen: Was KMU 2026 können müssen
