Zum Inhalt springen
Guide

Axios wurde durch eine Hintertür ersetzt: 5 NPM-Pakete, die durch HTTP-APIs ersetzt werden sollen

| 9 min read

Ein mit Nordkorea verbundener Akteur hat einen RAT in Axios 1.14.1 an 70 Millionen wöchentliche Installer verschickt. Fünf npm-Einzelpakete, die Sie noch heute löschen und durch HTTP-API-Aufrufe ersetzen können.

Server room with network cables representing supply chain infrastructure
Photo by Taylor Vick on Unsplash

Am 31. März 2026 veröffentlichte ein mit Nordkorea verbundener Betreiber zwei Backdoor-Versionen von axios bis npm. Die Versionen 1.14.1 und 0.30.4 werden mit einer Postinstall-Abhängigkeit namens „ausgeliefert plain-crypto-js das ein plattformspezifisches RAT-Implantat hervorbrachte sfrclak[.]com:8000. Die Pakete waren drei Stunden lang live. Axios bekommt 70 Millionen wöchentliche Downloads. Rechnen Sie nach.

Jeder ausgeführte CI-Job npm install Während dieses Fensters wurde eine Nutzlast in seinen Build gesendet Umgebung. Geheimnisse in Umgebungsvariablen wurden exfiltriert; Private GitHub-Token sind daran gewöhnt neuwertige Nachfolgeveröffentlichungen; Entwickler-Laptops laufen npm install vor Ort bekam eine RAT. Bei dem Vorfall wurde 2FA umgangen, da die Maschine des Betreuers bereits durch eine kompromittiert wurde gezielte Social-Engineering-Kampagne. 2FA auf dem npm-Konto bewirkt nichts, wenn der Angreifer es besitzt das Terminal, das ausgeführt wird npm publish.

Sie können diese Angriffsklasse nicht eliminieren, aber Sie können Ihren Explosionsradius verkleinern. Jedes npm-Paket das macht eine kleine Sache; Eine E-Mail validieren, eine Telefonnummer analysieren, HTML entfernen, generieren ein QR-Code, der ein JWT signiert; ist ein Paket, das Sie löschen und durch einen HTTPS-Aufruf an eine API ersetzen können Steuerung über drehbaren Schlüssel. Ein kompromittiertes Paket wird ausgeführt, bevor Sie reagieren können. Ein kompromittierter API-Schlüssel hört innerhalb von Sekunden auf zu arbeiten.

Hier sind fünf npm-Pakete, die Sie diese Woche durch die HTTP-API ersetzen können, die dasselbe tut: plus einen CI-Schutz, der verhindert, dass neue Postinstall-Hooks in Ihrer Sperrdatei landen.

Überprüfen Sie Ihre aktuelle NPM-Abhängigkeitsoberfläche

Bevor Sie etwas löschen, sollten Sie wissen, was Sie haben. Dieser Shell-Durchlauf zeigt Produktionsabhängigkeiten auf mit Install-Hooks und prüft, ob sich die vergifteten Axios-Versionen irgendwo in Ihrem Baum befinden:

Wenn eine der Axios-Versionen in Ihrer Sperrdatei erscheint, rotieren Sie jedes Geheimnis auf dem betroffenen Computer oder CI Job hatte Zugriff auf. Nicht „Überprüfen Sie die Protokolle“. Drehen. Gehen Sie davon aus, dass die Exfiltration in den 180 Minuten stattgefunden hat zwischen Veröffentlichung und Löschung. Geheimnisse, die durchgesickert sind, können nicht preisgegeben werden.

Google Threat Intelligence schreibt den Vorgang UNC1069 zu, dem gleichen Akteur, der ihn ausgeführt hat früher WAVESHAPER Kampagnen. Ihr Playbook richtet sich an Maintainer-Laptops über Phishing, nutzt dann die Anmeldeinformationen des Betreuers zur Veröffentlichung. Davon muss Ihre Verteidigung ausgehen Mindestens ein Betreuer mindestens einer transitiven Abteilung ist nur einen Phish davon entfernt, ein Implantat zu sein Liefersystem.

Ersatz 1: E-Mail-Validator → /v1/email/validate

