Hört auf, NodeJS und NPM zu nutzen!

20.03.2022 12:57
ca. 4 Minuten Lesezeit
Read in English

Es ist einfach nicht mehr lustig!

Letzte Woche hat das Paket Node-IPC eine Dependency bekommen, die einfach mal nach Erkennung einer russischen IP des Nutzers Dateien von der Festplatte löscht und eine Datei auf dem Desktop anlegt, um gegen den Krieg zu demonstrieren.

Der Entwickler hat wohl nach „einigen“ Beschwerden, wohl auch von NGOs, ein paar Pizzen und Besuch von der örtlichen Polizei bekommen. Natürlich hat er nicht in einem Commit die Abhängigkeiten entfernt, sondern einfach ein Force-Push auf den Master auf einen alten Git-Stand gemacht. Nicht, dass in 2 Jahren noch jemand weiß, was für einen Scheiß er gebaut hat.
Die Härte ist aber: Die Version 11 ist noch im NPM-Repository. Wahrscheinlich bekommt er das da nicht raus. Man hat also eine Malware in NPM, aber keinen Code mehr dazu. Freude!

Aber warte, das ist noch nicht alles!

Jetzt kommt ein GitHub-User namens qpwo um die Ecke und baut einfach mal eine andere Malware für Node.js, die „mal eben“ alle SSH-Keys des Users veröffentlicht. Warum? Um zu zeigen, was für ein Müll NPM ist und wie „toll“ es ist, dass die Funktion um Schadsoftware zu melden einfach wirkungslos bleibt. Sie ist zwar da, aber seit Tagen passiert einfach nichts. Wahrscheinlich kamen da zu viele Tickets zum Thema rein und es war einfacher für Github und Microsoft, also die Eigentümer von NPM, die Augen zuzumachen, statt stärker gegen Malware vorzugehen.

Aber ich muss Node.js nutzen!
Na, ich hoffe doch, da steht niemand neben dir, der dich dazu zwingt. Aber wenn das Kind jetzt in den Brunnen gefallen ist, lass Node.js bitte nur noch und ausschließlich in einer sicheren Umgebung wie etwas Container-mäßigem laufen. Darin solltest du aber natürlich keine Secrets haben, denn die nächste Malware kommt um die Ecke und schiebt nicht nur SSH-Private-Keys, sondern auch alle ENV-Variablen dazu „irgendwohin“ – außerhalb deiner Kontrolle.

Mich stört ein wenig, dass wir inzwischen in Dependency-Höllen angekommen sind. Es ist ja nicht nur NPM, sondern jede moderne Sprache, die Abhängigkeiten von Abhängigkeiten von Abhängigkeiten benötigt und vor der ersten Nutzung erst mal das halbe Internet runterlädt. Erst neulich baute eine Kollegin für ein reines HTML/CSS-Projekt zwei Linter ein: ESLint und Stylelint (+ Stylelint Config Standard). Die Dinger haben 462 Abhängigkeiten installiert. 462! Es ist so kaputt!

Im Reality-Check gibt es ja für normale Entwickler keine Möglichkeit mehr, irgendwem zu vertrauen. Welche Firma, außer der wirklich großen, nimmt sich denn die Zeit, die Abhängigkeiten denn wirklich zu reviewen oder zumindest zu überfliegen?
Und jeder der bei GitHub Repositories mit Node.js Paketen liegen hat, weiß auch, wie oft ein Pull Requests vom Dependabot gestellt werden, die einen darauf hinweisen, wie viele Sicherheitslücken man gerade wieder herumliegen hat.

Das Ökosystem ist so kaputt, aber mich wundert nicht mehr, dass Fefe sich nur noch über das Argument tot lacht: „Softwarefehler, kann man nichts machen!“

Update 1 vom 20.03.22 13:00: In der Readme des absichtlichen Malware-Packages wird zusätzlich davon abgeraten, Docker zu verwenden, da es zu viele Break-out-Schwachstellen gibt, sodass jemand, der dir wirklich Schaden zufügen möchte, das auch schafft.

Update 2 vom 20.03.22 15:07: Markus fragte auf Twitter, was man denn jetzt tun könne. Gute Frage. Wie schon geschrieben, müsstet ihr jetzt theoretisch anfangen, alle Abhängigkeiten zu reviewen. Oder selbst bauen, mit den passenden Folgen – also keine Pflege, Sicherheitslücken usw. Könnt ihr nicht? Tja, das ist jetzt doof.
Am Ende ist die Antwort wie bei euren Hosting-Providern: Vertrauen. Also nicht unbedingt blindes Vertrauen. So etwas kann man als Entwickler auch zügig verlieren. Und wenn ein Paket unzählige Abhängigkeiten hat, geht zunächst davon aus, dass die Entwickler der Library oder des Frameworks keine Ahnung hatten, was sie da tun. Dieser Beitrag dient am Ende nur dazu, die Aufmerksamkeit zu erhöhen für die Probleme, an die man selbst vorher nicht gedacht hat.

Update 3 vom 20.03.22 17:00: Ursprünglich hatte ich geschrieben, dass die Malware-melden-Funktion auf NPM entfernt wurde, allerdings reagiert GitHub/NPM einfach mehrere Tage nicht, wenn man Malware über die Funktion meldet.


Hier gibt es keinen Kommentarbereich. Hast du etwas zu kommentieren? Dann blogge einfach selbst. Oder schreib darüber mit deinem Kommentar in einem sozialen Netzwerk deiner Wahl.