V poštnem strežniku Exim
V privzeti konfiguraciji lahko napad brez nepotrebnih zapletov izvede lokalni uporabnik, saj je uporabljen ACL "verify = recipient", ki dodatno preverja zunanje naslove. Do oddaljenega napada lahko pride, ko se spremenijo nastavitve, na primer delovanje kot sekundarni MX za drugo domeno, odstranitev ACL »verify=recipient« ali določene spremembe lokalne_part_pripone). Napad na daljavo je možen tudi, če lahko napadalec ohrani povezavo s strežnikom odprto 7 dni (na primer pošilja en bajt na minuto, da zaobide časovno omejitev). Hkrati je možno, da obstajajo enostavnejši vektorji napadov za oddaljeno izkoriščanje problema.
Ranljivost je posledica nepravilnega preverjanja naslova prejemnika v funkciji deliver_message(), definirani v datoteki /src/deliver.c. Z manipulacijo oblikovanja naslova lahko napadalec doseže zamenjavo svojih podatkov v argumentih ukaza, ki se kliče prek funkcije execv() s korenskimi pravicami. Delovanje ne zahteva uporabe zapletenih tehnik, ki se uporabljajo za prelivanje medpomnilnika ali poškodbo pomnilnika; zadostuje preprosta zamenjava znakov.
Težava je povezana z uporabo konstrukta za pretvorbo naslovov:
dostavi_lokalnidel = razširi_niz(
string_sprintf("${local_part:%s}", nov->naslov));
dostavi_domena = razširi_niz(
string_sprintf("${domain:%s}", nov->naslov));
Funkcija expand_string() je preveč zapleten združevalec, vključno s prepoznavanjem ukaza “${run{command arguments}”, ki vodi do zagona zunanjega upravljalnika. Tako mora lokalni uporabnik za napad znotraj seje SMTP le poslati ukaz, kot je 'RCPT TO “username+${run{...}}@localhost”', kjer je localhost eden od gostiteljev s seznama local_domains, in uporabniško ime je ime obstoječega lokalnega uporabnika.
Če strežnik deluje kot poštni rele, je dovolj, da na daljavo pošljete ukaz 'RCPT TO "${run{...}}@relaydomain.com"', kjer je relaydomain.com eden od gostiteljev, navedenih v relay_to_domains razdelek z nastavitvami. Ker Exim privzeto ne opusti načina privilegijev (deliver_drop_privilege = false), bodo ukazi, posredovani prek "${run{...}}", izvedeni kot root.
Omeniti velja, da je bila ranljivost
Popravek za prejšnje različice, ki se še naprej uporabljajo v distribucijah, je trenutno na voljo samo kot
Vir: opennet.ru