Eximi kriitiline haavatavus, mis võimaldab serveris koodi käivitada juurõigustega

Eximi meiliserveris tuvastatud kriitiline haavatavus (CVE-2019-10149), mis võib spetsiaalselt koostatud päringu töötlemisel viia juurõigustega serveris koodi kaugkäivitamiseni. Probleemi ärakasutamise võimalust märgiti versioonides 4.87 kuni 4.91 (kaasa arvatud) või suvandi EXPERIMENTAL_EVENT abil ehitamisel.

Vaikekonfiguratsioonis saab rünnak läbi viia ilma tarbetute komplikatsioonideta kohaliku kasutaja poolt, kuna rakendatakse ACL-i "verify = recipient", mis teostab väliste aadresside täiendavat kontrolli. Kaugrünnak võib toimuda siis, kui sätteid muudetakse, näiteks teise domeeni sekundaarse MX-i toimimine, ACL-i "verify=recipient" eemaldamine või teatud muudatused loendis local_part_suffix). Kaugrünnak on võimalik ka siis, kui ründaja suudab hoida ühendust serveriga avatud 7 päeva (näiteks saadab ühe baiti minutis, et aegumistähtajast mööda minna). Samas on võimalik, et probleemi kaugkasutamiseks on olemas lihtsamad ründevektorid.

Haavatavuse põhjuseks on saaja aadressi vale kontrollimine failis /src/deliver.c määratletud funktsioonis delivery_message(). Aadressi vorminguga manipuleerides saab ründaja saavutada oma andmete asendamise käsu argumentidega, mida kutsutakse läbi funktsiooni execv() juurõigustega. Töötamine ei nõua keeruliste tehnikate kasutamist, mida kasutatakse puhvri ületäitumiseks või mälu rikkumiseks, piisab lihtsast märkide asendamisest.

Probleem on seotud konstruktsiooni kasutamisega aadressi teisendamiseks:

delivery_localpart = expand_string(
string_sprintf("${local_part:%s}", uus->aadress));
tarni_domeen = expand_string(
string_sprintf("${domeen:%s}", uus->aadress));

Funktsioon expand_string() on liiga keeruline kombineerija, mis hõlmab käsu "${run{command arguments}" äratundmist, mis viib välise töötleja käivitamiseni. Seega peab kohalik kasutaja SMTP-seansi jooksul ründamiseks saatma vaid käsu nagu „RCPT TO „kasutajanimi+${run{...}}@localhost”, kus localhost on üks loendis local_domains olevatest hostidest, ja kasutajanimi on olemasoleva kohaliku kasutaja nimi.

Kui server töötab meiliedastajana, piisab kaugkäskluse "RCPT TO "${run{...}}@relaydomain.com" saatmisest, kus relaydomain.com on üks hostidest, mis on loetletud relay_to_domains'is. seadete jaotis. Kuna Exim ei loo vaikimisi privileegide režiimi (deliver_drop_privilege = false), käivitatakse käsud, mis edastatakse "${run{...}}" kaudu, administraatorina.

Tähelepanuväärne on, et haavatavus oli kõrvaldatud veebruaris välja antud versioonis 4.92, rõhutamata, et parandus võib põhjustada turvaprobleeme. Pole põhjust arvata, et Eximi arendajad varjasid haavatavust tahtlikult, kuna probleem lahendati parandused tõrge, mis ilmneb valede aadresside edastamisel, ja Qualys tuvastas haavatavuse Eximi muudatuste auditi käigus.

Distributsioonides jätkuvalt kasutatavate eelmiste versioonide parandus on praegu saadaval ainult kujul plaaster. Varasemate filiaalide parandavad väljaanded probleemi lahendamiseks on kavandatud 11. juuniks. Paketi värskendused on valmis Debian, Ubuntu, openSUSE. Arch Linux и Fedora Nad pakuvad versiooni 4.92, milles probleem ei ilmne. RHELi ja CentOS-i probleem ei ole vastuvõtlikud, kuna Exim ei kuulu nende standardpakettide hoidlasse.

Allikas: opennet.ru

Lisa kommentaar