
In diesem Dokument wird die Pipenv-Schwachstelle (CVE-2022-21668) im Detail besprochen. Die folgenden Abschnitte behandeln den fehlerhaften Code in der Datei pipenv/utils.py, der die Tür für verschiedene RCE-Angriffe öffnet, sowie die kürzlich erfolgte Korrektur, die die SSL/TLS-Verbindung validiert und den Hostnamen anhand einer Liste vertrauenswürdiger Hosts überprüft.
Pipenv Pipenv ist ein Tool, das automatisch eine virtualenv für Ihre Projekte erstellt und verwaltet und Pakete zu Ihrer Pipfile hinzufügt bzw. daraus entfernt, wenn Sie Pakete installieren oder deinstallieren.
Für weitere Informationen klicken Sie hier
Wir benötigen eine requirements.txt-Datei, wenn wir mit komplexen Systemen zu tun haben. Diese Textdatei ist auch praktisch, wenn wir die Anwendung in eine andere Umgebung portieren möchten. Diese Datei enthält alle Pakete/Abhängigkeiten, die zum erfolgreichen Ausführen einer Anwendung erforderlich sind, zusammen mit ihren Versionsnummern.
Beispiel requirements.txt-Datei:
Bildquelle: https://www.idkrtm.com/what-is-the-python-requirements-txt/
Wenn wir keine requirements.txt-Datei haben, ist es möglicherweise nicht möglich, unsere Anwendung erfolgreich auf ein anderes System zu portieren, da es Kompatibilitätsprobleme zwischen den Paketversionen geben könnte.
Ab Pipenv-Version 2018.10.9 und vor Version 2022.1.8 ermöglicht ein Fehler beim Parsen von requirements-Dateien durch Pipenv einem Angreifer, eine speziell konstruierte Zeichenfolge in einen Kommentar an beliebiger Stelle in einer requirements.txt-Datei einzufügen. Dadurch werden Opfer, die pipenv zum Installieren der requirements-Datei verwenden, dazu veranlasst, Abhängigkeiten von einem vom Angreifer kontrollierten Paketindex-Server herunterzuladen. Ein RCE-Angriff ist gegen solche hochgradig verwundbaren Systeme sehr gut durchführbar.
cvedetails bewertet diese Schwachstelle als kritisch / schwerwiegend.
CVSS-Wert von cvedetials:
(Quelle: https://www.cvedetails.com/cve/CVE-2022-21668/)

Diese Funktion wird iterativ für jede Zeile einer requirements-Datei aufgerufen und verwendet das argparse-Modul, um die Optionen --index-url, --extra-index-url und --trusted-host zu finden und zu verarbeiten. Sie ignoriert diese Optionen jedoch nicht, wenn sie in Kommentaren erscheinen. Das Problem mit dem Code ist, dass er die Zeichenfolgen, die mit "--index-url, --extra-index-url, and --trusted-host" beginnen, an beliebiger Stelle in der Datei parst. Diese Funktionalität macht ihn anfälliger.
Für weitere Informationen klicken Sie hier
Angriffe durch Remote-Codeausführung (Remote Code Execution, RCE) ermöglichen es einem Angreifer, schädlichen Code aus der Ferne auf einem Computer auszuführen. Die Auswirkungen einer RCE-Schwachstelle können von der Ausführung von Malware bis hin zur vollständigen Kontrolle eines kompromittierten Systems durch den Angreifer reichen.
Wenn ein Angreifer eine bösartige --index-url Option in einer requirements-Datei verstecken kann, die ein Opfer mit pipenv installiert, kann der Angreifer beliebigen schädlichen Code in Paketen einbetten, die von seinem bösartigen Index-Server bereitgestellt werden. Dieser Code wird während der Installation auf dem Host des Opfers ausgeführt (Remote Code Execution/RCE). Die Ausnutzung dieser Technik wäre für einen Angreifer mit grundlegenden Python-Kenntnissen relativ einfach zu bewerkstelligen, da der Angreifer einfach eine Source-Distribution für eines der in der requirements-Datei angegebenen Pakete erstellen und beliebigen schädlichen Code in der Datei setup.py einbetten kann. Wenn pip aus einer Source-Distribution installiert, wird jeder Code in setup.py während des Installationsprozesses ausgeführt.
Für weitere Details klicken Sie hier
In Version 2022.1.8 und höher ist dieses Problem behoben. Eine neue Funktion „get_host_and_port(url)“ wurde in der Datei pipenv/utils.py hinzugefügt. Diese Funktion ruft den Host und den Port der in der requirements.txt-Datei angegebenen URL ab. Die abgerufene Host-Adresse wird mithilfe von urllib3 geparst, das intern die SSL/TLS-Verbindung validiert. Die Host-Adresse wird außerdem gegen eine Liste vertrauenswürdiger Host-Adressen geprüft.

Weitere Informationen hier
Einfache Angriffe könnten die anfängliche RCE nutzen, die ausgelöst wird, wenn ein Opfer das bösartige Paket des Angreifers installiert, um Anmeldeinformationen vom Host des Opfers zu stehlen, die Ressourcen des Hosts zum Schürfen von Kryptowährung zu missbrauchen oder Exploit-Kits oder andere Malware zu installieren. Raffiniertere Angreifer könnten fortschrittlichere Techniken verwenden, um den Zugriff auf den Host des Opfers aufrechtzuerhalten, Beweise ihres Angriffs zu verbergen oder zu entfernen, indem sie Verweise auf den bösartigen Index-Server in der von pipenv erzeugten Pipfile und Pipfile.lock oder andere potenzielle Indikatoren einer Kompromittierung löschen. Äußerst versierte Angreifer könnten versuchen, vom ursprünglich kompromittierten Host aus auf weitere Ziele auszuweichen (Pivoting), und könnten dabei offengelegte Anmeldeinformationen in der Umgebung des kompromittierten Hosts oder die dem Host gewährte implizite Autorisierung ausnutzen, um privilegierten Zugriff auf andere Systeme oder Ressourcen wie Quellcode-Repositories oder Paketregister zu erlangen. (Quelle: https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
Ein Parsing-Fehler, der das Parsen der Kommentare nicht richtig berücksichtigt, hat eine kritische Schwachstelle geschaffen.
Listeneintrag Mit einer solchen Schwachstelle in der Hand ist sogar das Einrichten eines bösartigen Index-Servers, der kompromittierte Paketversionen ausliefert, relativ einfach, selbst für einen nicht versierten Angreifer.