Aikido

npx-Verwirrung: Pakete, die vergessen haben, ihren eigenen Namen anzugeben

Charlie EriksenCharlie Eriksen
|
#
#
#

Im Juli 2025 arbeitete ich an einem Prototyp für ein neues Projekt und beschloss, MikroORM auszuprobieren. In der Dokumentation stand, dass man npx mikro-orm-esm für Migrationen. Also habe ich das getan.

npm ERR! Code E404
npm ERR! 404 Nicht gefunden – GET https://registry.npmjs.org/mikro-orm-esm

Das Paket existiert nicht, das ist seltsam! Dann kam mir ein Gedanke: Was, wenn jemand das registriert hat? Ich hätte gesehen:

Die folgenden Pakete müssen installiert werden:
mikro-orm-esm@1.0.0
Möchten Sie fortfahren? (y)

Ich hätte einfach zugeschlagen. yDas macht jeder. Und nichts in dieser Aufforderung verrät Ihnen, ob Sie Malware oder ein legitimes Tool installieren werden.

Die Dokumente verwiesen auf ein nicht vorhandenes Paket. Wie viele andere phantom gibt es noch? Wie viele davon wurden bereits von Angreifern beansprucht? Ich musste es wissen.

Also begann ich zu recherchieren. Ich schrieb Skripte, um npm nach Paketen zu durchsuchen, auf die in READMEs und Skripte, aber nie tatsächlich veröffentlicht. Tausende von Querverweisen npx Beschwörungen. Dutzende gefunden. 14 davon für mich beansprucht, bevor es jemand anderes tun konnte. Dann kam S1ngularity, und die Forschung wurde auf Eis gelegt.

Sechs Monate später wurde ich dank der Community, die ähnliche Dinge erforschte, an meine Forschung erinnert. Endlich habe ich mir die Downloadzahlen angesehen: 121.539 Downloads!

Die Leute hatten diese nicht existierenden Befehle tausende Male pro Woche eingegeben. Monatelang. Während die Pakete einfach nur da lagen und Daten sammelten. 

Sechs Monate Daten

Die Downloadzahlen blieben nicht unverändert, sondern stiegen an. Ende Juli begann ein langsamer Anstieg. Der jüngste Höchststand lag bei 4.236 Downloads an einem einzigen Tag (16. Januar 2026).

121.539 Downloads in 7 Monaten
128 phantom -Pakete, Juli 2025 bis Januar 2026
121,539
Gesamtzahl der Downloads
3,903
Wöchentlicher Durchschnitt
4,236
Spitzentag (16. Januar)
4K 3K 2K 1K 🎄 Weihnachtsdip Höhepunkt: 4.236 Juli August Sep Oktober Nov Dezember Januar
Das wöchentliche Download-Volumen stieg von Juli 2025 bis Januar 2026 stetig an.
  • Insgesamt: 121.539 Downloads in 128 Paketen
  • Wöchentlicher Durchschnitt: 3.903
  • Spitzentag: 4.236 Downloads (16. Januar 2026)

Kurzer Hinweis zum Rauschen: Jedes Mal, wenn Sie eine neue Version eines Pakets veröffentlichen, wird es automatisch 60 bis 100 Mal von Sicherheitsscannern und Mirrors heruntergeladen. Das ist das Basisrauschen pro Veröffentlichung. Pakete mit mehreren Versionen sammeln schnell Rauschen an. Alles, was konstant über diesem Schwellenwert liegt, ist echte Nutzung.

Sehen Sie den Einbruch Ende Dezember? Feiertage. Selbst phantom machen Weihnachten frei.

Die Großen Drei

Drei Pakete machen 79 % aller Downloads aus:

  • OpenAPI-Generator-CLI: 48.356 Downloads (tatsächliches Paket: @openapitools/openapi-generator-cli)
  • cucumber-js: 32.110 Downloads (tatsächliches Paket: @Gurke/Gurke)
  • depcruise: 15.637 Downloads (tatsächliches Paket: Abhängigkeits-Cruiser)
Die großen Drei: 79 % des gesamten Datenverkehrs
Drei phantom machen 96.103 der insgesamt 121.539 Downloads aus.
openapi-generator-cli → aktuell: @openapitools/openapi-generator-cli
48,356
23 npm-Referenzen650 GitHub-Ergebnisse3.994 in den letzten 7 Tagen
cucumber-js → aktuell: @cucumber/cucumber
32,110
28 npm-Referenzen856 GitHub-Ergebnisse
depcruise → aktuell: dependency-cruiser
15,637
27 npm-Referenzen836 GitHub-Ergebnisse

OpenAPI-Generator-CLI wurde in den letzten 7 Tagen 3.994 Mal heruntergeladen. Das bedeutet, dass fast 4.000 Mal versucht wurde, einen Befehl auszuführen, der nicht existiert. In einer Woche.

Der Long Tail

Die übrigen Pakete mit bedeutenden Downloads:

  • jsdoc2md: 4.641 Downloads
  • grpc_tools_node_protoc: 4.518 Downloads
  • Halb-Schalter: 1.166 Downloads
  • Styleguide: 805 Downloads
  • Mikro-ORM-ESM: 314 Downloads
  • pvbase64: 142 Downloads
  • Cromwell: 106 Downloads
