Në serverin e postës Exim kritike (), e cila mund të çojë në ekzekutimin e kodit në distancë në server me të drejtat root gjatë përpunimit të një kërkese të strukturuar posaçërisht. Mundësia e shfrytëzimit të çështjes është vënë re në versionet nga 4.87 deri në 4.91 përfshire 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 = recipient', që kryen kontrolle shtesë për adresat e jashtme. Kryerja e një sulmi në distancë është e mundur duke ndryshuar cilësimet, për shembull, kur punon si MX i dytë për një domain tjetër, duke hequr ACL 'verify = recipient' ose duke bërë disa ndryshime në local_part_suffix). Një sulm në distancë gjithashtu është i mundur nëse sulmuesi mund të mbajë lidhjen me serverin të hapur për 7 ditë (për shembull, duke dërguar një bajt në minutë për të anashkaluar ndërprerjen nga koha e pritjes). Nuk përjashtohet që për shfrytëzimin e problemeve në distancë të ekzistojnë edhe vektorë sulmi më të thjeshtë.
Vulnerabiliteti shkaktohet nga kontrolli i pasaktë i adresës së marrësit në funksionin deliver_message(), e cila përcaktohet në skedarin /src/deliver.c. Nëpërmjet manipulimit të formatimit të adresës, sulmuesi mund të arrijë t'i futë të dhënat e tij në argumentet e komandës që thirret përmes funksionit execv() me të drejtat root. Për shfrytëzimin e tij nuk kërkohet përdorimi i teknikave komplekse, të përdorura gjatë mbushjes së buffer-ave ose dëmton memorjen, mjafton thjesht të futen simbole.
ĂĂ«shtja Ă«shtĂ« e lidhur me aplikimin pĂ«r konvertimin e adresave tĂ« ndĂ«rtimit:
deliver_localpart = expand_string(
string_sprintf('${local_part:%s}', new->address));
deliver_domain = expand_string(
string_sprintf('${domain:%s}', new->address));
Funksioni expand_string() Ă«shtĂ« njĂ« kombinuar i ekzagjeruar, i cili, pĂ«rfshin edhe ndarjen e komandĂ«s '${run{komanda argumente}', e cila çon nĂ« ekzekutimin e njĂ« trajtuesi tĂ« jashtĂ«m. KĂ«shtu, pĂ«r tĂ« sulmuar brenda seancĂ«s SMTP, njĂ« pĂ«rdorues lokal mjafton tĂ« dĂ«rgojĂ« njĂ« komandĂ« nĂ« stilin âRCPT TO âusername+${run{âŠ}}@localhostââ, ku localhost Ă«shtĂ« njĂ« nga hostet nĂ« listĂ«n e local_domains, dhe username Ă«shtĂ« emri i njĂ« pĂ«rdoruesi lokal ekzistues.
NĂ«se serveri punon si njĂ« relay postash, mjafton tĂ« dĂ«rgohet njĂ« komandĂ« tĂ« largĂ«t âRCPT TO â${run{âŠ}}@relaydomain.comââ, ku relaydomain.com Ă«shtĂ« njĂ« nga hostet e renditur nĂ« seksionin e konfigurimit relay_to_domains. Duke qenĂ« se nĂ« parazgjedhje nĂ« exim nuk aplikohet njĂ« mod tĂ« heqjes sĂ« privilegjeve (deliver_drop_privilege = false), komandat e dĂ«rguara pĂ«rmes '${run{âŠ}}' do tĂ« ekzekutohen me tĂ« drejtat root.
ĂshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se vulnerabiliteti u nĂ« versionin e dalĂ« nĂ« shkurt 4.92 pa theks tĂ« veçantĂ« se riparimi mund tĂ« çojĂ« nĂ« probleme tĂ« sigurise. Nuk ka arsye pĂ«r tĂ« besuar se ka pasur mbulime tĂ« qĂ«llimshme tĂ« vulnerabilitetit nga zhvilluesit e Exim, pasi çështja u zgjidh gjatĂ« dĂ«shtimit, qĂ« ndodhi kur dĂ«rgoheshin adresat e pasakta, dhe vulnerabiliteti u identifikua nga kompania Qualys gjatĂ« auditimit tĂ« ndryshimeve nĂ« Exim.
Riparimi për versionet e kaluara, të cilat vazhdojnë të aplikohen në shpërndarje, është në dispozicion vetëm në formën . Lëshimet korrigjuese për degët e kaluara me zgjidhjen e problemit janë planifikuar për 11 qershor. Përditësimet e paketave janë përgatitur për , , . dhe ofrojnë versionin 4.92, ku problemi nuk shfaqet. RHEL dhe CentOS kanë probleme , pasi Exim nuk është pjesë e depozitave të pakove të tyre.
Burimi: opennet.ru
