Update: Neue Variante des Shai-Hulud Worm Supply-Chain-Angriff trifft über 1.000 npm-Pakete

Aktualisiert am 26.11.2025 Von Melanie Staudacher 5 min Lesedauer

Anbieter zum Thema

Nach einer ersten Angriffswelle auf das npm-Ökosystem im September, er­folgt nur die zweite Welle von Supply-Chain-Angriffen mit neuer Malware-Variante. Diese ist schwerer zu erkennen, schnell zu replizieren und richtet Schaden an, selbst wenn sie keinen Zugriff erhält.

Der Wurm „Shai-Hulud“ ist ein sich selbstverbreitender Supply-Chain-Schädling, der über kompromittierte Maintainer-Accounts in npm-Pakete eindringt, dort bösartigen Code einfügt und so automatisch weitere Pakete infiziert und neu veröffentlicht.(Bild:  Dall-E / Vogel IT-Medien GmbH / KI-generiert)
Der Wurm „Shai-Hulud“ ist ein sich selbstverbreitender Supply-Chain-Schädling, der über kompromittierte Maintainer-Accounts in npm-Pakete eindringt, dort bösartigen Code einfügt und so automatisch weitere Pakete infiziert und neu veröffentlicht.
(Bild: Dall-E / Vogel IT-Medien GmbH / KI-generiert)

Am 15. September 2025 schlug der Entwickler Daniel Pereira Alarm: Er entdeckte, dass das be­liebte npm-Paket „@ctrl/tinycolor“ mit Malware infiziert worden war. Das Paket wird wöchent­lich mehr als zwei Millionen Mal heruntergeladen und dient in zahlreichen JavaScript- und Type­Script-Projekten zur Farbanpassung. Und nun verbreitet sich eine weiterentwickelte Vari­ante des „Shai-Hulud Worm“. Damit steigt die Gesamtzahl der betroffenen Paketversionen auf über 1.000. Somit entwickelt sich der Vorfall langsam aber sicher zu einem der schwer­wie­gend­sten Angriffe im gesamten JavaScript-Ökosystem.

Der sich selbst verbreitende Wurm

Der Software-Lieferketten-Spezialist Socket begann im September mit der Untersuchung der Malware und identifizierte mindestens 40 Pakete, die im Rahmen der ersten Angriffs­kam­pag­ne kompromittiert wurden. Weitere Analysen von Stepsecurity wie auch von Aikido zeig­ten, dass die Zahl der infizierten npm-Pakete bei mindestens 187 lag, darunter auch Pakete des Herstellers Crowdstrike. Dieser Supply-Chain-Angriff trägt den Namen „Shai-Hulud“ – offenbar benannt nach den riesigen Sandwürmern aus Frank Herberts „Dune“ – und gilt als besonders gefährlich, weil er sich wurmähnlich selbstständig verbreitet.

Nach Angaben von Check Point begann die erste Attacke bereits am 8. September 2025 mit einer gezielten Phishing-Kampagne. Dabei sei das Konto eines legitimen Maintainers über 18 npm-Pakete mit einer Malware infiziert worden, deren Ziel es sei, Kryptowährung zu stehlen. Node Package Manager ist die größte Paketverwaltung für JavaScript und bildet das Rückgrat unzähliger Web- und Softwareprojekte. Entwickler können darüber externe Pakete einbinden, um Funktionen wie Datenbankzugriffe, Sicherheitsmechanismen oder eben Farb­ver­arbeitung nicht selbst schreiben zu müssen. Aufgrund seiner zentralen Rolle ist npm ein attraktives Ziel für Supply-Chain-Angriffe.

Neue Version der Malware entdeckt

Die neue Version von Shai-Hulud ist Checkmarx zufolge schwerer zu erkennen und leichter zu replizieren als ihr Vorgänger. Denn die Malware sammelt weiterhin Credentials für GitHub, npm und Cloud-Dienste, exfiltriert diese allerdings nun in zufällig erzeugte Repositories. Wie JFrog ergänzt, scanne der Wurm alle zugänglichen Pakete, sobald gültige Tokens vorliegen, injiziere schädlichen Code, erhöhe Versionsnummern und veröffentliche manipulierte Releases automatisch. Jede kompromittierte Entwicklungsumgebung wird somit zum Multiplikator weiterer Infektionen.

