Paketmanager npm feiert zehnjähriges Jubiläum

Der Paketmanager hat im vergangenen Jahrzehnt über eine Millionen Pakete verteilt, stolperte dabei aber auch immer wieder über Sicherheitsprobleme.

In Pocket speichern vorlesen Druckansicht 65 Kommentare lesen
Paketzustellung, Pakete, Online-Shopping
Lesezeit: 5 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Das npm-Team feiert das zehnjährige Jubiläum des Paketmanagers. Im Oktober 2009 begannen die Arbeiten an dem Tool, das allerdings erst im Januar 2010 das Licht der Öffentlichkeit erblickte. In einem kurzen Video stellen die Entwickler die wichtigsten Meilensteine sowie das Wachstum der gehosteten Pakete dar.

Der Paketmanager verwaltet zahlreiche JavaScript-Pakete und war ursprünglich auf das Zusammenspiel mit Node.js ausgelegt. Das in den Anfangszeiten verwendete Akronym Node Package Manager legte der Paketmanager später ab. Auf GitHub findet sich ein eigenes Repository zur Namensfindung. Dort sind einige Wörter aufgeführt, die das Team nicht mehr sehen möchte – darunter neben "No", "Non", "Not" auch "Node" – letzteres mit dem Vermerk "außer die Bezeichnung ist wirklich gut".

Technisch gesehen kombiniert npm ein Kommandozeilenwerkzeug mit einer online verfügbaren Datenbank, die sich auch über die Weboberfläche einsehen lässt. Der Großteil der Pakete stammt aus dem Open-Source-Bereich, für die das Unternehmen npm Inc. kostenfreie Lizenzen ausstellt. Zusätzlich bietet es mit npm Enterprise eine kommerzielle Variante für nicht öffentlich zugängliche Pakete und zusätzliche Securitychecks an.

Viele Pakete greifen ihrerseits auf andere npm-Inhalte zurück, und die Registry automatisiert die Verwaltung und das Bereitstellen von Abhängigkeiten. Ebendies ist aber eine der Schwachstellen – nicht nur, aber auch bei npm. Das zeigte sich deutlich im Frühjahr 2016, als ein Entwickler zahlreiche Pakete nach dem Streit um Eigentumsrechte aus npm entfernt hatte.

Eins der Pakete mit dem Titel left-pad hatte lediglich neun Codezeilen und füllte Strings auf der linken Seite bis zur gewünschten Breite um Leer- oder andere Zeichen auf. Viele Entwickler fanden die Hilfsfunktion sinnvoll und nutzten das Paket in ihren Anwendungen. Nach dem Zurückziehen des Pakets scheiterte der Build-Prozess zahlreicher Projekte, zu denen namhafte Anwendungen wie Babel und sogar Node.js gehörten.

Auch wenn der Schaden seinerzeit relativ gering war und npm schließlich die Richtlinien für das Zurückziehen änderte, um ähnliche Schäden zu verhindern, offenbart er eine grundsätzliche Schwachstelle für jegliche Art der Verwaltung von Abhängigkeiten: Wenn genutzte Pakete sich ändern oder verschwinden, können ganze Projekte ins Wanken geraten. Außerdem gilt: Sobald eine Sicherheitslücke in einem verwendeten Paket auftaucht – gezielt oder leichtfertig – ist die Anwendung angreifbar.

Ein weiteres Problem, mit dem npm immer wieder zu kämpfen hatte, ist das Typosquatting, bei dem Entwickler von Schadcode ihren Paketen Namen geben, die den Bezeichnungen beliebter Pakete ähneln. Dabei nutzen sie zum einen Tippfehler und zum anderen die Verwendung von Trennzeichen wie Unter- und Bindestrichen. Aus einem my-packet wird my-paket, mypacket oder my_packet. Irgendwer wird sich schon vertippen, so die durchaus berechtigte Annahme der Angreifer.

Besondere Aufmerksamkeit hatte im Sommer 2017 der Fall von hacktask erregt, der wie aus dem Lehrbuch unter anderem Pakete mit den Namen jquery.js statt jquery, babelcli statt babel-cli und ffmepg statt ffmpeg veröffentlicht hatte. Aufgefallen war schließlich der Schadcode in crossenv, das auf cross-env-Nutzer zielte. Insgesamt 40 Pakete von hacktask hat npm seinerzeit entfernt.

Inzwischen haben die Betreiber einige Maßnahmen gegen Typosquatting ergriffen. Kurz nach dem Zwischenfall hat es erweiterte Sicherheitsfunktionen wie Zwei-Faktor-Authentifizierung eingeführt. 2018 folgte die Übernahme des auf Application Security und Penetration-Tests spezialisierte Unternehmen ^Lift Security. Zudem sei angemerkt, dass Typosquatting ein Problem bei allen Paketmanagern ist, das Hacker kurz nach dem obigen Zwischenfall beim offiziellen Python-Repository PyPI ausgenutzt haben.

Die genannten Probleme sollen den Verdienst von npm nicht schmälern. Der Paketmanager hat das Leben zahlreicher Node.js-Entwickler deutlich vereinfacht. Bei allen Gegenmaßnahmen müssen Entwickler letztlich ihre Projekte im Blick behalten und schützen, und die automatisierte Verwaltung von Abhängigkeiten birgt unter dem Strich weniger Risiken als auf privaten Servern verwalteter, schlecht getesteter externer Code.

Zumal der Schutz vor nützlichen Paketen, die nur darauf warten, Schadcode auszuliefern noch schwieriger ist. Im Juni dieses Jahres hat npm einen solchen Angriff in dem electron-native-notify-Paket entdeckt, das zunächst harmlos daherkam und den Schadcode erst später enthielt.

Das Projekt, das Isaac Z. Schlueter 2009 als kleines Open-Source-Software gestartet hatte, verwaltet seit Juni 2019 mehr als eine Millionen Pakete.

npm wird weiter wachsen – und damit die Aufgaben zur sicheren Verwaltung und dem Vermeiden von zu vielen Altlasten. Jetzt aber geht erstmal ein herzlicher Glückwunsch zum Zehnjährigen an das npm-Team. (rme)