- Im NPM-Repository wurden mehr als 100 bösartige Pakete zum Diebstahl von Zugangsdaten hochgeladen, die seit August unentdeckt blieben und zusammen mehr als 86.000 Mal heruntergeladen wurden
- Das Sicherheitsunternehmen Koi berichtet, dass eine als „PhantomRaven“ bezeichnete Angriffskampagne die NPM-Funktion Remote Dynamic Dependencies (RDD) missbrauchte, um 126 bösartige Pakete zu verbreiten
- RDD ist eine Struktur, die es Paketen erlaubt, Abhängigkeitscode dynamisch von nicht vertrauenswürdigen Domains herunterzuladen, wodurch sie von statischen Analysewerkzeugen nicht erkannt wird
- Die Angreifer nutzten diese Funktion, um bösartigen Code über HTTP-Verbindungen herunterzuladen; in den Paketmetadaten wurde dennoch „0 Dependencies“ angezeigt, sodass Entwickler und Security-Scanner dies nicht bemerkten
- Diese strukturelle Schwachstelle macht die Grenzen des Sicherheitsmanagements im NPM-Ökosystem und die Risiken automatischer Installationsmechanismen deutlich
Ausbreitung bösartiger Pakete im NPM-Repository
- Angreifer luden seit August mehr als 100 Pakete zum Diebstahl von Zugangsdaten hoch, indem sie strukturelle Schwächen des NPM-Code-Repositorys ausnutzten
- Die meisten Pakete wurden verbreitet, ohne entdeckt zu werden; die kumulierte Zahl der Downloads lag bei mehr als 86.000
- Das Sicherheitsunternehmen Koi bezeichnete diesen Angriff als PhantomRaven-Kampagne und analysierte, dass eine bestimmte NPM-Funktion missbraucht wurde
- Laut Koi befanden sich von den 126 bösartigen Paketen zum Zeitpunkt der Artikelerstellung noch etwa 80 weiterhin auf NPM
Die verwundbare Struktur von Remote Dynamic Dependencies (RDD)
- RDD ist eine Funktion, die es Paketen erlaubt, Abhängigkeitscode dynamisch von externen Websites herunterzuladen
- Normalerweise werden Abhängigkeiten über die vertrauenswürdige Infrastruktur von NPM bezogen, doch RDD erlaubt Downloads auch über unverschlüsselte Verbindungen wie HTTP
- Die PhantomRaven-Angreifer konfigurierten dies so, dass Code von einer bösartigen URL heruntergeladen wurde, etwa
http://packages.storeartifact.com/npm/unused-imports
- Diese Abhängigkeiten sind für Entwickler und Security-Scanner unsichtbar und werden in den Paketinformationen als „0 Dependencies“ angezeigt
- Durch die automatische Installationsfunktion von NPM werden solche „unsichtbaren“ Abhängigkeitscodes automatisch ausgeführt
Grenzen bei der Erkennung durch Security-Tools
- Oren Yomtov von Koi sagte, PhantomRaven sei „ein Beispiel dafür, wie die blinden Flecken bestehender Sicherheitswerkzeuge raffiniert ausgenutzt werden“
- RDD wird von statischen Analysewerkzeugen nicht erkannt
- Dadurch konnten die Angreifer Sicherheitsprüfungen umgehen und bösartigen Code verbreiten
Zusätzliche Risikofaktoren
- Koi erklärt, dass über RDD geladene Abhängigkeiten bei jeder Installation erneut vom Server der Angreifer heruntergeladen werden
- Da es weder Caching noch Versionsverwaltung gibt, kann selbst bei demselben Paket je nach Installationszeitpunkt unterschiedlicher bösartiger Code eingeschleust werden
- Diese Struktur dynamischer Downloads erschwert die Integritätsprüfung von Paketen
Struktur und Hintergrund von NPM
- NPM ist ein Paketmanager für JavaScript, verwaltet von npm, Inc., einer GitHub-Tochter
- Er ist der Standard-Paketmanager für Node.js und besteht aus einem Kommandozeilen-Client und der npm registry
- In der Registry werden öffentliche sowie kostenpflichtige private Pakete gespeichert; sie können über die Website durchsucht werden
- Der Vorfall gilt als Beispiel dafür, dass die automatische Abhängigkeitsverwaltung von NPM für Angriffe missbraucht werden kann
Sonstige Erwähnungen
- Am Ende des Artikels wird die Ansicht erwähnt, dass unnötige Ausführung von JavaScript blockiert werden sollte
- Zugleich wird darauf hingewiesen, dass dieser Angriff sogar essenziellen JavaScript-Code missbrauchte
Noch keine Kommentare.