Ranljivost v poštnem strežniku qmail, ki jo je mogoče na daljavo izkoristiti

Varnostni raziskovalci iz Qualysa pokazala priložnost izkoriščanje ranljivosti v poštnem strežniku qmail, slavni že leta 2005 (CVE-2005-1513), vendar je ostal nepopravljen, ker je avtor qmaila trdil, da je nerealno ustvariti delujoče izkoriščevanje, ki bi ga lahko uporabili za napad na sisteme v privzeti konfiguraciji. Qualys je uspel pripraviti izkoriščanje, ki ovrže to domnevo in omogoča sprožitev oddaljenega izvajanja kode na strežniku s pošiljanjem posebej oblikovanega sporočila.

Težavo povzroča prekoračitev celega števila v funkciji stralloc_readyplus(), do katere lahko pride pri obdelavi zelo velikega sporočila. Delovanje je zahtevalo 64-bitni sistem z več kot 4 GB navideznega pomnilnika. Ko je bila ranljivost prvotno analizirana leta 2005, je Daniel J. Bernstein trdil, da predpostavka v kodi, da je velikost dodeljene matrike vedno znotraj 32-bitne vrednosti, temelji na dejstvu, da nihče ne zagotavlja gigabajtov pomnilnika vsakemu procesu. V zadnjih 15 letih so 64-bitni sistemi na strežnikih nadomestili 32-bitne sisteme, količina dobavljenega pomnilnika in pasovna širina omrežja pa sta se dramatično povečala.

Vzdrževalci paketa qmail so upoštevali Bernsteinovo opombo in omejili razpoložljivi pomnilnik pri zagonu procesa qmail-smtpd (na primer, v Debianu 10 je omejitev nastavljena na 7 MB). A inženirji podjetja Qualys so ugotovili, da to ni dovolj in je poleg qmail-smtpd možno izvesti oddaljeni napad tudi na proces qmail-local, ki je v vseh testiranih paketih ostal neomejen. Kot dokaz je bil pripravljen prototip izkoriščanja, ki je bil primeren za napad na paket Debian s qmailom v privzeti konfiguraciji.
Za organizacijo oddaljenega izvajanja kode med napadom potrebuje strežnik 4 GB prostega prostora na disku in 8 GB RAM-a.
Izkoriščanje vam omogoča zagon poljubnih lupinskih ukazov s pravicami katerega koli uporabnika v sistemu, razen korenskih in sistemskih uporabnikov, ki nimajo lastnega podimenika v imeniku “/home” (proces qmail-local se zažene s pravicami lokalnega uporabnika, kateremu se izvaja dostava).

Napad je izveden
s pošiljanjem zelo velikega poštnega sporočila, vključno z več vrsticami glave, ki merijo približno 4 GB in 576 MB. Obdelava takega niza v qmail-local povzroči prekoračitev celega števila pri poskusu dostave sporočila lokalnemu uporabniku. Celoštevilska prekoračitev nato vodi do prekoračitve medpomnilnika pri kopiranju podatkov in možnosti prepisovanja pomnilniških strani s kodo libc. Z manipulacijo postavitve poslanih podatkov je mogoče tudi prepisati naslov funkcije »open()« in ga nadomestiti z naslovom funkcije »system()«.

Nato se v procesu klica qmesearch() v qmail-local prek funkcije open() odpre datoteka ».qmail-extension«, ki vodi do dejanske izvedbe funkcije
sistem(".qmail-razširitev"). Ker pa je del datoteke »pripona« ustvarjen na podlagi prejemnikovega naslova (na primer »localuser-extension@localdomain«), lahko napadalci poskrbijo, da se ukaz pošlje za zagon, tako da navedejo uporabnika »localuser-;command ;@localdomain« kot prejemnik sporočila.

Med analizo kode sta bili ugotovljeni tudi dve ranljivosti v dodatnem popravku qmail-verify, ki je del paketa za Debian. Prva ranljivost (CVE-2020-3811) vam omogoča, da obidete preverjanje e-poštnega naslova, drugi pa (CVE-2020-3812) vodi do uhajanja lokalnih informacij. Zlasti prva ranljivost vam omogoča, da zaobidete preverjanje pravilnosti naslova, uporabljenega v izkoriščanju za pošiljanje ukaza (preverjanje ne deluje za naslove brez domene, kot je »localuser-;command;«). Drugo ranljivost je mogoče uporabiti za preverjanje prisotnosti datotek in imenikov v sistemu, vključno s tistimi, do katerih lahko dostopa samo root (qmail-verify teče s root pravicami), prek neposrednega klica lokalnemu upravljavcu.

Za rešitev težave je Bernstein priporočil izvajanje procesov qmail s popolno omejitvijo razpoložljivega pomnilnika (»softlimit -m12345678«), v tem primeru je težava blokirana. Kot alternativni način zaščite je omenjena tudi omejitev največje velikosti obdelanega sporočila prek datoteke “control/databytes” (privzeto ni ustvarjena s privzetimi nastavitvami, qmail ostaja ranljiv). Poleg tega "control/databytes" ne ščiti pred lokalnimi napadi uporabnikov sistema, saj omejitev upošteva samo qmail-smtpd.

Težava vpliva na paket netqmail, vključen v repozitorije Debian. Za ta paket je bil pripravljen komplet popravkov, ki odpravlja tako stare ranljivosti iz leta 2005 (z dodajanjem trdih omejitev pomnilnika kodi funkcije alloc()) kot nove težave v qmail-verify. Ločeno pripravljeno posodobljena različica popravka qmail-verify. Razvijalci veje notqmail pripravili lastne popravke za blokiranje starih težav, prav tako pa so začeli delati na odpravi vseh možnih prekoračitev celih števil v kodi.

Vir: opennet.ru

Dodaj komentar