Aikido

S1ngularity/nx-Angreifer schlagen erneut zu

Charlie EriksenCharlie Eriksen
|
#

Heute Morgen wurden wir auf einen groß angelegten Angriff auf npm aufmerksam gemacht. Es scheint sich um dieselben Angreifer zu handeln, die auch hinter dem Nx-Angriff vom 27. August 2025 stecken. Dies wurde ursprünglich veröffentlicht von Socket und StepSecurity veröffentlicht, die feststellten, dass 40 Pakete kompromittiert worden waren. Seitdem wurden weitere 147 Pakete mit Malware infiziert, darunter auch Pakete von CrowdStrike.

Das Ausmaß, der Umfang und die Auswirkungen dieses Angriffs sind erheblich. Die Angreifer verwenden weitgehend dieselbe Vorgehensweise wie beim ursprünglichen Angriff, haben diese jedoch weiterentwickelt. Sie haben daraus einen vollständigen Wurm gemacht, der folgende Aktionen automatisch ausführt:

  • secrets stehlen secrets öffentlich auf GitHub veröffentlichen
  • Führen Sie trufflehog aus und fragen Sie Cloud -Endpunkte ab, um secrets zu sammeln.
  • Versuchen Sie, eine neue GitHub-Aktion mit einem Mechanismus zur Datenextraktion über Webhook[.]site zu erstellen.
  • Durchlaufen Sie die Repositorys auf GitHub, auf die ein Benutzer Zugriff hat, und machen Sie sie öffentlich zugänglich.

Seit unserer ersten Warnung heute Morgen haben wir die folgenden zusätzlichen Verhaltensweisen und wichtigen Details bestätigt. Für diejenigen, die es nicht wissen: Shai Hulud ist der Name des Wurms in der Dune-Reihe. Ein klarer Hinweis auf die Absicht der Angreifer.

Shai Hulud, aus „Dune“

Um zu vermeiden, dass Sie durch solche Pakete kompromittiert werden, sehen Sie sich Aikido Safe-Chain an!

Was der Wurm tut

  • Harvest: Durchsucht den Host und die CI-Umgebung nach secrets process.env, Scannen mit TruffleHog und Cloud-Metadaten-Endpunkte (AWS/GCP), die Instanz-/Dienst-Anmeldedaten zurückgeben.
  • Exfiltrate (1) – GitHub-Repo: Erstellt ein Repo namens Shai-Hulud unter dem kompromittierten Konto und überträgt einen JSON-Dump mit Systeminformationen, Umgebungsvariablen und gesammelten secrets.
  • Exfiltrieren (2) — GitHub Actions → Webhook: einen Workflow löschen .github/Workflows/shai-hulud-Workflow.yml das serialisiert ${{ toJSON(secrets) }}, sendet sie an einen Angreifer Webhook[.]site URL und schreibt eine doppelte Base64-Kopie in die Aktionsprotokolle.
  • Verbreiten: Verwendet alle gefundenen gültigen npm-Tokens, um Pakete, die der kompromittierte Maintainer kontrolliert, aufzulisten und zu aktualisieren (Verbreitung in der Lieferkette).
  • Verstärken: Durchläuft die zugänglichen Repositorys des Opfers, macht sie öffentlich oder fügt den Workflow/Zweig hinzu, der weitere Ausführungen und Lecks auslöst.

Verrat von secrets

Wie beim ursprünglichen Nx-Angriff beobachten wir auch hier, dass die Angreifer einen Smash-and-Grab-Angriff durchführen. Die bösartige Payload veröffentlicht sowohl ein „Shai-Hulud”-Repository mit gestohlenen Anmeldedaten/Tokens als auch ein GitHub-Konto und macht private Repositorys öffentlich:

Veröffentlichung gestohlener Zugangsdaten

Private Repositorys werden öffentlich zugänglich gemacht

Selbstverbreitung durch npm

Eines der auffälligsten Merkmale dieses Angriffs ist, dass er sich wie ein echter Wurm verhält. Anstatt sich auf ein einziges infiziertes Paket zu verlassen, um sich zu verbreiten, ist der Code so konzipiert, dass er sich selbst in anderen npm-Paketen, die dem kompromittierten Maintainer gehören, erneut veröffentlicht.

So funktioniert die Wurm-Logik:

  • Laden Sie ein Ziel-Tarball herunter – es ruft eine vorhandene Paketversion aus der npm-Registrierung ab.
  • Ändern package.json – Der Wurm erhöht die Patch-Version (z. B. 1.2.3 → 1.2.4) und fügt einen neuen Lebenszyklus-Hook ein (Nach der Installation)
  • Kopiere seine eigene Nutzlast – das laufende Skript (process.argv[1]) wird in den Tarball geschrieben als bundle.jsDadurch wird sichergestellt, dass jeder Code, der ein Paket infiziert hat, nun auch im nächsten Paket vorhanden ist.
  • Veröffentlichen Sie das mit einem Trojaner infizierte Paket erneut – das modifizierte Tarball-Archiv wird mit gzip komprimiert und mit den Anmeldedaten des Maintainers zurück an npm übertragen.

