Kritična ranljivost v Eximu, ki omogoča izvajanje kode na strežniku s korenskimi pravicami

V poštnem strežniku Exim ugotovljeno критичная ranljivost (CVE-2019-10149), kar lahko vodi do oddaljenega izvajanja kode na strežniku s korenskimi pravicami pri obdelavi posebej oblikovane zahteve. Možnost izkoriščanja problema je bila opažena v različicah od 4.87 do vključno 4.91 ali pri gradnji z možnostjo EXPERIMENTAL_EVENT.

V privzeti konfiguraciji lahko napad brez nepotrebnih zapletov izvede lokalni uporabnik, saj je uporabljen ACL "verify = recipient", ki dodatno preverja zunanje naslove. Do oddaljenega napada lahko pride, ko se spremenijo nastavitve, na primer delovanje kot sekundarni MX za drugo domeno, odstranitev ACL »verify=recipient« ali določene spremembe lokalne_part_pripone). Napad na daljavo je možen tudi, če lahko napadalec ohrani povezavo s strežnikom odprto 7 dni (na primer pošilja en bajt na minuto, da zaobide časovno omejitev). Hkrati je možno, da obstajajo enostavnejši vektorji napadov za oddaljeno izkoriščanje problema.

Ranljivost je posledica nepravilnega preverjanja naslova prejemnika v funkciji deliver_message(), definirani v datoteki /src/deliver.c. Z manipulacijo oblikovanja naslova lahko napadalec doseže zamenjavo svojih podatkov v argumentih ukaza, ki se kliče prek funkcije execv() s korenskimi pravicami. Delovanje ne zahteva uporabe zapletenih tehnik, ki se uporabljajo za prelivanje medpomnilnika ali poškodbo pomnilnika; zadostuje preprosta zamenjava znakov.

Težava je povezana z uporabo konstrukta za pretvorbo naslovov:

dostavi_lokalnidel = razširi_niz(
string_sprintf("${local_part:%s}", nov->naslov));
dostavi_domena = razširi_niz(
string_sprintf("${domain:%s}", nov->naslov));

Funkcija expand_string() je preveč zapleten združevalec, vključno s prepoznavanjem ukaza “${run{command arguments}”, ki vodi do zagona zunanjega upravljalnika. Tako mora lokalni uporabnik za napad znotraj seje SMTP le poslati ukaz, kot je 'RCPT TO “username+${run{...}}@localhost”', kjer je localhost eden od gostiteljev s seznama local_domains, in uporabniško ime je ime obstoječega lokalnega uporabnika.

Če strežnik deluje kot poštni rele, je dovolj, da na daljavo pošljete ukaz 'RCPT TO "${run{...}}@relaydomain.com"', kjer je relaydomain.com eden od gostiteljev, navedenih v relay_to_domains razdelek z nastavitvami. Ker Exim privzeto ne opusti načina privilegijev (deliver_drop_privilege = false), bodo ukazi, posredovani prek "${run{...}}", izvedeni kot root.

Omeniti velja, da je bila ranljivost odpraviti v izdaji 4.92, izdani februarja, brez poudarka, da bi lahko popravek povzročil varnostne težave. Nobenega razloga ni za domnevo, da so razvijalci Exima namerno prikrili ranljivost, saj je bila težava odpravljena med popravke napaka, ki se pojavi pri prenosu napačnih naslovov, ranljivost pa je odkril Qualys med revizijo sprememb v Eximu.

Popravek za prejšnje različice, ki se še naprej uporabljajo v distribucijah, je trenutno na voljo samo kot obliž. Popravne izdaje za prejšnje veje za odpravo težave so predvidene za 11. junij. Posodobitve paketov so pripravljene Debian, Ubuntu, openSUSE. Arch Linux и Fedora Dobavljajo različico 4.92, v kateri se problem ne pojavi. Težava z RHEL in CentOS ni dovzeten, ker Exim ni vključen v njihovo običajno skladišče paketov.

Vir: opennet.ru

Dodaj komentar