- Der jüngste Supply-Chain-Angriff im NPM-Paket-Ökosystem hätte tatsächlich noch deutlich größeren Schaden anrichten können
- Die Angreifer missbrauchten populäre Bibliotheken, setzten die Malware jedoch nur dazu ein, Adressen von Krypto-Wallets zu ändern
- Der Angriff erfolgte über raffinierte Phishing-E-Mails, mit denen die 2-Faktor-Authentifizierungsdaten von Entwicklern gestohlen wurden
- Wäre dies in einer noch gefährlicheren Form eingesetzt worden, etwa zum Diebstahl von API-Schlüsseln, hätte enormes Schadenspotenzial bestanden
- Betont wird, dass jede Abhängigkeit potenziell riskant ist und wie wichtig es ist, den gesamten Dependency-Tree zu verstehen
Überblick über den Angriff und die Bedenken
- Im NPM-Ökosystem, einem der größten Paket-Ökosysteme überhaupt, waren kürzlich populäre Pakete einem Angriff ausgesetzt
- Beispielhafte Funktionen: Terminal-Farbverarbeitung, Mapping von Farbnamen zu RGB, Debug-Dekoratoren für Funktionen, Utility zur Erkennung array-ähnlicher Werte usw.
- Solche allgemeinen Abhängigkeiten werden sehr breit eingesetzt, und sobald Code eingeschleust wird, ist die Wahrscheinlichkeit hoch, dass er direkt in Produktionsumgebungen ausgerollt wird
- Hätte der Angriff bösartige Proxys, den Diebstahl von API-Schlüsseln oder andere schwerwiegende Angriffe enthalten, wären die Folgen womöglich wesentlich gravierender gewesen
- Tatsächlich manipulierte die Malware lediglich Krypto-Zahlungsadressen in Online-Wallets (z. B. MetaMask)
Die Raffinesse des Phishing-Angriffs
- Ausgangspunkt des Angriffs war eine sehr gut gemachte Phishing-E-Mail
- Sie nutzte den NPM-Benutzernamen, um einen personalisierten Eindruck zu erzeugen
- Mit der Aufforderung, „aus Sicherheitsgründen Passwort und 2FA-Zugangsdaten zu ändern“, wurde Vertrauen aufgebaut
- In Verbindung mit den Eigenheiten der NPM-Betriebsweise war der Inhalt so gestaltet, dass gewöhnliche Nutzer leicht darauf hereinfallen konnten
- Durch die Nennung einer konkreten Frist wurde Dringlichkeit erzeugt, um in stressigen Situationen unvorsichtige Klicks auf den Phishing-Link auszulösen
- Verwendet wurde eine
.help-Domain, die der offiziellen NPM-Domain stark ähnelte
- Der auffälligste Hinweis war letztlich nur die Verwendung von „npmjs.help“ statt der offiziellen Domain
- Heute werden viele neue gTLDs (Generic Top Level Domains) breit für Blogs, Dokumentation und Ähnliches genutzt, sodass auch das natürlich wirken kann
Das potenzielle Schadensausmaß
- Die Phishing-E-Mail ermöglichte nach dem Diebstahl der 2FA-Daten das Einschleusen von Angriffscode und die Veröffentlichung neuer Paketversionen
- Betroffen waren sehr weit verbreitete Bibliotheken wie is-arrayish, color-string, color-name
- Wäre die Malware nicht nur zur Umleitung von Kryptowährungen, sondern auch zum Diebstahl von API-Schlüsseln eingesetzt worden, hätte das verheerende Folgen haben können
- Beispielsweise wären massenhafte Leaks von OpenAI- oder AWS-API-Schlüsseln denkbar gewesen, mit langfristigen und großflächigen Schäden
- Tatsächlich wurden die meisten infizierten Bibliotheken vor allem in Kommandozeilen-Tools verwendet, wodurch der Zweck des Krypto-Diebstahls entsprechend begrenzt war
Fokus auf das Web3-Ökosystem und die Strategie der Angreifer
- Der Angriff scheint in erster Linie auf Web3-Nutzer gezielt zu haben, etwa auf Zahlungen im Browser
- Durch den Angriff auf allgemeine Bibliotheken ohne direkten Web3-Bezug konnten die Angreifer einer schnellen Erkennung und Blockierung im Web3-Ökosystem eher entgehen
- Beispiel: Selbst wenn Bibliotheken mit MetaMask-Integration besonders sorgfältig geprüft werden, ist ein Angriff über Utilities für Textfarben kaum zu erwarten
Lehren für das Entwickler-Ökosystem
- Dieser Fall unterstreicht, dass jedes Dependency-Paket tatsächlich bösartig sein kann
- In der Praxis gibt es klare Grenzen dabei, Dependency-Trees vollständig zu kontrollieren oder permanent zu überwachen
- Zudem deutet der Fall darauf hin, dass Sicherheitsprüfungen unter dem Druck schneller Produktions-Deployments und knapper Zeit leicht in den Hintergrund geraten
- Künftig wird es noch wichtiger, die gesamte Dependency-Struktur eines Projekts zu erfassen und mit Vorsicht zu verwalten
Abschluss und Hinweis
- Dieser Text soll niemanden anprangern oder verantwortlich machen; wichtig ist vielmehr die Erkenntnis, dass jeder Phishing-Angriffen ausgesetzt sein kann
- Seit der Veröffentlichung dieses Beitrags kann sich die Lage verändert haben; bei Unklarheiten oder möglichen Fehlern sollte direkt selbst nachgeprüft werden
Tags:
1 Kommentare
Hacker-News-Kommentare
Der nx-npm-Supply-Chain-Angriff war eine Kugel, der viele Unternehmen nicht entkommen wären. Schon allein die Installation des VS-Code-nx-Plugins führte dazu, dass automatisch die neueste nx-Version von npm geprüft wurde. Wenn dabei GitHub-Sitzungen vorhanden waren, etwa über die GH CLI mit einem Firmenkonto, oder wichtige Zugangsdaten in
.env-Dateien lagen, konnten all diese Daten abgeflossen sein. Das wäre selbst bei sauberem Dependency-Pinning und gut gemanagten Sicherheitsupdates kaum zu verhindern gewesen. In diesem Ökosystem braucht es grundlegend tiefere Veränderungen. Details stehen in der offiziellen Sicherheitsmitteilung.git pushschalte ich das Internet ein.Wir sind einer Katastrophe wirklich nur knapp entgangen. Kaum zu glauben, dass ein Angreifer mit Zugriff auf solche Pakete am Ende nur ein simples Krypto-Diebstahl-Tool hochgeladen hat. Bei so einer einmaligen Gelegenheit wäre es doch profitabel, noch eine Woche extra zu investieren und raffiniertere Exploits einzubauen: API-Keys, zusätzliche SSH-Public-Keys, Server-IP-Leaks, Browser-Profile oder Session-Tokens auf Entwicklergeräten, sogar die bei mir auf dem Desktop gespeicherten Amazon-Kartendaten. Da gibt es unendlich viel zu stehlen. Selbst wenn man es nicht selbst nutzt, lässt es sich leicht in Darknet-Foren verkaufen. Man fragt sich fast, ob die fähigen Cyberkriminellen längst in stabilen, gut bezahlten Tech-Jobs sitzen und deshalb nur noch solche simplen Angriffe übrig bleiben.
Mein Aufschiebeverhalten ist eine Überlebensstrategie. Ich warte, bis andere Beta testen, deshalb habe ich früher in einer Firma 12 Jahre lang einfach Microsoft Office 2000 benutzt und dadurch zehn friedliche Jahre ohne Upgrade-Probleme oder Umschulungen gehabt. Außerdem habe ich mir angewöhnt, niemals auf Links in E-Mails zu klicken.
Für kleine Startups ist das schwierig, aber ein großer Player wie npm sollte meiner Meinung nach alle TLD-Varianten seiner Domain reservieren, also etwa „npm.io“, „npm.sh“, „npm.help“ usw. Dass sich der Angreifer die Domain „npm.help“ sichern konnte, hat diesen Angriff noch wirksamer gemacht.
no-reply-aws@amazon.comaufno-reply@tax-and-invoicing.us-east-1.amazonaws.comumstellt. Wenn man so eine Adresse zum ersten Mal sieht, wirkt sie fast wie eine Phishing-Mail, aber sie soll offiziell sein, also ist man verunsichert. Sogar die Vorankündigungs-Mail sieht phishy aus, sodass ich die angehängte PDF-Datei erst öffne, wenn ich sicher bin, dass die Rechnung echt ist. Unternehmen warnen ihre Kunden vor Phishing und sorgen dann selbst unnötig für Verwirrung.npmjs.helpversehentlich angeklickt.Was, wenn jemand extreme Gründlichkeit im Stil von Jia Tan mit unserer schlampigen Sicherheit kombiniert, also mit Editor-Plugins, Shell-Userland und ähnlichem? Entwickler-Tools laufen mit Superuser-Rechten, werden aber am wenigsten überprüft. Ich kann auch nicht elisp, neovim, vscode und jedes kleine Userland-Tool einzeln auditieren. Im besten Fall kommt es aus nixpkgs. Irgendwann reicht es, ein besseres VSCode-Plugin auf den Markt zu bringen und ein bis zwei Jahre zu warten. GG.
Wallets wie MetaMask waren zwar ein Ziel, aber ich habe gehört, dass MetaMask durch das Isolationsmodul LavaMoat gegen solche Angriffe recht gut geschützt ist. Ich würde wirklich gern eine detaillierte Analyse sehen, wie gut dieser Schutz in der Praxis tatsächlich ist. Ich habe persönlich nichts mit MetaMask zu tun, aber mich interessiert, wie wirksam solche Sicherheitsmaßnahmen sind, deren Einführung gegenüber realen Angriffen oft hinterherhinkt. Zur Einordnung noch dieser Beitrag.
Zu der Aussage „Die Wahrheit ist, dass man auf solche Phishing-Angriffe irgendwann zwangsläufig hereinfällt“ denke ich persönlich: wahrscheinlich nicht ich. Ich habe mir angewöhnt, in E-Mails, die ich nicht selbst ausgelöst habe, niemals Zugangsdaten über Links einzugeben, etwa bei Passwort-Resets. Ich halte das für eine Sicherheitsgrundregel, die 2025 wirklich jeder beherrschen sollte.
Anders als es in der Erklärung des Artikels klingt, wonach „die gesamte Malware lediglich Krypto-Wallet-Adressen ausgetauscht hat“, blieb MetaMask aus zwei Gründen unbeeinflusst:
Große Open-Package-Repositories brauchen deutlich stärkere Sicherheitslösungen, oder es muss wenigstens einen vertrauenswürdigen, geprüften Kernbestand an Paketen geben. Das gilt genauso für die Python- und Rust-Ökosysteme, die ebenfalls stark auf Vertrauen basieren.
Die Behauptung „Dagegen kann man nichts tun“ kommt immer ausgerechnet aus den Ökosystemen, in denen es am häufigsten zu Kompromittierungen kommt.