validator, email-validator, deep-email-validator, Und disposable-email-domains tauchen in einem großen Teil der Anmeldeströme auf. Zusammen fügen sie hinzu ungefähr ein halbes Megabyte Installationsgewicht, ihre eigenen transitiven Bäume und eine gepflegte Liste von Wegwerfdomänen, die innerhalb weniger Wochen veraltet sind.

Die API überprüft Syntax, DNS-MX-Einträge und eine Live-Liste der verfügbaren Domänen in einem Aufruf. Tauschen Die beiden Pakete sehen so aus:

Sie verlieren die Möglichkeit zur Offline-Validierung. Sie erhalten einen gepflegten MX-Check, eine Live-Verfügbarkeitsliste, und keine Pakete mit Postinstall-Hooks in Ihrem Baum. Für die Anmeldung, den Checkout und den Webhook E-Mail-Felder, dieser Kompromiss begünstigt die API.

Ersatz 2: libphonenumber-js → /v1/phone

libphonenumber-js ist eine Portierung von Google libphonenumber. Es wiegt 147 KB minimiert. Der „Mini“-Build sinkt auf 79 KB, verliert jedoch für die meisten Länder Metadaten. Die vollständigen Metadaten Bundle bringt das Gewicht wieder auf 2 MB entpackt. Auf Cloudflare Workers oder einem kalten Lambda ist dies der Fall echte Latenz, die Sie bei jedem Aufruf bezahlen.

Ein POST gibt das E.164-Format, das Land, die nationale Nummer, den Leitungstyp und die Zeitzone zurück. Wenn die Nummer ist ungültig, data.valid Ist false und der Rest ist null. Ihre Serverseite Der Anmeldeablauf ruft dies zwischen „Formular lesen“ und „In Datenbank schreiben“ auf. Der 60-ms-API-Roundtrip dauert innerhalb Ihres vorhandenen DB-Schreibfensters.

Ersatz 3: qrcode → /v1/qr/generate

Der qrcode Das NPM-Paket selbst ist in Ordnung: 34 KB, kein Postinstall-Hook. Was nicht in Ordnung ist, ist die canvas Peer-Abhängigkeit, zu der Sie in der Hälfte der Tutorials gezwungen werden, was ein Ende hat nativen Code, installiert Node-Gyp und verfügt über zehn Jahre CVEs in der gesamten Build-Toolchain. Jeder Eingeborene npm dep ist eine Supply-Chain-Naht.

Die Antwort ist rohes SVG. Leiten Sie es in eine Datei weiter, stopfen Sie es in eine Rechnungsvorlage oder rendern Sie es inline in einer React-Komponente mit dangerouslySetInnerHTML. Keine nativen Module, kein Build Toolchain, kein transitiver Baum.

Ersatz 4: jsonwebtoken → /v1/jwt/generate und /v1/jwt/decode

jsonwebtoken ist eine der am häufigsten kopierten JWT-Bibliotheken in Node. Es ist auch die Bibliothek Die meisten Leute konfigurieren es falsch: falscher Algorithmus, fehlender Zielgruppenanspruch, kein Ablaufdatum. Ein falscher Algorithmus Der Verifizierungsaufruf und ein vom Angreifer kontrollierter Header führen das JWT aus der Zeit von 2015 wieder ein none Verletzlichkeit. Die API erzwingt Algorithmus-Whitelists und lehnt nicht signierte Token am Endpunkt ab:

Verwenden Sie dies für kurzlebige Token, die von einem Back-End-Dienst ausgegeben werden: Links zum Zurücksetzen des Passworts, einmalig Download-URLs, Service-to-Service-Bearer-Token. Verwenden Sie keinen externen Dienst für Benutzersitzungen JWTs auf dem Hot Path jeder authentifizierten Anfrage; Halten Sie für diese Fälle eine verifizierte Bibliothek in Bearbeitung und sperren Sie den Algorithmus.

Ersatz 5: HTML-to-Text → /v1/html-to-text/convert

html-to-text, sanitize-html, node-html-parser, und ihre Freunde gibt es, weil jede API, die Benutzerinhalte akzeptiert, irgendwann HTML für Klartext entfernen muss B. Vorschauen, E-Mail-Zusammenfassungen oder Suchindizierung. Ihr Gesamtgewicht beträgt 500 KB bis 1,2 MB; sie ziehen parse5 oder htmlparser2 durch die Tür, von denen jeder sein eigenes hat Betreueroberfläche.