Der Long Tail
Verbleibende Pakete mit bemerkenswerten Downloadzahlen (ohne die drei Großen)
jsdoc2md
4,641
grpc_tools_node_protoc
4,518
Halb-Schalter
1,166
Styleguide
805
Mikro-ORM-ESM
314
pvbase64
142
Cromwell
106
📊 Rauschschwelle: Jede Version generiert 60 bis 100 Scanner-Downloads. Pakete unter insgesamt ~100 (grau dargestellt) sind wahrscheinlich allesamt Rauschen. Alles darüber hinaus entspricht echten Maschinen, echten Umgebungen und echten Anmeldedaten.
Über 1.000 Downloads100–1.000 DownloadsAn der Geräuschschwelle

Erinnern Sie sich an die 60-100 Downloads pro Version? Ein Paket mit drei Versionen könnte 180-300 Downloads reinen Rauschens haben. Fathym mit insgesamt 83 Downloads ist wahrscheinlich nur Lärm. Aber Mikro-ORM-ESM Mit 314? Selbst wenn man mehrere Versionen berücksichtigt, sind das echte Versuche.

Styleguide Mit 805 Downloads sind das Hunderte von tatsächlichen Ausführungen. Es könnte sich um wiederholte CI/CD-Ausführungen handeln. Es könnten Dutzende verschiedener Entwickler sein. So oder so handelt es sich um die tatsächliche Nutzung eines Pakets, das nicht existieren sollte.

Wie wir diese gefunden haben

Wir betreiben bei Aikido einen vollständigen npm-Registry-Mirror. Parsed every package.json und README über die gesamte Registrierung hinweg. Extrahiert npx Befehle. Gegenüberstellung mit den tatsächlich registrierten Befehlen. Wir haben auch die Code-Suche von GitHub durchsucht, um zu sehen, wie häufig diese phantom in der Praxis vorkommen, in Dokumentationen, CI-Konfigurationen, Skripten und überall dort, wo Entwickler sie möglicherweise referenzieren.

Drei Datenpunkte für jedes Paket:

  • Registry-Referenzen: Wie viele npm-Pakete erwähnen diesen Befehl in ihrer package.json oder README?
  • GitHub-Ergebnisse: Wie viele Code-Dateien oder Repositorys verweisen auf diesen Befehl auf GitHub?
  • Downloads: Wie oft wurde tatsächlich versucht, es auszuführen?

Im Juli 2025 haben wir 14 Pakete beansprucht. Als ich die Recherche im Januar wieder aufnahm, haben wir unsere Analyse erweitert und viele weitere gefunden. Bis jetzt haben wir insgesamt 128 Pakete beansprucht.

Komplette Aufschlüsselung des Pakets
npm-Referenzen, GitHub-Code-Suchergebnisse und Downloads für alle beanspruchten Pakete
npm-ReferenzenGitHub-ErgebnisseDownloads
🔴 Wichtige Angriffsvektoren (über 10.000 Downloads)
Paket Referenzen GitHub Downloads
OpenAPI-Generator-CLI 23 650 48,356
cucumber-js 28 856 32,110
depcruise 27 836 15,637
🟡 Signifikante Angriffsvektoren (1.000–10.000 Downloads)
Paket Referenzen GitHub Downloads
jsdoc2md 92 155 4,641
grpc_tools_node_protoc 83 226 4,518
Halb-Schalter 70 80 1,166
Mäßiges Risiko + Lärmgrenzwert
Paket Referenzen GitHub Downloads
Styleguide HOHE SICHTBARKEIT 246 286 805
mikro-orm-esm NUR DOKUMENTE 0 80 314
pvbase64 18 70 142
Cromwell 31 23 106
git-Skripte-vor-dem-Push NIEDRIGE KONVERSION 126 133 93
fathym NIEDRIGE KONVERSION 119 9 83
aofl, flatjs-forge 42, 30 30, 2 99, 91
Wichtige Erkenntnis: Eine hohe Anzahl an npm-Referenzen bedeutet nicht immer eine hohe Anzahl an Downloads. styleguidist hat 246 Referenzen, aber 805 Downloads, während mikro-orm-esm 0 Referenzen, aber 314 Downloads allein aus der Dokumentation hat.

Einige bemerkenswerte Muster:

Wichtige Angriffsvektoren (über 10.000 Downloads): OpenAPI-Generator-CLI, cucumber-js, und depcruise Alle zeigen eine starke Korrelation zwischen npm-Referenzen, GitHub-Erwähnungen und tatsächlichen Downloads. In den Händen von Angreifern wären diese Daten verheerend.

Hohe Sichtbarkeit, geringe Konversion: Styleguide hat 246 npm-Referenzen und 286 GitHub-Ergebnisse, aber nur 805 Downloads. git-Skripte-vor-dem-Push hat 126 Referenzen, aber nur 93 Downloads. Sichtbarkeit ist nicht immer gleichbedeutend mit Umsetzung.

