Sicherheitsforscher von Fenrisk haben Informationen über Schwachstellen in den Tools Pagure und OBS (Open Build Service) veröffentlicht, die es ermöglichten, die Infrastruktur für die Paketbildung der Distributionen Fedora und openSUSE zu kompromittieren. Die Forscher haben die Möglichkeit einer Angriffs durch die Ausführung willkürlichen Codes auf Servern mit Pagure und OBS demonstriert, was verwendet werden könnte, um Änderungen in Paketen in den Repositories von Fedora und openSUSE einzufügen.
In der Plattform Pagure, die in Fedora zur Zusammenarbeit an Code und Paketmetadaten verwendet wird, wurden 4 Schwachstellen festgestellt. Für die Ausnutzung der entdeckten Probleme ist ein Konto im Dienst Pagure erforderlich, das sich jeder wünschen kann (derzeit sind 24899 Benutzer bei Pagure.io registriert). Drei der Probleme erlauben das Lesen von Dateien im System, und eines davon ermöglicht die Ausführung von eigenem Code auf Server. Die Probleme wurden am 1. Januar 2024 entdeckt, am 25. April 2024 über bugzilla.redhat.com gemeldet und innerhalb von 3 Stunden in Pagure behoben.
- Die Schwachstellen CVE-2024-4981 und CVE-2024-47515 resultieren aus einer fehlerhaften Behandlung von symbolischen Links in den Funktionen zum Aktualisieren von Dateien und zum Erstellen von Archiven. Die Schwachstellen ermöglichen es, den Inhalt lokaler Dateien auf dem Server zu lesen, z. B. kann der Inhalt der Sitzungseinstellungen für den Administrator von Pagure eingesehen werden, wodurch Zugriff mit dessen Rechten erlangt wird. Die Ausnutzung der Schwachstelle in der Funktion _update_file_in_git() besteht darin, ein Repository in Pagure zu erstellen; einen Commit mit einer neuen Datei hinzuzufügen, die als symbolischer Link zu der gewollten Systemdatei erstellt wurde; und diese Datei zur Bearbeitung in der Web-Oberfläche zu öffnen.
- Die Schwachstelle (CVE-2024-4982) in der Funktion view_issue_raw_file() ermöglicht es, über die Angabe von Zeichen "\/.." in den Parametern der angeforderten Issue über den Basisordner hinauszusehen. Das Problem erlaubt es, Dateien im System zu lesen, soweit es die Zugriffsrechte des Prozesses zulassen, unter dem die Web-Oberfläche läuft. Zum Beispiel kann die Datei \/etc\/passwd eingesehen werden, indem die Seite "http:\/\/pagure.local:5000\/your-repository\/issue\/raw\/..\/..\/..\/..\/..\/..\/..\/etc\/passwd" geöffnet wird.
- Die Schwachstelle (CVE-2024-47516) in der Funktion PagureRepo.log() ermöglicht es, eigene Befehle einzuschleusen und Code auf dem Server auszuführen. Das Problem entsteht, weil beim Anzeigen der Änderungsverlaufs eines Files über die Web-Oberfläche der Befehl „git“ mit der Übergabe der Branch-ID in der Befehlszeile aufgerufen wird (z. B. „/usr/bin/git —pretty=oneline —abbrev-commit — README.md“). Die Richtigkeit der ID wird nicht überprüft, wodurch jede beliebige Befehlszeilenoption übergeben werden kann, wie beispielsweise „—output=/tmp/foo.bar“, um die Ausgabe in eine Datei umzuleiten. Ein Angreifer kann eine Anfrage wie folgt senden: http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar
Pagure läuft unter dem Benutzer git, daher können nur Dateien dieses Benutzers überschrieben werden. Um die Ausführung eigenen Codes auf dem Server zu ermöglichen, kann ein Dienst zum Zugriff auf das Repository über SSH genutzt werden, bei dem der Befehl „bash -c /usr/libexec/pagure/aclchecker.py“ ausgeführt wird. Ein Angreifer kann die Schwachstelle nutzen, um die Datei „/srv/git/.bashrc“ zu überschreiben, und diese Datei wird vom Bash-Interpreter ausgeführt, wenn auf das Repository per SSH zugegriffen wird.
Der Angriff besteht darin, sich im Pagure-System zu registrieren, ein Repository zu erstellen, eine README.md-Datei mit einem Commit-Kommentar in der Form „|| /bin/bash“ hinzuzufügen und die Anfrage „http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc“ zu senden. Im Verlauf dieser Schritte wird in die Datei „/srv/git/.bashrc“ eine Zeile in der Form „34а5с43 || /bin/bash“ geschrieben. Um die erstellte Datei „/srv/git/.bashrc“ auszuführen, reicht es aus, sich mit dem eigenen Benutzerkonto über SSH mit dem Repository zu verbinden. Die Ausführung des Codes mit den Rechten des Benutzers git auf dem Pagure-Server ermöglicht die Kontrolle über den gesamten Inhalt der Repositories mit Paketen.
In der Plattform OBS (Open Build Service), die in openSUSE und einigen anderen Distributionen zum Erstellen von Paketen verwendet wird, wurde eine Schwachstelle (CVE-2024-22033) entdeckt, die es ermöglicht, eigenen Code auf dem Server auszuführen. Die Schwachstelle wurde am 27. Juni 2024 entdeckt, am 29. Juni dem Projekt openSUSE gemeldet und am 10. Juli behoben.
Die Schwachstelle ist im Dienst „obs-service-download_url“ vorhanden, in dem eine angemessene Überprüfung der URL fehlte, die beim Starten des wget-Tools aus einem Skript verwendet wird, das den Quellcode in OBS herunterlädt. Ein Angreifer kann im OBS-Dienst die Konfiguration des zu erstellenden Pakets angeben, in der anstelle der URL für den Code-Download eine Kommandozeilenoption für wget angegeben wird, zum Beispiel: —output-document=\/tmp\/test tempfile
Um den Fehler beim Versuch, wget ohne URL zu starten, zu umgehen, wird die Option „download-manifest“ angegeben, die es ermöglicht, eine Liste von URLs in einer separaten Datei anzugeben. Das oben genannte Beispiel führt zur Ausführung des Befehls: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test
dies ermöglicht das Speichern des Inhalts, der per Link in der Datei \/srv\/obs\/service\/XXXXX\/src\/tempfile von dem Quellcode heruntergeladen wird, den der Angreifer über die Schnittstelle build.opensuse.org in OBS hochgeladen hat, die eine kostenlose Registrierung erlaubt. Neben dem Überschreiben der Datei auf dem Server kann der Angreifer auch jede beliebige Datei an sich selbst senden, indem er anstelle von „—output-document“ die Option „—post-file“ angibt, z.B. „—post-file=\/etc\/passwd“. So kann der Angreifer beliebige Dateien auf dem Server lesen und schreiben, je nachdem, welche Zugriffsrechte der OBS-Dienst hat.
Um die Möglichkeit des Schreibens in eine Datei in die Ausführung von Code auf dem Server umzuwandeln, haben die Forscher eine Methode vorgeschlagen, die aus zwei Phasen besteht. Zwei Phasen sind notwendig, da der Angreifer eine Datei „.wgetrc“ mit Einstellungen für wget erstellen kann, dies jedoch nicht ausreicht, um Befehle auszuführen. Über „.wgetrc“ können jedoch Bedingungen für die Ausführung eines beliebigen Programms im System geschaffen werden, ohne diesem Argumente zu übergeben. Zum Ausführen beliebigen Codes wird empfohlen, das Programm „prove“ zu starten, das die Konfigurationsdatei „.proverc“ verarbeitet und die Angabe der Option „—exec“ zum Ausführen beliebigen Codes erlaubt.
Im ersten Schritt wird durch die oben beschriebenen Manipulationen mit dem „download-manifest“ im Heimatverzeichnis des Benutzers „obsservicerun“ eine Datei „.proverc“ erstellt, die Befehle enthält, die beim Start des Prozesses „prove“ ausgeführt werden. Im zweiten Schritt wird eine Datei „.wgetrc“ mit dem Parameter „use-askpass=\/usr\/bin\/prove“ erstellt, was zu einem Aufruf von „prove“ führt. Nach dem Erscheinen dieser Dateien reicht es aus, Bedingungen für das Herunterladen beliebiger Daten mit wget zu schaffen, und dies führt zur Ausführung des Codes des Angreifers auf dem Server mit den Rechten des Benutzers „obsservicerun“. Die Rechte des Benutzers „obsservicerun“ sind ausreichend, um Schlüssel aus Repositories zu extrahieren, die von OBS-Benutzern zur Signierung von Paketen verwendet werden.
Zusatz: Das Team von SUSE Product Security ist der Ansicht, dass die Gefährlichkeit der Schwachstelle in OBS überbewertet ist und die Aussage der Forscher, dass das Problem es ermöglicht, alle Pakete im openSUSE-Distribution zu kompromittieren, nicht der Wahrheit entspricht. Es wird festgestellt, dass die Dienste in der Infrastruktur build.opensuse.org in isolierten Containern ausgeführt werden, die neu erstellt werden und keine kritischen Informationen enthalten. Die festgestellte Schwachstelle wird als gefährlich eingestuft, jedoch nicht ausreicht, um die Build-Infrastruktur von openSUSE und die erzeugten Pakete zu kompromittieren. Darüber hinaus wird darauf hingewiesen, dass die im Beispiel eines Angriffs beschriebenen Aktionen im OBS-Interface nur im Fall von OBS, das lokal auf der Arbeitsstation des Entwicklers installiert ist, durchgeführt werden konnten.
Quelle: opennet.ru