Dieser Zyklus ermöglicht es der Malware, kontinuierlich jedes Paket zu infizieren, auf das ein Maintainer Zugriff hat. Jedes veröffentlichte Paket wird zu einem neuen Verbreitungsvektor: Sobald jemand es installiert, wird der Wurm ausgeführt, repliziert sich und dringt weiter in das Ökosystem vor.

Kurz gesagt: Der Angreifer muss Pakete nicht manuell anvisieren. Sobald eine einzige Umgebung kompromittiert ist, verbreitet sich der Wurm automatisch, indem er sich die Veröffentlichungsrechte des Betreuers zunutze macht.

Für eine vollständige Aufschlüsselung der Malware empfehlen wir Ihnen, den Beitrag von getsafety zu lesen.

Beeinträchtigte Pakete

Paket Versionen
@ahmedhfarag/ngx-perfekte-Bildlaufleiste 20.0.20
@ahmedhfarag/ngx-virtueller-Scroller 4.0.4
@art-ws/allgemein 2.0.28
@art-ws/config-eslint 2.0.4, 2.0.5
@art-ws/config-ts 2.0.7, 2.0.8
@art-ws/db-context 2.0.24
@art-ws/di 2.0.28, 2.0.32
@art-ws/di-node 2.0.13
@art-ws/eslint 1.0.5, 1.0.6
@art-ws/fastify-http-server 2.0.24, 2.0.27
@art-ws/http-server 2.0.21, 2.0.25
@art-ws/openapi 0.1.9, 0.1.12
@art-ws/Paket-Basis 1.0.5, 1.0.6
@art-ws/prettier 1.0.5, 1.0.6
@art-ws/slf 2.0.15, 2.0.22
@art-ws/ssl-info 1.0.9, 1.0.10
@art-ws/Web-App 1.0.3, 1.0.4
crowdstrike 8.1.1, 8.1.2
crowdstrike 0.4.1, 0.4.2
crowdstrike 0.19.1, 0.19.2
crowdstrike 0.34.2, 0.34.3
crowdstrike 1.205.1, 1.205.2
crowdstrike 1.205.1, 1.205.2
crowdstrike 1.205.1, 1.205.2
crowdstrike 1.205.1, 1.205.2
crowdstrike 5.0.1, 5.0.2
@Strg/Deluge 7.2.1, 7.2.2
@ctrl/golang-template 1.4.2, 1.4.3
@ctrl/Magnet-Link 4.0.3, 4.0.4
@ctrl/ngx-codemirror 7.0.1, 7.0.2
@ctrl/ngx-csv 6.0.1, 6.0.2
@ctrl/ngx-emoji-markt 9.2.1, 9.2.2
@ctrl/ngx-Rechtsklick 4.0.1, 4.0.2
@ctrl/qbittorrent 9.7.1, 9.7.2
@ctrl/react-adsense 2.0.1, 2.0.2
@ctrl/gemeinsam-genutzter-Torrent 6.3.1, 6.3.2
@ctrl/tinycolor 4.1.1, 4.1.2
@ctrl/Torrent-Datei 4.1.1, 4.1.2
@ctrl/Übertragung 7.3.1
@ctrl/ts-base32 4.0.1, 4.0.2
@hestjs/Kern 0.2.1
@hestjs/cqrs 0.1.6
@hestjs/demo 0.1.2
@hestjs/eslint-config 0.1.2
@hestjs/logger 0.1.6
@hestjs/skalar 0.1.7
@hestjs/Validierung 0.1.6
@nativescript-community/arraybuffers 1.1.6, 1.1.7, 1.1.8
@nativescript-community/gesturehandler 2.0.35
@nativescript-community/perms 3.0.5, 3.0.6, 3.0.7, 3.0.8
@nativescript-community/sqlite 3.5.2, 3.5.3, 3.5.4, 3.5.5
@nativescript-community/text 1.6.9, 1.6.10, 1.6.11, 1.6.12
@nativescript-community/typeorm 0.2.30, 0.2.31, 0.2.32, 0.2.33
@nativescript-community/ui-collectionview 6.0.6
@nativescript-community/ui-document-picker 1.1.27, 1.1.28
@nativescript-community/ui-drawer 0.1.30
@nativescript-community/ui-image 4.5.6
@nativescript-community/ui-label 1.3.35, 1.3.36, 1.3.37
@nativescript-community/ui-material-untere-navigation 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-bottomsheet 7.2.72
@nativescript-community/ui-material-core 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-core-tabs 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-ripple 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-tabs 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-pager 14.1.36, 14.1.37, 14.1.38
@nativescript-community/ui-pulltorefresh 2.5.4, 2.5.5, 2.5.6, 2.5.7
@nexe/Konfigurationsmanager 0.1.1
@nexe/eslint-Konfiguration 0.1.1
@nexe/logger 0.1.3
@nstudio/angular 20.0.4, 20.0.5, 20.0.6
@nstudio/Fokus 20.0.4, 20.0.5, 20.0.6
@nstudio/nativescript-checkbox 2.0.6, 2.0.7, 2.0.8, 2.0.9
@nstudio/nativescript-Ladeanzeige 5.0.1, 5.0.2, 5.0.3, 5.0.4
@nstudio/ui-collectionview 5.1.11, 5.1.12, 5.1.13, 5.1.14
@nstudio/web 20.0.4
@nstudio/web-angular 20.0.4
@nstudio/xplat 20.0.5, 20.0.6, 20.0.7
@nstudio/xplat-utils 20.0.5, 20.0.6, 20.0.7
@operato/Board 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/Daten-Grist 9.0.29, 9.0.35, 9.0.36, 9.0.37
@operato/graphql 9.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/Headroom 9.0.2, 9.0.35, 9.0.36, 9.0.37
@operato/Hilfe 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/i18n 9.0.35, 9.0.36, 9.0.37
@operato/Eingabe 9.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/Layout 9.0.35, 9.0.36, 9.0.37
@operato/Popup 9.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-Refresh 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42
@operato/Shell 9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39
@operato/Stile 9.0.2, 9.0.35, 9.0.36, 9.0.37
@operato/utils 9.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-Loader 0.3.16, 0.3.17
@teselagen/liquibase-tools 0.4.1
@teselagen/Bereich-Dienstprogramme 0.3.14, 0.3.15
@teselagen/react-Liste 0.8.19, 0.8.20
@teselagen/React-Tabelle 6.10.19
@thangved/Callback-Fenster 1.1.4
@things-factory/Anhang-Basis 9.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-base 9.0.43, 9.0.44, 9.0.45
@things-factory/E-Mail-Basis 9.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/Umgebung 9.0.42, 9.0.43, 9.0.44, 9.0.45
@things-factory/integrationsbasis 9.0.43, 9.0.44, 9.0.45
@things-factory/integrationsmarktplatz 9.0.43, 9.0.44, 9.0.45
@things-factory/shell 9.0.43, 9.0.44, 9.0.45
@tnf-dev/api 1.0.8
@tnf-dev/core 1.0.8
@tnf-dev/js 1.0.8
@tnf-dev/mui 1.0.8
@tnf-dev/react 1.0.8
@ui-ux-gang/devextreme-angular-rpk 24.1.7
@yoobic/Design-System 6.5.17
@yoobic/jpeg-Kamera-es6 1.0.13
@yoobic/yobi 8.7.53
Luftwaffenkommandant 0.3.1
Flugzeugpilot 0.8.8
Angulartics2 14.1.1, 14.1.2
Browser-Webtreiber-Downloader 3.0.8
Kondensator-Benachrichtigungshandler 0.0.2, 0.0.3
Kondensator-Plugin-Gesundheits-App 0.0.2, 0.0.3
Kondensator-Plugin-iHealth 1.1.8, 1.1.9
Kondensator-Plugin-Vonage 1.0.2, 1.0.3
Kondensator-Android-Berechtigungen 0.0.4, 0.0.5
Konfigurationskabel für Cordova 0.8.5
Cordova-Plugin-Voxeet2 1.0.24
Cordova-Voxeet 1.0.32
create-hest-app 0.1.9
db-evo 1.1.4, 1.1.5
devextreme-angular-rpk 21.2.8
ember-browser-services 5.0.2, 5.0.3
Ember-Formular ohne Kopfzeile 1.1.2, 1.1.3
ember-headless-form-yup 1.0.1
Ember-Headless-Tabelle 2.1.5, 2.1.6
ember-url-hash-polyfill 1.0.12, 1.0.13
Klettverschluss 2.2.1, 2.2.2
Begegnungsplatz 0.0.2, 0.0.3, 0.0.4, 0.0.5
crowdstrike 11.0.2, 11.0.3
crowdstrike 4.0.3, 4.0.4
eslint-config-teselagen 6.1.7
globalisieren-rpk 1.7.4
GraphQL-Sequelize-Teselagen 5.3.8
HTML-zu-Base64-Bild 1.0.2
json-regeln-engine-vereinfacht 0.2.1
Sprungtor 0.0.2
koa2-Swagger-UI 5.11.1, 5.11.2
mcfly-semantische-Veröffentlichung 1.3.1
mcp-Wissensdatenbank 0.0.2
mcp-Wissensgraph 1.2.1
mobioffice-cli 1.0.3
Monorepo-Next 13.0.1, 13.0.2
mstate-angular 0.4.4
mstate-cli 0.4.7
mstate-dev-react 1.1.1
mstate-react 1.6.5
ng2-Datei-Hochladen 7.0.2, 7.0.3, 8.0.1, 8.0.2, 8.0.3, 9.0.1
ngx-Bootstrap 18.1.4, 19.0.3, 19.0.4, 20.0.3, 20.0.4, 20.0.5
ngx-Farbe 10.0.1, 10.0.2
ngx-toastr 19.0.1, 19.0.2
ngx-Trend 8.0.1
ngx-ws 1.1.5, 1.1.6
oradm-zu-gql 35.0.14, 35.0.15
oradm-zu-sqlz 1.1.2
ove-auto-annotate 0.0.9
pm2-gelf-json 1.0.4, 1.0.5
printjs-rpk 1.6.1
reagieren-Beschwerde-Bild 0.0.32
React-JS-Schema-Formular-Bedingungen 0.3.18
crowdstrike 4.0.1, 4.0.2
rxnt-Authentifizierung 0.0.3, 0.0.4, 0.0.5, 0.0.6
rxnt-Gesundheitschecks-NestJS 1.0.2, 1.0.3, 1.0.4, 1.0.5
rxnt-kue 1.0.4, 1.0.5, 1.0.6, 1.0.7
swc-Plugin-Komponente-Annotate 1.9.1, 1.9.2
tbssnch 1.0.2
Teselagen-Intervall-Baum 1.1.2
tg-Client-Abfrage-Generator 2.14.4, 2.14.5
tg-Rotvogel 1.3.1
tg-seq-gen 1.0.9, 1.0.10
thangved-React-Grid 1.0.3
ts-Gauß 3.0.5, 3.0.6
ts-Importe 1.0.1, 1.0.2
tvi-cli 0.1.5
ve-bamreader 0.2.6
ve-Editor 1.0.1
verror-extra 6.0.1
VoIP-Anruf-Kit 1.0.2, 1.0.3
wdio-Web-Reporter 0.1.3
yargs-Hilfe-Ausgabe 5.0.3
yoo-Stile 6.0.326