Für eine reichhaltigere Ausgabe /v1/html-to-markdown gibt GitHub-Flavored Markdown zurück und /v1/html-sanitize gibt bereinigtes HTML mit einer konfigurierbaren Zulassungsliste zurück. Wählen Sie das aus Das entspricht der Art und Weise, wie Ihr nachgeschalteter Verbraucher den Inhalt speichern möchte.

Fügen Sie einen CI-Schutz hinzu, der neue Postinstall-Hooks blockiert

Das Löschen von Paketen ist eine einmalige Arbeit. Schlank bleiben ist kontinuierlich. Diese Überprüfung der GitHub-Aktionen schlägt fehl die PR, wenn ein Lockfile-Update ein neues einführt postinstall oder preinstall irgendwo im Baum einhaken:

Die Prüfung ist kostengünstig, läuft bei jedem PR und erzwingt eine menschliche Überprüfung, bevor ein neuer Skript-Hook landet. Kombiniere es mit npm config set ignore-scripts true auf CI und expliziten Zulassungslisten für Pakete, von denen Sie wissen, dass sie sie benötigen esbuild-Stil-Postinstallation (TypeScript, Puppeteer, bcrypt).

Was Sie aufgegeben haben und wann Sie es zurückgeben sollten

Die Verlagerung der Validierung auf einen HTTP-Aufruf ist mit echten Kosten verbunden. Sie tauschen sie gegen eine kleinere Abhängigkeit ein Oberfläche:

Abtausch npm-Paket HTTP-API
Latenz Mikrosekunden 50 bis 150 ms vom Rand entfernt
Offline-Nutzung Ja NEIN
Risiko installieren Postinstall führt beliebigen Code aus Kein Installationsschritt
Widerruf Neu erstellen, erneut veröffentlichen, erneut bereitstellen API-Schlüssel in Sekunden rotieren
Audit-Trail Standardmäßig keine Protokoll pro Anruf anfordern
Versionsdrift Anpinnen oder renovieren Versionsheader, stabiler Vertrag

Die richtige Antwort ist „beides, mit Absicht.“ Halten Sie Bibliotheken für kritische Pfade im Prozess (Sitzungs-JWT). Verifizierung, Kryptoprimitive, Authentifizierungs-Middleware). Verschieben Sie den langen Schwanz der Einzweck-Versorgungsunternehmen aus Ihrer Sperrdatei und auf einen signierten HTTPS-Endpunkt, den Sie widerrufen können.

Wichtige Erkenntnisse

  • Angenommen, ein Betreuer ist nur einen Katzensprung von einem Implantat entfernt. Axios bekam wöchentlich 70 Millionen Downloads und trotzdem wurde sein npm-Konto durch einen Social-Engineering-Angriff auf a kompromittiert persönlicher Laptop.
  • Prüfen Sie noch heute Postinstall-Hooks. Jede Abhängigkeit, die währenddessen beliebigen Code ausführt npm install ist eine Nahtstelle in der Lieferkette. Führen Sie eine Bestandsaufnahme durch und löschen Sie sie dann oder setzen Sie sie auf die Zulassungsliste.
  • Löschen Sie zunächst Einzweckpakete. E-Mail, Telefon, QR, JWT-Signierung, HTML Konvertierung; Jeder hat einen einzeiligen HTTP-Ersatz mit einem widerrufbaren Schlüssel.
  • Nach der Belichtung drehen, nicht untersuchen. Wenn vergiftete Axios in Ihrem gelandet sind Baum, drehen Sie jedes Geheimnis, das die betroffene Umgebung berührt. Die Exfiltration erfolgt innerhalb von Minuten.
  • Fügen Sie einen CI-Schutz hinzu. Neu blockieren postinstall Haken verhindern, dass sie in Ihrem landen lockfile ohne menschliche Überprüfung. Der Axios-Kompromiss hätte diese Wache zum Fallen gebracht.