Nur-Dokumentationsvektoren: Mikro-ORM-ESM hat keine npm-Paketverweise, aber 80 GitHub-Ergebnisse und 314 Downloads. Ein Beweis dafür, dass allein die Dokumentation Hunderte von Installationen generieren kann, auch ohne Verweise im npm-Ökosystem.

Warum das gefährlich ist

Der Angriff ist einfach.

Ein Angreifer registriert das Paket. Fügt ein postinstall Skript, das Umgebungsvariablen ausspäht: npm-Token, Cloud-Anmeldedaten, API-Schlüssel, was auch immer gerade herumliegt. Dann wartet es.

In Spitzenzeiten sind das potenziell etwa 4.000 kompromittierte Rechner pro Woche. Entwickelnde . CI-Server. Build-Umgebungen. Viele davon laufen möglicherweise mit Anmeldedaten in Umgebungsvariablen. Phishing ist nicht erforderlich. Keine Kompromittierung der Lieferkette bestehender Pakete. Man muss nur den Namen beanspruchen und warten, bis npx die Opfer zu einem bringt.

Wenn jemand den Befehl ausführt, sieht er Folgendes:

Die folgenden Pakete müssen installiert werden:
openapi-generator-cli@1.0.0
Möchten Sie fortfahren? (y)

Die Eingabeaufforderung zeigt nicht, wer sie veröffentlicht hat. Sie zeigt nicht, wann. Sie zeigt nicht, ob es das ist, wonach Sie suchen. Diese Eingabeaufforderung wird möglicherweise regelmäßig für legitime Tools angezeigt. Da wir Menschen sind, übernimmt das Muskelgedächtnis die Kontrolle. Sie tippen y, wie alle anderen auch. Das ist alles. Das ist der gesamte Angriff.

Wir haben in mehreren Runden 128 Lücken geschlossen. Die schlimmsten Fälle haben wir aufgedeckt. Aber es gibt noch Tausende weitere.

Ein Hinweis zu den Schutzmaßnahmen von npm

npm verfügt über einen Schutz vor Typosquatting. Als wir versuchten, bestimmte Namen zu beanspruchen, lehnte npm diese aufgrund von Ähnlichkeitsfehlern ab. Namen wie rsbuild, vuedoc, Sträfling, t-ci waren alle zu ähnlich zu bestehenden Paketen. Das ist gut. Es bedeutet, dass npm offensichtliche Versuche der Besetzung aktiv blockiert.

Aber diese phantom sind keine Tippfehler. Es handelt sich um Namen, die von vornherein nie registriert wurden. Die Ähnlichkeitsprüfung von npm erkennt diese nicht, da es nichts gibt, womit sie „ähnlich” sein könnten.

Was Sie tun sollten

Verwenden Sie npx --no-install

npx --no-install Ihr-Befehl

Dadurch wird npx gezwungen, nur lokale Binärdateien zu verwenden. Kein Fallback auf die Registrierung. Wenn es nicht installiert ist, schlägt es fehl. Das ist genau das, was Sie wollen.

Installieren Sie die CLI-Tools explizit. Verlassen Sie sich nicht auf npx um sie zu holen:

{
  "devDependencies": {
    "@openapitools/openapi-generator-cli": "^2.7.0"
  }
}

Vor dem Ausführen überprüfen. Die Dokumentation sagt, dass man npx Etwas? Überprüfen Sie zunächst, ob das Paket tatsächlich vorhanden ist. Überprüfen Sie, ob es das richtige ist. Insbesondere in CI/CD.

Beanspruchen Sie Ihren Namensraum. Wenn Sie ein CLI-Tool verwalten, registrieren Sie die offensichtlichen Aliase und Falschschreibungen. Eine günstige Versicherung gegen böswillige Handlungen Dritter.

Wie Sie feststellen können, ob Sie betroffen sind

Wenn Sie Aikido , überprüfen Sie Ihren zentralen Feed und filtern Sie nach Malware-Problemen. Alle Schwachstellen phantom werden im Feed als kritisches Problem mit einer Bewertung von 100/100 angezeigt. Aikido Ihre Repositories jede Nacht Aikido , wir empfehlen jedoch, zusätzlich einen vollständigen Rescan durchzuführen.

Wenn Sie noch kein Aikido sind, richten Sie ein kostenloses 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 und pnpm. SafeChain wird in Ihre aktuellen Workflows integriert, fängt Befehle zur Installation von Paketen ab und überprüft diese anhand von Aikido (unserer Bedrohungsaufklärung), bevor sie auf Ihren Rechner gelangen. Stoppen Sie Bedrohungen schon im Keim.

Die Mathematik

121.539 Downloads in sieben Monaten. Durchschnittlich 3.903 pro Woche. Spitzenwert von 4.236 an einem einzigen Tag. Insgesamt 128 Pakete beansprucht (14 im Juli, der Rest im Januar).

Das npm-Ökosystem umfasst Millionen von Paketen. Entwickler führen täglich tausende Male npx-Befehle aus. Die Lücke zwischen „praktischer Standardeinstellung“ und „Ausführung beliebiger Codes“ ist ein einziger nicht beanspruchter Paketname.

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.