Dobësi kritike në Exim që lejon që kodi të ekzekutohet në server me privilegje rrënjësore

Në serverin e postës Exim identifikuar kritike cenueshmëria (CVE-2019-10149), i cili mund të çojë në ekzekutimin e kodit në distancë në server me të drejta rrënjësore kur përpunohet një kërkesë e krijuar posaçërisht. Mundësia e shfrytëzimit të problemit është vërejtur në versionet nga 4.87 deri në 4.91 përfshirëse ose gjatë ndërtimit me opsionin EXPERIMENTAL_EVENT.

Në konfigurimin e paracaktuar, sulmi mund të kryhet pa komplikime të panevojshme nga një përdorues lokal, pasi aplikohet ACL "verify = marrës", i cili kryen kontrolle shtesë për adresat e jashtme. Një sulm në distancë mund të ndodhë kur ndryshohen cilësimet, si p.sh. të veprojë si një MX dytësor për një domen tjetër, duke hequr ACL "verify=recipient" ose disa ndryshime në prapashtesën local_part_). Një sulm në distancë është gjithashtu i mundur nëse sulmuesi është në gjendje ta mbajë të hapur lidhjen me serverin për 7 ditë (për shembull, dërgimi i një bajt në minutë për të anashkaluar një afat kohor). Në të njëjtën kohë, është e mundur që të ketë vektorë më të thjeshtë sulmi për shfrytëzimin në distancë të problemit.

Dobësia shkaktohet nga verifikimi i gabuar i adresës së marrësit në funksionin deliver_message() të përcaktuar në skedarin /src/deliver.c. Duke manipuluar formatimin e adresës, një sulmues mund të arrijë zëvendësimin e të dhënave të tij në argumentet e një komande të thirrur përmes funksionit execv() me të drejta rrënjësore. Operacioni nuk kërkon përdorimin e teknikave komplekse të përdorura për tejmbushjet e buferit ose prishjen e kujtesës; zëvendësimi i thjeshtë i karaktereve është i mjaftueshëm.

Problemi lidhet me përdorimin e konstruktit për konvertimin e adresës:

dorëzo_partin_lokal = zgjerim_string(
string_sprintf("${local_part:%s}", new->adresa));
domeni_dorëzimi = zgjerimi_string(
string_sprintf("${domain:%s}", new->adresa));

Funksioni expand_string() është një kombinues tepër i ndërlikuar, duke përfshirë njohjen e komandës "${run{command arguments}", e cila çon në lëshimin e një mbajtësi të jashtëm. Kështu, për të sulmuar brenda një sesioni SMTP, një përdorues lokal duhet vetëm të dërgojë një komandë si 'RCPT TE "username+${run{...}}@localhost"', ku localhost është një nga hostet nga lista local_domains. dhe emri i përdoruesit është emri i një përdoruesi ekzistues lokal.

Nëse serveri punon si një rele postare, mjafton të dërgoni në distancë komandën 'RCPT TE "${run{...}}@relaydomain.com", ku relaydomain.com është një nga hostet e listuar në relay_to_domains seksioni i cilësimeve. Meqenëse Exim nuk e paracakton të heqë modalitetin e privilegjit (deliver_drop_privilege = false), komandat e kaluara përmes "${run{...}}" do të ekzekutohen si rrënjë.

Vlen të përmendet se cenueshmëria ishte eliminohet në versionin 4.92 të lëshuar në shkurt, pa theksuar se rregullimi mund të çojë në probleme sigurie. Nuk ka asnjë arsye për të besuar se ka pasur një fshehje të qëllimshme të cenueshmërisë nga zhvilluesit e Exim, pasi problemi u zgjidh gjatë rregullon dështimi që ndodh kur transmetohen adresa të pasakta dhe dobësia u identifikua nga Qualys gjatë një auditimi të ndryshimeve në Exim.

Një rregullim për versionet e mëparshme që vazhdojnë të përdoren në shpërndarje aktualisht disponohet vetëm si arnim. Lëshimet korrigjuese për degët e mëparshme për të rregulluar problemin janë planifikuar për në 11 qershor. Përditësimet e paketës janë gati Debian, Ubuntu, openSUSE. Arch Linux и Fedora Ata ofrojnë versionin 4.92, në të cilin problemi nuk shfaqet. Problemi RHEL dhe CentOS jo subjekt, pasi Exim nuk përfshihet në depon e tyre të rregullt të paketave.

Burimi: opennet.ru

Shto një koment