NPM: Sicherheitslücke erlaubte unauthorisierte Veröffentlichung neuer Versionen eines Pakets

Sicherheitsexperten haben im NPM, dem Paketregister des JavaScript-Ökosystems, zwei Sicherheitslücken festgestellt. Ohne Berechtigung, ermöglicht es eine offenbar davon, eine neue Version eines Pakets zu veröffentlichen.

Bereits am Dienstag verkündete GitHub in einem Blogpost, dass in NPM, dem Package-Registry für JavaScript zwei Schwachstellen entdeckt wurden. Bei der Übernahme NPMs durch GitHub im März 2020 verkündete der damalige CEO Nat Friedman, man wolle sich verstärkt der Sicherheit des NPM-Ökosystems widmen.

Schwachstelle mit unklaren Auswirkungen

Im Rahmen von GitHubs Bug-Bounty-Programm wurde eines der Sicherheitsprobleme entdeckt und könnte potenziell gravierende Auswirkungen haben. Ohne entsprechende Berechtigungen ermöglicht die Schwachstelle, potenziellen Nutzer neue Versionen eines beliebigen Packages von einem beliebigen Konto zu veröffentlichen. Laut des Blogposts wurde die Schwachstelle sechs Stunden nach Eingang der Meldung gepatcht. GitHub konnte im Zeitraum von September 2020 bis heute keine Anzeichen feststellen, dass die Schwachstelle ausgenutzt wurde und für die Zweit davor gibt es keine Telemetrie-Daten. Es ist durchaus möglich, dass die Sicherheitslücke vor September 2020 ausgenutzt wurde; NPM-Pakete also mit Schadcode versehen und neu veröffentlicht wurden – dennoch bietet GitHub für diesen denkbaren Fall keine Lösung an.

Die Schwachstelle sind auf inkonsistente Autorisierungsprüfungen sowie inkonsistente Datenvalidierungen über mehrere Microservices hinweg, zurückzuführen. Dabei gab es eine Abweichung, die dazu führte, dass eine Veröffentlichungsanfrage für eine neue Version eines NPM-Pakets autorisiert werden würde, aber potenziell für ein anderes nicht autorisiertes Paket ausgeführt wurde. Gepatcht und sichergestellt wurden die Schwachstellen, indem Autorisierung und Veröffentlichung jeweils für dasselbe Paket durchgeführt wurden.

Zweite Schwachstelle mittlerweile behoben

Offenbar wurde von GitHub die zweite Schwachstelle bei routinemäßigen Wartungsarbeiten an dem öffentlichen NPM-Replikat replicate.npmjs.com – einem der öffentlichen NPM-Packages des Unternehmens – verursacht. Dabei wurden Datensätze erstellt und im Changelog veröffentlicht, die die Namen privater NPM-Pakete preisgaben. Weitere Informationen über die Pakete waren offenbar nicht zugänglich. Laut Blogpost waren Namen privater Pakete im Format @owner/package, die vor dem 20. Oktober 2021 erstellt worden. Einsehbar waren sie zwischen dem 21. Oktober und dem 29. Oktober. In Zusammenhang mit der Replikationsdatenbank hat GitHub mittlerweile sichergestellt, dass keine Datensätze mit Namen privater Pakete erzeugt werden.

2FA und weitere Maßnahmen geplant

Der Blogpost verkündet für 2022 die schrittweise Einführung verpflichtender Zwei-Faktor-Authentifizierung für Maintainer populärer NPM-Pakete. Zudem hat GitHub in den vergangenen Monaten verstärkt in die Automatisierung von Monitoring und Analyse neu veröffentlichter NPM-Pakete investiert.