Supply Chain Security

StarJacking: Angreifer verschleiern bösartige Open-Source-Pakete

Bildquelle: checkmarx.com

Open-Source-Pakete sind ein zentraler Bestandteil moderner Software-Supply-Chains. Die Entscheidung, welches Paket Entwickler in ihrem Projekt verwenden, hängt maßgeblich von dessen Bewertung und Downloadzahlen ab – diese Form der Entscheidungsfindung birgt aber auch Risiken.

Anzeige

Im Beitrag erläutert Tzachi Zornstein, Head of CxDustico bei Checkmarx, wie Angreifer mithilfe von StarJacking die GitHub Sterne-Ratings von Open-Source-Paketen manipulieren, um Entwickler zum Download zu verleiten und Schadcode in die Software-Supply-Chain einzuschleusen.

Die GitHub Statistiken – insbesondere die GitHub Stars – eines Pakets, die Paketmanager häufig auf der Website des Pakets anzeigen, geben Auskunft über dessen Popularität und werden gemeinhin als Indikator für Qualität und Maintenance-Level angesehen. Wie sich herausstellt, durchlaufen diese Statistiken jedoch keinen Validierungsprozess und können leicht manipuliert werden. StarJacking – eine Technik, die ein Paket populärer erscheinen lässt, als es eigentlich ist – macht sich die fehlende Validierung zwischen dem Paket und seinem GitHub Repository zunutze, um Entwickler zu täuschen und Schadcode in die Fläche zu tragen. Erst vor Kurzem hat das Security Research Team von Checkmarx ein bösartiges Paket mit mehr als 70.000 Downloads beim Paketmanager PyPI (Python Package Index) entdeckt.

Use Cases

Um die potenzielle Reichweite dieser Angriffstechnik zu demonstrieren, haben sich unsere Researcher drei beliebte Bezugsquellen für Open-Source-Pakete angesehen: PyPI, npm und Yarn. Der Veröffentlichungsprozess eines Pakets auf PyPI und npm/Yarn ermöglicht es dem Herausgeber, ein GitHub Repository mit dem Paket zu verlinken. Dann ruft jeder Paketmanager die Repository-Statistiken ab und zeigt sie auf der Website des Pakets an. Das Problem ist, dass keine Validierung der Verlinkung zwischen Paket und Repository stattfindet. Bedeutet: Angreifer können jedes (beliebig populäre) Repository mit ihrem Paket verlinken und Entwickler mit gefälschten Statistiken in die Irre führen.

Anzeige

Bild: StarJacking auf Yarn, PyPI und npm

PyPI

Ein Paketmanager, bei dem Entwickler mit hoher Wahrscheinlichkeit gefälschten Statistiken zum Opfer fallen, ist PyPI. Sieht man sich die Page eines Pakets auf der PyPI-Website an, findet man den Hinweis auf dessen Popularität im Statistikbereich. Für Mitwirkende, die das PyPI-Paket mit einem GitHub Repository verlinkt haben, werden in diesem Abschnitt die Stars, Forks und offenen Issues/PRs des Repos aufgelistet. Irritierend ist, dass Pythons eigenes Tutorial „Packaging Python Projects“ dazu führt, dass ein Paket mit der URL eines beliebten Repositorys veröffentlicht wird. Das kann dem neu veröffentlichten Paket den Anschein eines gut etablierten und populären Pakets verleihen. Der offizielle Guide weist User an, ein setup.cfg- oder setup.py-File für ihr Paket auf Basis dieses Templates zu schreiben:

Bild: setup.py-Template aus dem PyPI Tutorial

Außerdem fordert das Tutorial User auf, das Namensfeld zu updaten und die übrigen Felder, einschließlich des URL-Feldes, unverändert zu lassen. Tun sie das und veröffentlichen das Paket im PyPI, erhalten sie ein öffentliches Python-Paket mit dieser Website:

Bild: Website eines mit der StarJacking-Technik neu veröffentlichten PyPI-Pakets

Angreifer, die Entwickler dazu bringen wollen, ihr Paket zu downloaden, müssen also nur ein GitHub Repository mit den gewünschten Statistiken auswählen und dessen URL in das URL-Feld ihres setup.py/setup.cfg-Files kopieren.

Newsletter
Newsletter Box

Mit Klick auf den Button "Jetzt Anmelden" stimme ich der Datenschutzerklärung zu.

npm

Die Situation bei npm ist etwas besser, aber das Kernproblem bleibt bestehen: Es findet keine Validierung der Verlinkung zwischen Paket und Repository oder im Hinblick auf Ownership statt. Die gute Nachricht ist, dass die Repository-URL explizit auf der Website angegeben wird und dass der Statistikbereich nicht den Repository Star Count, sondern nur die Issues und Pull Requests beinhaltet. Für die meisten npm-User sind ohnehin hauptsächlich die wöchentlichen Downloadzahlen interessant, wenn es darum geht, sich einen Eindruck von der Popularität eines Pakets zu verschaffen.

