Hallo zusammen, im heutigen Artikel werden wir einen Fall besprechen, der in den letzten Tagen viel diskutiert wurde, und zwar die Schwachstelle CVE-2024-3094 oder wie sie allgemein als „Hintertür in XZ“ bezeichnet wird.
XZ Utils ist ein Open-Source-Datenkomprimierungstool, das in fast allen Linux-Distributionen vorhanden ist und zum Komprimieren großer Dateiformate in kleinere, besser verwaltbare Größen für die gemeinsame Nutzung verwendet wird. Da es sich um Open-Source-Software handelt, wird sie von Entwicklern großzügig gepflegt und aktualisiert.
Diese Updates werden dem Projekt durch sogenannte „Pull Requests“ hinzugefügt und vor ihrer Zulassung von anderen Teammitgliedern überprüft, die zuvor dazu beigetragen haben, um Fehler im vorgeschlagenen Quellcode zu vermeiden.
In diesem Fall gelang es einem Github-Benutzer namens Jia Tan, der zum XZ-Projekt beigetragen hat, Berechtigungen zum Überprüfen und Akzeptieren von Codeänderungen zu erhalten, wodurch er das Vertrauen des restlichen Teams gewann und seine eigenen Beiträge akzeptieren konnte, ohne dass diese überprüft wurden von anderen Mitgliedern.
Mit diesem Vertrauen, das die Teammitglieder seiner Arbeit entgegenbrachten, baute Jia bösartigen Code in das xz-utils-Projekt ein, mit der Absicht, die Authentifizierung des SSH-Dienstes zu stören und Remote-Codeausführung oder RCE zu ermöglichen.
Erklärung der Sicherheitslücke
Alles begann damit, dass Andrés Freund, Softwareentwickler bei Microsoft, ungewöhnliches Verhalten beim sshd-Dienst feststellte, der viel CPU verbrauchte.
Innerhalb des XZ-Build-Prozesses wird das Skript „Build-to-Host.m4“ ausgeführt. Dieses Skript enthält die folgende Codezeile:
gl_[$1]config='sed "r\n" $gl_am_configmake | eval $gl_path_map | $gl[$1]_prefix -d 2>/dev/null'
Dadurch wird am Ende des Konfigurationsskripts ein verschleiertes Skript eingefügt. Dieses Konfigurationsskript ist für die Erstellung der MakeFiles für xz-utils und liblzma verantwortlich.
Das Hauptziel des Skripts besteht darin, das liblzma MakeFile zur Laufzeit zu ändern, sodass RSA_public_decrypt@....pl auf den Schadcode der Hintertür verweist.
Während des SSL-Authentifizierungsprozesses wird die Funktion RSA_public_decrypt@....pl aufgerufen, wodurch der Schadcode des Angreifers ausgeführt wird, auf den sie abzielt. Dieser Code ist dafür verantwortlich, die Nutzlast des öffentlichen Schlüssels zu extrahieren, der während des Authentifizierungsprozesses übergeben wird und einer Reihe von Überprüfungsschritten und Signaturkontrollen unterzogen wird. Wenn es diese Prüfungen erfolgreich besteht, wird es an die Funktion libc system() übergeben, die für die Ausführung der Nutzlast und die Durchführung der Remote Code Execution (RCE) verantwortlich ist.
Der verschleierte Code, der im Konfigurationsskript ausgeführt wird, löst nur unter bestimmten Bedingungen eine Hintertür aus:
1. Das Zielbetriebssystem muss Linux x86-64 sein.
2. Der XZ-Build-Prozess muss Teil des Builds eines Debian- oder RPM-Pakets sein.
3. Die aufgerufene Binärdatei muss sich im Pfad /usr/sbin/sshd befinden
4. Die Umgebungsvariable TERM sollte nicht festgelegt werden
5. Auch die Variablen LD_DEBUG und LD_PROFILE sollten nicht vorhanden sein
6. Die Umgebungsvariable LANG muss standardmäßig von sshd festgelegt werden.
Betroffene Distributionen
- Fedora 41 und Fedora Rawhide
- Kali Linux wurde zwischen dem 26. und 29. März aktualisiert
- Alpine 5.6.0, 5.6.0-r0, 5.6.0-r1, 5.6.1, 5.6.1-r0 und 5.6.1-r1
- Arch, auf dem die xz-utils-Versionen 5.6.0 und 5.6.1 installiert sind
Um außerdem festzustellen, ob eine anfällige Version der xz-utils-Software installiert wurde, können Sie das vom JFrog-Team erstellte Skript verwenden, das unter dem folgenden Link zu finden ist.
Dieser Prüfer ist recht einfach, er führt die sechs Prüfungen durch, die zu den zuvor erwähnten notwendigen Bedingungen gehören, um diese Schwachstelle ausnutzen zu können. Wir zeigen Ihnen ein Anwendungsbeispiel:
Vielen Dank und bis zur nächsten Folge!