Python Wheel-Jacking bei Angriffen auf Lieferketten
Wie sich "Dependency Confusion" bei der Paketverwaltung missbrauchen lässt
Bösartigen Code auf Produktions- und Entwicklungssystemen ausführen
Von Shachar Menashe, VP Security, und Tamir Bahar, Binary Analysis Team Leader, Vdoo
Vor kurzem veröffentlichte Sicherheitsforscher Alex Birsan einen neuen Lieferketten-Angriff. Darin beschreibt er, wie sich "Dependency Confusion" (auch "Namesquatting" genannt) bei der Paketverwaltung missbrauchen lässt, um bösartigen Code auf Produktions- und Entwicklungssystemen auszuführen. Kurz gesagt, die meisten Paketverwaltungen wie pip (Python) und npm (Software) unterscheiden nicht zwischen internen Paketen (die auf internen-Unternehmensservern gehostet werden) und externen Paketen (die auf öffentlichen Servern gehostet werden). Dementsprechend reicht ein einfacher Befehl wie pip "install my-package", um sich ein Paket entweder von einem internen oder öffentlichen Server zu schnappen.
Wesentlich ist, dass sich dieses Problem von der bekannten Typosquatting-Attacke unterscheidet. Schließlich verlässt sich Alex Birsan bei seinem Angriff nicht darauf, dass das potenzielle Opfer einen Tippfehler macht (z.B. pip install my-package).
Alex Birsan hat sich bei seinem Research auf die folgenden Fakten konzentriert:
Jeder kann problemlos bösartigen Code auf diese öffentlichen Server hochladen. Der Packet Manager bevorzugt es möglicherweise, ein bestimmtes Paket vom öffentlichen, statt vom internen Server abzugreifen – falls ein solches verfügbar ist. Das passiert beispielsweise, wenn es sich um eine neuere Paketversion auf dem öffentlichen Server handelt.
Das hat zur Folge, dass ein Angreifer einen existierenden pip-Befehl missbrauchen kann, um böswilligen und beliebigen Code auszuführen. Dazu muss er einfach ein Paket mit einem widersprüchlichen Namen in ein öffentliches Paket-Repository hochladen.
Bei der Veröffentlichung der "bösartigen" Pakete im Python Package Index (PyPI), entschied sich Alex Birsan sie als Quellpakete zu veröffentlichen. Die erlauben es nämlich, Code sofort nach der Installation ohne Eingriff eines Benutzers auszuführen:
Hier ist das Paket offensichtlich gegen Netflix gerichtet. Es verwendet das interne Präfix "nflx" und eine sehr hohe Versionsnummer (6969.99.99), um jede echte (interne) Versionsnummer zu ersetzen.
Die Analyse beschäftigt sich im technischen Detail mit den folgenden Themen:
Dem Unterschied zwischen einer Quelldistribution und einer Built Distribution (in Bezug auf das Ausführen von bösartigem Code zu einem möglichst frühen Zeitpunkt)
Eine neue Methode, die demonstriert, wie man Python Wheels missbrauchen kann, um bösartigen Code auszuführen. Und das auch dann, wenn das installierte Paket nicht direkt aufgerufen wird.
Einer einfachen Lösung, die den Namesquatting-Angriff auf PyPI verhindert.
Empfehlungen wie man das Risikoprofil von ähnlichen Angriffen reduziert und Pakete auf bösartigen Code hin scannt.
(Vdoo: ra)
eingetragen: 21.02.21
Newsletterlauf: 29.03.21
Vdoo: Kontakt und Steckbrief
Der Informationsanbieter hat seinen Kontakt leider noch nicht freigeschaltet.