Die Geschichte entwickelt sich weiter…

Sanierungsempfehlung

  • Überprüfen Sie die von Ihnen verwendeten Versionen.
  • Leeren Sie Ihren npm-Cache.
  • Installieren Sie alle Pakete in Ihrem Repository neu.
  • Stellen Sie sicher, dass Sie eine Paket-Lock-Datei verwenden und fixierte Versionen verwenden.

Wie Sie anhand von Aikido feststellen können, ob Sie betroffen sind:

Wenn Sie Aikido , überprüfen Sie Ihren zentralen Feed und filtern Sie nach Malware-Problemen. Die Schwachstelle wird im Feed als kritisches Problem mit einer Bewertung von 100/100 angezeigt. Tipp: Aikido Ihre Repositories jede Nacht Aikido , wir empfehlen jedoch, zusätzlich eine vollständige erneute Überprüfung durchzuführen.

Wenn Sie noch kein Aikido sind, richten Sie ein Konto ein und verbinden Sie Ihre Repositorys. Unsere proprietäre Malware-Abdeckung ist im kostenlosen Tarif enthalten (keine Kreditkarte erforderlich).

Für zukünftigen Schutz sollten Sie die Verwendung von Aikido (Open Source) in Betracht ziehen, einem sicheren Wrapper für npm, npx, yarn... Safechain fügt sich in Ihre aktuellen Arbeitsabläufe ein und funktioniert, indem es npm-, npx-, yarn-, pnpm- und pnpx-Befehle abfängt und die Pakete vor der Installation auf Malware überprüft. Aikido – Open Sources Bedrohungsaufklärung. Stoppen Sie Bedrohungen, bevor sie Ihren Rechner befallen.

4.7/5

Sichern Sie Ihre Software jetzt.

Kostenlos starten
Ohne Kreditkarte
Demo buchen
Ihre Daten werden nicht weitergegeben · Nur Lesezugriff · Keine Kreditkarte erforderlich

Werden Sie jetzt sicher.

Sichern Sie Ihren Code, Ihre Cloud und Ihre Laufzeit in einem zentralen System.
Finden und beheben Sie Schwachstellen schnell und automatisch.

Keine Kreditkarte erforderlich | Scan-Ergebnisse in 32 Sek.