Hört auf, NodeJS und NPM zu nutzen!

      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-Repo. Wahrscheinlich kriegt 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, 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 bzw. Microsoft, also die Eigentümer von NPM, die Augen zuzumachen, statt stärker gegen Malware vorzugehen.

Aber ich muss NodeJS 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 NodeJS bitte nur noch und ausschließlich in einer sicheren Umgebung wie irgendwas 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 irgendwo hin - außerhalb deiner Kontrolle.

Mich stört ein bisschen, 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 braucht und vor der ersten Nutzung erstmal 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-Paketen liegen hat, weiß auch, wie oft ein Pull-Request vom dependabot reinkommen, die einen darauf hinweisen, wieviele Sicherheitslücken man gerade wieder rumliegen hat.

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

Update: 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.

2. Update: 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. Sowas kann man als Entwickler auch sehr schnell verlieren. Und wenn ein Paket unzählige Abhängigkeiten hat, geht erstmal 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.

3. Update: 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.

There is no comment section here. Do you have something to comment? Then blog yourself. Or write about it with your comment on a social network of your choice.