Kritinis Exim pažeidžiamumas, leidžiantis vykdyti kodą serveryje su root teisėmis

„Exim“ pašto serveryje nustatyta kritiškas pažeidžiamumas (CVE-2019-10149), dėl kurio gali būti nuotolinis kodo vykdymas serveryje su root teisėmis, kai apdorojama specialiai sukurta užklausa. Problemos išnaudojimo galimybė buvo pažymėta versijose nuo 4.87 iki 4.91 imtinai arba kuriant naudojant EXPERIMENTAL_EVENT parinktį.

Pagal numatytąją konfigūraciją ataka gali būti įvykdyta be nereikalingų vietinio vartotojo komplikacijų, nes taikomas ACL „verify = recipient“, kuris atlieka papildomus išorinių adresų patikrinimus. Nuotolinė ataka gali įvykti, kai pakeičiami nustatymai, pvz., veikia kaip antrinis MX kitam domenui, pašalinamas „verify=recipient“ ACL arba tam tikri local_part_suffix pakeitimai). Nuotolinė ataka taip pat galima, jei užpuolikas sugeba palaikyti ryšį su serveriu atidarytą 7 dienas (pavyzdžiui, siunčia vieną baitą per minutę, kad apeitų skirtąjį laiką). Tuo pačiu metu gali būti, kad yra paprastesnių atakų vektorių, skirtų nuotoliniam problemos išnaudojimui.

Pažeidžiamumą sukelia neteisingas gavėjo adreso patikrinimas naudojant /src/deliver.c faile apibrėžtą funkciją delivery_message(). Manipuliuodamas adreso formatavimu, užpuolikas gali pakeisti savo duomenis į komandos, iškviestos per funkciją execv() su root teisėmis, argumentais. Veikimui nereikia naudoti sudėtingų metodų, naudojamų buferio perpildymui ar atminties sugadinimui; pakanka paprasto simbolio pakeitimo.

Problema susijusi su konstrukcijos naudojimu adreso konvertavimui:

pristatyti_localpart = expand_string(
string_sprintf("${local_part:%s}", naujas->adresas));
pristatymo_domenas = expand_string(
string_sprintf("${domenas:%s}", naujas->adresas));

Funkcija expand_string() yra pernelyg sudėtingas kombinatorius, įskaitant komandos „${run{command arguments}“ atpažinimą, dėl kurio paleidžiama išorinė tvarkytoja. Taigi, norėdamas atakuoti SMTP seanso metu, vietiniam vartotojui tereikia nusiųsti komandą, pvz., „RCPT“ Į „username+${run{...}}@localhost“, kur „localhost“ yra vienas iš prieglobų iš sąrašo „local_domains“, o vartotojo vardas yra esamo vietinio vartotojo vardas.

Jei serveris veikia kaip pašto perdavimas, pakanka nuotoliniu būdu išsiųsti komandą 'RCPT TO "${run{...}}@relaydomain.com"', kur relaydomain.com yra vienas iš relay_to_domains nurodytų prieglobų. nustatymų skyrių. Kadangi Exim pagal numatytuosius nustatymus nepaleidžia privilegijų režimo (deliver_drop_privilege = false), komandos, perduodamos per "${run{...}}", bus vykdomos kaip root.

Pažymėtina, kad pažeidžiamumas buvo pašalinta vasario mėn. išleistoje 4.92 versijoje, nepabrėžiant, kad pataisymas gali sukelti saugumo problemų. Nėra pagrindo manyti, kad Exim kūrėjai sąmoningai nuslėpė pažeidžiamumą, nes problema buvo ištaisyta taiso gedimas, atsirandantis, kai perduodami neteisingi adresai, o pažeidžiamumą nustatė Qualys atlikdama Exim pakeitimų auditą.

Ankstesnių versijų, kurios ir toliau naudojamos platinimuose, pataisymas šiuo metu pasiekiamas tik kaip pleistras. Ankstesnių filialų korekciniai leidimai problemai išspręsti planuojami birželio 11 d. Paketo atnaujinimai yra paruošti debian, ubuntu, openSUSE. Arch Linux и Minkšta fetrinė skrybėlė Jie pateikia 4.92 versiją, kurioje problema nerodoma. RHEL ir CentOS problema nėra jautrūs, nes Exim nėra įtrauktas į jų įprastą paketų saugyklą.

Šaltinis: opennet.ru

Добавить комментарий