Die Bereitstellung und Ausführung der Payload erfolgt Checkmarx zufolge nun in zwei Schrit­ten: Die Datei „setup_bun.js“ wird ausgeführt, wodurch die Datei „bun_environment.js“ mit der eigentlichen Payload erstellt und ausgeführt wird. Gleichzeitig gebe es ein Infektionslimit, welches bei 100 npm-Paketen pro Ausführung liege, was die Verbreitung beschleunige, wenn Nutzer mit Zugriffsrechten auf eine große Anzahl von Paketen kompromittiert würden. Eine Infektion mit mehr Paketen würde zum einen die effektive Verbreitungsgeschwindigkeit ver­ringern und zum anderen wäre eine solche großangelegte Kampagne auffälliger.

Bemerkenswert ist, dass selbst wenn die Authentifizierung bei GitHub oder npm mit den erlangten Zugriffsdaten fehlschlägt, den Analysten zufolge das Home-Verzeichnis des infizierten Benutzers gelöscht wird. Dies verursache Schäden, die die Entwicklung erheblich verlangsamen und Build-Fehler in CI/CD-Pipelines hervorrufen würden.

Wie verbreitet sich Shai-Hulud?

Sobald ein Paket kompromittiert ist, manipuliert der Schadcode weitere Repositories desselben Maintainers, fügt bösartige Skripte hinzu und veröffentlicht automatisch neue Versionen. Diese wurmähnliche Eigenschaft unterscheidet Shai-Hulud von klassischen Supply-Chain-Attacken.

Technisch setzt die Malware unter anderem auf das Open-Source-Sicherheitstool „TruffleHog“, um API-Keys, Zugangstokens und andere Geheimnisse in Entwicklungsumgebungen oder CI/CD-Pipelines zu sammeln. Zusätzlich legen die Angreifer unautorisierte GitHub-Actions-Workflows an, um die erbeuteten Daten an externe Server weiterzuleiten.

Folgen und Lehren

Die Folgen des Vorfalls sind gravierend: Neben dem Risiko des Diebstahls sensibler Zugangs­daten besteht die Gefahr, dass Unternehmen unwissentlich kompromittierte Pakete in ihre Software übernehmen. Entwickler sollten daher schnellstmöglich ihre Abhängigkeiten über­prüfen, auf saubere Versionen zurücksetzen und kompromittierte Tokens ersetzen. Der Vorfall zeigt, wie verwundbar das Open-Source-Ökosystem sein kann. Der Wurm Shai-Hulud sollte Unternehmen als Zeichen dienen, ihre Lieferketten kontinuierlich zu überwachen und abzusichern.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zur IT-Sicherheit

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Die Analysten von Checkmarx nennen folgende Schutzmaßnahmen zur Eindämmung der Infektion:

  • Unternehmen, die einen Proxy wie Artifactory verwenden, können den Zugriff auf neue Releases im öffentlichen npm-Repository vorübergehend blockieren, bis die Infektion unter Kontrolle ist. Dadurch verringern sie das Risiko erheblich. Auch wenn dies den Entwicklungs­ablauf beeinträchtigt, sollten sie den Netzwerkzugriff auf das öffentliche npm-Repository für Entwickler- und CI/CD-Umgebungen blockieren, bis die Infektion unter Kontrolle ist.
  • Die Endpoint-Security-Software sollte so konfiguriert sein, dass sie Prozesse blockiert, die Dateien mit den Namen „setup_bun.js“ oder „bun_environment.js“ erstellen oder laden, sowie JavaScript-Engines, zum Beispiel Node.js, die versuchen, Dateien im Home-Verzeichnis zu löschen. Zudem sollten Admins die npm-Tokens der User überprüfen, um sicherzustellen, dass die Zugriffsrechte nicht zu weit gefasst sind.

Auf GitHub führt Checkmarx eine Liste der identifizierten betroffenen Versionen.

Und auch Aikido hat bereits im September eine Liste mit den kompromittierten Paketen bereitgestellt, darunter:

