In der modernen Softwareentwicklung sind Open-Source-Pakete und deren Ökosysteme unverzichtbar geworden. Entwickler greifen täglich auf unzählige Bibliotheken und Konfigurationspakete zurück, um Projekte effizienter, modularer und wartbarer zu gestalten. Allerdings bringt die Abhängigkeit von fremden Modulen auch erhebliche Sicherheitsrisiken mit sich. Eine kürzlich aufgedeckte Bedrohung durch eine heimliche Malware in einer Transitiven Abhängigkeit des beliebten npm-Pakets eslint-config-airbnb-compat verdeutlicht die Gefahr, die von scheinbar vertrauenswürdigen Paketen ausgeht. Diese Erkenntnis ruft zu mehr Aufmerksamkeit bei der Verwendung von Paketen, besonders deren Unterabhängigkeiten, auf und eröffnet einen dringenden Diskurs über Sicherheit in der Softwareentwicklung.
Die Entdeckung dieser Malware wurde ursprünglich über das Open-Source-Projekt airbnb/javascript gemeldet und von der Sicherheitsplattform Vet analysiert. Dabei fiel auf, dass das Paket eslint-config-airbnb-compat die Herkunft von Github-Repositorys von Airbnb zu imitieren versucht. Dieses Vorgehen, oft als „Starjacking“ oder Spoofing bezeichnet, kann automatisierte Sicherheitswerkzeuge täuschen und das Vertrauen von Entwicklern in scheinbar legitime Pakete ausnutzen. Gerade bei der Nutzung von bekannten Namen und etablierten Repositories entsteht so ein gewichtiges Missbrauchspotential. Das Paket eslint-config-airbnb-compat enthält eine sogenannte postinstall-Script-Anweisung, die beim Installationsprozess automatisch ein Script namens setup.
js ausführt. Merkwürdig ist, dass dieses Setup-Script auf den ersten Blick keinerlei bösartigen Code enthält. Stattdessen führt es eine scheinbar harmlose Operation aus: Es kopiert eine Datei .env.example in eine neue .
env-Datei und setzt Umgebungsvariablen. Insbesondere wird hierbei eine URL zu einem verdächtigen Proxy-Server mit dem Domainnamen https://proxy.eslint-proxy.site eingetragen. Ebenfalls wird geprüft, ob ein node_modules-Ordner existiert und gegebenenfalls automatisch ein npm install ausgeführt.
Der clever getarnte Charakter des Pakets zeigt sich darin, dass es selbst keinen direkt schädlichen Code beinhaltet. Die wahre Gefahr steckt in einer transitiven Abhängigkeit, welche durch eslint-config-airbnb-compat eingebunden wird: das npm-Paket ts-runtime-compat-check. Dieses wiederum nutzt ein eigenes postinstall-Script namens lib/install.js, das die zuvor gesetzten Umgebungsvariablen APP_PATH und APP_PROXY ausliest und bei der Installation eine Anfrage an den externen Proxy-Server schickt. Die Funktion dieses Requests ist besonders gefährlich.
Dabei wird vom Proxy-Server erwartet, eine JSON-Antwort zurückzugeben. Kritisch ist, dass der Server nicht nur eine simple Bestätigung senden kann, sondern eine Fehlermeldung im Format {"error": "<JS Payload>"} liefert. Diese Fehlermeldung wird von dem install.js-Script abgefangen und an eine Fehlerbehandlungsroutine weitergegeben, die die Fehlermeldung als Base64-codierten String decodiert, daraus dynamisch eine JavaScript-Funktion generiert und diese unmittelbar auf dem Zielsystem ausführt. Mit anderen Worten: Der Angreifer hinter dem Proxy-Server kann beliebigen JavaScript-Code in Form eines Base64-codierten Payloads senden, der direkt auf dem System des Entwicklers ausgeführt wird.
Diese Methode eröffnet unzählige Angriffsmöglichkeiten – vom Stehlen sensibler Daten über die Manipulation von Quellcode bis hin zur Eröffnung von Hintertüren für weiterführende Malware. Da die Ausführung vom indirekt eingebunden Paket ts-runtime-compat-check bei der Installation stattfindet, läuft diese schädliche Aktion fast unbemerkt im Hintergrund ab. Für Entwickler und Unternehmen bedeutet das, dass ihre Build- und CI/CD-Prozesse, die auf solchen abhängigen Paketen beruhen, durch diese als vertrauenswürdig eingestuften Komponenten kompromittiert werden können. Noch gefährlicher ist, dass die Malware durch die Nachahmung des Ursprungsrepositoriums und das Verwenden von legitimen Paketnamen die üblichen Sicherheitsprüfungen wie automatische Scans und Signaturen umgehen kann. Dadurch wird ein falsches Sicherheitsgefühl erzeugt, das zur unkontrollierten Verbreitung des Schadcodes führen kann.
Dieser neu entdeckte Vorfall ist ein deutliches Warnsignal für die Entwickler-Community, das den sorgfältigen Umgang mit Open-Source-Abhängigkeiten fordert. Es reicht längst nicht mehr aus, nur auf die direkten Abhängigkeiten zu achten; auch transitive bzw. indirekte abhängige Pakete müssen auf ihre Herkunft, Aktualität und den enthaltenen Code geprüft werden. Insbesondere sollten postinstall-Scripts und zusätzliche Installationsschritte genau unter die Lupe genommen werden, da sie oft unbemerkt Code zur Laufzeit ausführen können. Ein weiterer wichtiger Aspekt ist die Notwendigkeit von vertrauenswürdigen Paketquellen und Security-Tools, die diese Angriffsvektoren erkennen können.
Entwickler sollten Sicherheitslayer wie Signaturen, Hash-Prüfungen und integrierte Sandbox-Technologien in Build-Prozesse einbinden. Automatisierte Tools können durch erweiterte Verhaltensanalyse und Heuristiken verdächtiges Laufzeitverhalten identifizieren und Warnungen ausgeben. Die Nutzung von Software Composition Analysis (SCA) Tools hilft, die Abhängigkeitsstruktur vollständig zu erfassen und verdächtige Pakete frühzeitig zu entdecken. Darüber hinaus sollten Communities und Paketbetreiber ein hohes Maß an Vigilanz zeigen. Das Aufspüren und öffentliche Bekanntmachen von Sicherheitslücken oder verdächtigen Verhaltensweisen kann die Verbreitung von Malware eindämmen und Ersatzlösungen schneller etablieren.
Die Zusammenarbeit zwischen Projektteams und Sicherheitsforschern ist entscheidend, um Schwachstellen nicht nur zu identifizieren, sondern auch zu schließen und Nutzer zu schützen. Abschließend verdeutlicht der Fall der Malware in eslint-config-airbnb-compat und dessen transitiver Abhängigkeit ts-runtime-compat-check, dass die moderne Softwareentwicklung nicht nur von Funktionalität und Usability, sondern auch zunehmend von der Sicherheit abhängig ist. Nur durch ein ganzheitliches Verständnis der Abhängigkeitsketten, umfassende Sicherheitsprüfungen und ein Bewusstsein für potenzielle Angriffe können Entwickler und Unternehmen robuste und sichere Software bereitstellen. Die Konsequenzen, die sich aus unbedachter Nutzung solcher Pakete ergeben, können erheblich sein – von Datenverlust über Vertrauensschäden bis hin zu ernsthaften finanziellen Folgen. Es ist daher ratsam, stets mit höchster Sorgfalt zu handeln, Sicherheitsupdates schnell einzuspielen und besonders bei kritischen Projektabhängigkeiten auf seriöse Quellen zu setzen.
Die Sicherheit der Softwarelandschaft ist eine gemeinsame Aufgabe, die kontinuierliche Aufmerksamkeit und Zusammenarbeit erfordert.