Yarn

Auf der Yarn-Website werden Pakete mit den gleichen Sterne-Statistiken angezeigt wie im PyPI, und auch hier findet keine Validierung der Verlinkung zwischen Paket und Repository oder im Hinblick auf Ownership statt.

Bild: Ein npm-Paket auf der Yarn-Website

Exploit in freier Wildbahn

Ein raffinierter Angreifer kann mit einer Kombination aus StarJacking und Typosquatting ein Paket erstellen, das so überzeugend ist, dass es sogar einen sorgfältigen Entwickler hinters Licht führt – obwohl der Code im Paket selbst rein gar nichts mit dem im GitHub Repository zu tun hat. Um auf PyPI zurückzukommen: Nehmen wir als Beispiel das relativ beliebte Pattern-Matching-Paket „pampy“ mit insgesamt mehr als 600.000 Downloads. Im Oktober letzten Jahres veröffentlichte der PyPI-User santalegend das bösartige Paket „pampyio“. Abgesehen vom Namen des Pakets und dem Installationsbefehl ist die Website dieses Pakets identisch mit dem ursprünglichen „pampy“-Paket:

„pampyio“ selbst scheint harmlos zu sein – eine seiner Dependencies, „redapty“, allerdings enthält das bösartige „aptyred/__init__.py“-File. Dieses simple Skript exfiltriert Umgebungsvariablen vom Rechner des Opfers. Der zusätzliche „Touch“ in diesem Fall: Dieser Akteur versucht, grundlegende Erkennungsmethoden zu umgehen, indem er die URL-Adresse invertiert.

Die beiden Pakete „pampyio“ und „redapty“ wurden vor allem Anfang März dieses Jahres mehr als 70.000 Mal heruntergeladen. Sie sind leicht zu verwechseln – und ist einem dieser Fehler erst einmal unterlaufen, gibt es kaum noch Safeguards, die vor der Installation des kompromittierten Pakets schützen.

Lösungsansatz

Ein Version Control System (VCS) Repository, üblicherweise Git, als Teil der Metadaten eines Pakets zu referenzieren, ist eine weitverbreitete Praxis, da Entwickler von Open Source ihren Code auf VCS-Plattformen wie GitHub pflegen. 66,85 Prozent aller Pakete auf PyPI und 61,41 Prozent auf npm sind mit einem gültigen Git Repository verlinkt. Der sowohl auf PyPI als auch npm überwiegend genutzte Git-Service ist mit über 96 Prozent GitHub. Eine Möglichkeit, potenzielle StarJacking-Angriffe zu erkennen, besteht darin, nach widersprüchlichen oder nicht eindeutigen Git-Referenzen zu suchen, sprich nach mehreren Paketen, die sich dieselbe Referenz auf ein Git Repository teilen. Von allen Paketen weisen auf PyPI 3,03 Prozent und auf npm 7,23 Prozent eine nicht eindeutige Git-Referenz auf – und sind damit Kandidaten für Pakete, die Popularitätsstatistiken „jacken“.

Fazit

StarJacking ist für Hacker eine weitere Möglichkeit, die Erfolgschancen eines Angriffs zu erhöhen und so viele Ziele wie möglich zu infizieren. Diese Technik zielt darauf ab, die Glaubwürdigkeit eines Pakets zu erhöhen, indem man es populär erscheinen lässt und hervorhebt, wie viele andere Entwickler es verwenden. Unter dem Deckmantel dieser Glaubwürdigkeit können Angreifer dann versuchen, Schadcode einzuschleusen. Für Unternehmen sind die Risiken bei der Verwendung bösartiger Pakete als Dependency in ihrem Code enorm: Im besten Fall infizieren sie hoch privilegierte Entwickleraccounts im eigenen Netzwerk – mit etwas weniger Glück rollen sie kompromittierte Software-Releases an ihre Kunden aus.

Tzachi

Zornstein

Head of CxDustico

Checkmarx

Tzachi Zornstein ist Head of CxDustico bei Checkmarx und ein Cyber-Experte mit mehr als einem Jahrzehnt Erfahrung im Bereich Cyber-Sicherheit, der sich auf den Aufbau fortschrittlicher Malware-Forschungssysteme spezialisiert hat. Vor Checkmarx war er Mitbegründer und CEO von Dustico, Senior Cyber ​​Threat Analyst bei Symantec, Senior Security Architect bei McAfee
Anzeige

Artikel zu diesem Thema

Weitere Artikel

Newsletter
Newsletter Box

Mit Klick auf den Button "Jetzt Anmelden" stimme ich der Datenschutzerklärung zu.