Package Versions
@ahmedhfarag/ngx-perfect-scrollbar20.0.20
@ahmedhfarag/ngx-virtual-scroller4.0.4
@art-ws/common2.0.28
@art-ws/config-eslint2.0.4, 2.0.5
@art-ws/config-ts2.0.7, 2.0.8
@art-ws/db-context2.0.24
@art-ws/di2.0.28, 2.0.32
@art-ws/di-node2.0.13
@art-ws/eslint1.0.5, 1.0.6
@art-ws/fastify-http-server2.0.24, 2.0.27
@art-ws/http-server2.0.21, 2.0.25
@art-ws/openapi0.1.9, 0.1.12
@art-ws/package-base1.0.5, 1.0.6
@art-ws/prettier1.0.5, 1.0.6
@art-ws/slf2.0.15, 2.0.22
@art-ws/ssl-info1.0.9, 1.0.10
@art-ws/web-app1.0.3, 1.0.4
@crowdstrike/commitlint8.1.1, 8.1.2
@crowdstrike/falcon-shoelace0.4.1, 0.4.2
@crowdstrike/foundry-js0.19.1, 0.19.2
@crowdstrike/glide-core0.34.2, 0.34.3
@crowdstrike/logscale-dashboard1.205.1, 1.205.2
@crowdstrike/logscale-file-editor1.205.1, 1.205.2
@crowdstrike/logscale-parser-edit1.205.1, 1.205.2
@crowdstrike/logscale-search1.205.1, 1.205.2
@crowdstrike/tailwind-toucan-base5.0.1, 5.0.2
@ctrl/deluge7.2.1, 7.2.2
@ctrl/golang-template1.4.2, 1.4.3
@ctrl/magnet-link4.0.3, 4.0.4
@ctrl/ngx-codemirror7.0.1, 7.0.2
@ctrl/ngx-csv6.0.1, 6.0.2
@ctrl/ngx-emoji-mart9.2.1, 9.2.2
@ctrl/ngx-rightclick4.0.1, 4.0.2
@ctrl/qbittorrent9.7.1, 9.7.2
@ctrl/react-adsense2.0.1, 2.0.2
@ctrl/shared-torrent6.3.1, 6.3.2
@ctrl/tinycolor4.1.1, 4.1.2
@ctrl/torrent-file4.1.1, 4.1.2
@ctrl/transmission7.3.1
@ctrl/ts-base324.0.1, 4.0.2
@hestjs/core0.2.1
@hestjs/cqrs0.1.6
@hestjs/demo0.1.2
@hestjs/eslint-config0.1.2
@hestjs/logger0.1.6
@hestjs/scalar0.1.7
@hestjs/validation0.1.6
@nativescript-community/arraybuffers1.1.6, 1.1.7, 1.1.8
@nativescript-community/gesturehandler2.0.35
@nativescript-community/perms3.0.5, 3.0.6, 3.0.7, 3.0.8
@nativescript-community/sqlite3.5.2, 3.5.3, 3.5.4, 3.5.5
@nativescript-community/text1.6.9, 1.6.10, 1.6.11, 1.6.12
@nativescript-community/typeorm0.2.30, 0.2.31, 0.2.32, 0.2.33
@nativescript-community/ui-collectionview6.0.6
@nativescript-community/ui-document-picker1.1.27, 1.1.28
@nativescript-community/ui-drawer0.1.30
@nativescript-community/ui-image4.5.6
@nativescript-community/ui-label1.3.35, 1.3.36, 1.3.37
@nativescript-community/ui-material-bottom-navigation7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-bottomsheet7.2.72
@nativescript-community/ui-material-core7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-core-tabs7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-ripple7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-tabs7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-pager14.1.36, 14.1.37, 14.1.38
@nativescript-community/ui-pulltorefresh2.5.4, 2.5.5, 2.5.6, 2.5.7
@nexe/config-manager0.1.1
@nexe/eslint-config0.1.1
@nexe/logger0.1.3
@nstudio/angular20.0.4, 20.0.5, 20.0.6
@nstudio/focus20.0.4, 20.0.5, 20.0.6
@nstudio/nativescript-checkbox2.0.6, 2.0.7, 2.0.8, 2.0.9
@nstudio/nativescript-loading-indicator5.0.1, 5.0.2, 5.0.3, 5.0.4
@nstudio/ui-collectionview5.1.11, 5.1.12, 5.1.13, 5.1.14
@nstudio/web20.0.4
@nstudio/web-angular20.0.4
@nstudio/xplat20.0.5, 20.0.6, 20.0.7
@nstudio/xplat-utils20.0.5, 20.0.6, 20.0.7
@operato/board9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/data-grist9.0.29, 9.0.35, 9.0.36, 9.0.37
@operato/graphql9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/headroom9.0.2, 9.0.35, 9.0.36, 9.0.37
@operato/help9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/i18n9.0.35, 9.0.36, 9.0.37
@operato/input9.0.27, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/layout9.0.35, 9.0.36, 9.0.37
@operato/popup9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/pull-to-refresh9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42
@operato/shell9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39
@operato/styles9.0.2, 9.0.35, 9.0.36, 9.0.37
@operato/utils9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@teselagen/bounce-loader0.3.16, 0.3.17
@teselagen/liquibase-tools0.4.1
@teselagen/range-utils0.3.14, 0.3.15
@teselagen/react-list0.8.19, 0.8.20
@teselagen/react-table6.10.19
@thangved/callback-window1.1.4
@things-factory/attachment-base9.0.43, 9.0.44, 9.0.45, 9.0.46, 9.0.47, 9.0.48, 9.0.49, 9.0.50
@things-factory/auth-base9.0.43, 9.0.44, 9.0.45
@things-factory/email-base9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46, 9.0.47, 9.0.48, 9.0.49, 9.0.50, 9.0.51, 9.0.52, 9.0.53, 9.0.54
@things-factory/env9.0.42, 9.0.43, 9.0.44, 9.0.45
@things-factory/integration-base9.0.43, 9.0.44, 9.0.45
@things-factory/integration-marketplace9.0.43, 9.0.44, 9.0.45
@things-factory/shell9.0.43, 9.0.44, 9.0.45
@tnf-dev/api1.0.8
@tnf-dev/core1.0.8
@tnf-dev/js1.0.8
@tnf-dev/mui1.0.8
@tnf-dev/react1.0.8
@ui-ux-gang/devextreme-angular-rpk24.1.7
@yoobic/design-system6.5.17
@yoobic/jpeg-camera-es61.0.13
@yoobic/yobi8.7.53
airchief0.3.1
airpilot0.8.8
angulartics214.1.1, 14.1.2
browser-webdriver-downloader3.0.8
capacitor-notificationhandler0.0.2, 0.0.3
capacitor-plugin-healthapp0.0.2, 0.0.3
capacitor-plugin-ihealth1.1.8, 1.1.9
capacitor-plugin-vonage1.0.2, 1.0.3
capacitorandroidpermissions0.0.4, 0.0.5
config-cordova0.8.5
cordova-plugin-voxeet21.0.24
cordova-voxeet1.0.32
create-hest-app0.1.9
db-evo1.1.4, 1.1.5
devextreme-angular-rpk21.2.8
ember-browser-services5.0.2, 5.0.3
ember-headless-form1.1.2, 1.1.3
ember-headless-form-yup1.0.1
ember-headless-table2.1.5, 2.1.6
ember-url-hash-polyfill1.0.12, 1.0.13
ember-velcro2.2.1, 2.2.2
encounter-playground0.0.2, 0.0.3, 0.0.4, 0.0.5
eslint-config-crowdstrike11.0.2, 11.0.3
eslint-config-crowdstrike-node4.0.3, 4.0.4
eslint-config-teselagen6.1.7
globalize-rpk1.7.4
graphql-sequelize-teselagen5.3.8
html-to-base64-image1.0.2
json-rules-engine-simplified0.2.1
jumpgate0.0.2
koa2-swagger-ui5.11.1, 5.11.2
mcfly-semantic-release1.3.1
mcp-knowledge-base0.0.2
mcp-knowledge-graph1.2.1
mobioffice-cli1.0.3
monorepo-next13.0.1, 13.0.2
mstate-angular0.4.4
mstate-cli0.4.7
mstate-dev-react1.1.1
mstate-react1.6.5
ng2-file-upload7.0.2, 7.0.3, 8.0.1, 8.0.2, 8.0.3, 9.0.1
ngx-bootstrap18.1.4, 19.0.3, 19.0.4, 20.0.3, 20.0.4, 20.0.5
ngx-color10.0.1, 10.0.2
ngx-toastr19.0.1, 19.0.2
ngx-trend8.0.1
ngx-ws1.1.5, 1.1.6
oradm-to-gql35.0.14, 35.0.15
oradm-to-sqlz1.1.2
ove-auto-annotate0.0.9
pm2-gelf-json1.0.4, 1.0.5
printjs-rpk1.6.1
react-complaint-image0.0.32
react-jsonschema-form-conditionals0.3.18
remark-preset-lint-crowdstrike4.0.1, 4.0.2
rxnt-authentication0.0.3, 0.0.4, 0.0.5, 0.0.6
rxnt-healthchecks-nestjs1.0.2, 1.0.3, 1.0.4, 1.0.5
rxnt-kue1.0.4, 1.0.5, 1.0.6, 1.0.7
swc-plugin-component-annotate1.9.1, 1.9.2
tbssnch1.0.2
teselagen-interval-tree1.1.2
tg-client-query-builder2.14.4, 2.14.5
tg-redbird1.3.1
tg-seq-gen1.0.9, 1.0.10
thangved-react-grid1.0.3
ts-gaussian3.0.5, 3.0.6
ts-imports1.0.1, 1.0.2
tvi-cli0.1.5
ve-bamreader0.2.6
ve-editor1.0.1
verror-extra6.0.1
voip-callkit1.0.2, 1.0.3
wdio-web-reporter0.1.3
yargs-help-output5.0.3
yoo-styles6.0.326

(ID:50560616)