Botoi bietet HTTP-Ersatz für die fünf oben genannten Pakete und etwa 145 weitere Einzelzweckpakete Dienstprogramme: Hashing, UUID-Generierung, Regex-Tests, Zeitstempelkonvertierung, JSON-Schemavalidierung, Barcode-Generierung, PDF-Rendering und der Rest. Ein API-Schlüssel, 5 Anforderungen/Min. im kostenlosen Kontingent, nein Haken installieren. Durchsuchen Sie die interaktive Dokumente oder verkabeln MCP-Server in dein KI-Coding-Agent zum Aufrufen derselben Endpunkte von Claude Code oder Cursor aus, ohne den Editor zu verlassen.

FAQ

Was ist mit dem axios npm-Paket im März 2026 passiert?
Zwischen dem 31. März 2026, 00:21 und 03:20 UTC, nutzte ein Angreifer ein manipuliertes Betreuerkonto, um Axios 1.14.1 und 0.30.4 mit einer bösartigen Postinstall-Abhängigkeit namens plain-crypto-js zu veröffentlichen. Die Abhängigkeit hat plattformspezifische RAT-Implantate von sfrclak[.]com:8000 heruntergeladen. Google Threat Intelligence schreibt die Operation UNC1069 zu, einem Nordkorea-Nexus-Akteur. Die Pakete waren etwa drei Stunden lang aktiv, lange genug, um weltweit in CI-Caches und Entwickler-Laptops zu landen.
Reduziert das Ersetzen von NPM-Paketen durch HTTP-APIs das Risiko?
Es verkleinert die Angriffsfläche auf zwei Arten. Zuerst entfernen Sie einen Postinstall-Hook, der beliebigen Code auf Ihrem Build-Server ausführt. Zweitens verschieben Sie die Validierungslogik vom Entwickler-Laptop auf einen signierten, reinen HTTPS-Endpunkt, den Sie über die API-Schlüsselrotation steuern. Ein vergiftetes Paket wird ausgeführt, bevor Sie reagieren können. Ein widerrufener API-Schlüssel funktioniert innerhalb von Sekunden nicht mehr.
Ist ein HTTP-Aufruf langsamer als ein lokales NPM-Paket?
Für einen einzelnen Anruf auf eine Kaltanfrage, ja; Die typische Botoi-API-Latenz beträgt 50 bis 150 ms von einem Client in Nordamerika bis zum Cloudflare-Edge. Bei den meisten serverseitigen Abläufen (Anmeldung, Auschecken, Webhook-Verarbeitung), die sich mit DB-Aufrufen überschneiden, die Sie bereits tätigen, fügt es nichts Messbares hinzu. Bei Pfaden mit hohem Durchsatz wird die Antwort per Eingabe-Hash für dasselbe Latenzprofil wie bei einem lokalen Paket zwischengespeichert.
Wie überprüfe ich mein Repo jetzt auf riskante NPM-Pakete?
Führen Sie npm audit --omit=dev aus, um Produktionsabhängigkeiten aufzudecken, und überprüfen Sie dann jedes Paket mit einem Postinstall- oder Preinstall-Hook mithilfe der Skripte npm ls und npm view {name}. Pakete, die eine kleine Sache erledigen (E-Mail-Validierung, QR-Generierung, JWT-Signierung, Telefonparsing, HTML-Stripping), sind gute Kandidaten für die Umstellung auf einen HTTP-Aufruf. Pakete, die Kryptografie durchführen oder aktiv Netzwerkinhalte abrufen, sind die Prüfziele mit der höchsten Priorität.
Was passiert, wenn anstelle von npm ein HTTP-API-Anbieter kompromittiert wird?
Der Explosionsradius ist kleiner und die Erkennung schneller. Sie kontrollieren den API-Schlüssel und können ihn in einem Aufruf widerrufen. Ihr Anbieter stellt eine Statusseite, ein Vorfall-RSS und signierte Antworten über HTTPS zur Verfügung. Vergleichen Sie das mit einem Paket, das in Ihrem Build ausgeführt wird und dessen Erkennung das Lesen jedes Postinstall-Hooks in Ihrem transitiven Abhängigkeitsbaum erfordert. Kein Risiko besteht auch nicht; Das eine gibt dir Hebel, das andere nicht.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.