Na poštanskom serveru Exim kritična (), što može dovesti do udaljenog izvršavanja koda na serveru s root pravima prilikom obrade posebno oblikovanog zahtjeva. Mogućnost iskorištavanja problema zabilježena je u verzijama od 4.87 do 4.91 uključujući ili prilikom gradnje s opcijom EXPERIMENTAL_EVENT.
U konfiguraciji po defaultu napad se može izvesti bez dodatnih komplikacija od strane lokalnog korisnika, jer se koristi ACL 'verify = recipient', koji provodi dodatne provjere za vanjske adrese. Izvođenje udaljenog napada moguće je promjenom postavki, na primjer, prilikom rada kao sekundarni MX za drugu domenu, uklanjanjem ACL 'verify = recipient' ili određenim promjenama u local_part_suffix). Udaljeni napad je također moguć ako napadač može održati vezu sa serverom otvorenom tijekom 7 dana (na primjer, šaljući jedan bajt u minutu kako bi zaobišao prekid zbog timout-a). Pri tome nije isključeno da postoje i jednostavniji vektori napada za udaljeno iskorištavanje problema.
Ranljivost je uzrokovana neispravnom provjerom adrese primatelja u funkciji deliver_message(), definiranoj u datoteci /src/deliver.c. Kroz manipulaciju s formatiranjem adrese, napadač može postići umetanje svojih podataka u argumente komande koja se poziva preko funkcije execv() s root pravima. Za iskorištavanje nije potrebno primjenjivanje složenih tehnika korištenih prilikom preljevanja bafera ili oštećenja memorije, dovoljno je samo jednostavno umetanje simbola.
Problem je povezan s primjenom konstrukcije za pretvorbu adresa:
deliver_localpart = expand_string(
string_sprintf('${local_part:%s}', new->address));
deliver_domain = expand_string(
string_sprintf('${domain:%s}', new->address));
Funkcija expand_string() je prekomplicirani kombajn, među ostalim prepoznajući komandu '${run{komanda argumenti}', što dovodi do pokretanja vanjskog procesora. Tako, za napad unutar SMTP sesije lokalnom korisniku dovoljno je poslati komandu tipa 'RCPT TO "username+${run{...}}@localhost"', gdje je localhost jedan od hostova iz liste local_domains, a username ime postojećeg lokalnog korisnika.
Ako server radi kao poštanski relé, dovoljno je daljinski poslati naredbu ‘RCPT TO «${run{…}}@relaydomain.com»‘, gdje je relaydomain.com jedan od hostova navedenih u sekciji postavki relay_to_domains. Budući da po defaultu u Eximu nije aktiviran način odbacivanja privilegija (deliver_drop_privilege = false), naredbe proslijeđene kroz «${run{…}}» bit će izvršene s pravima root.
Zanimljivo je da je ranjivost otkrivena u izdanju 4.92 iz veljače bez naglašavanja da bi ispravak mogao dovesti do problema s sigurnošću. Nema razloga vjerovati da su developeri Exima svjesno prikrivali ranjivost, jer je problem riješen tijekom greške koja se dogodila prilikom prijenosa neispravnih adresa, a ranjivost je otkrila tvrtka Qualys tijekom revizije promjena u Eximu.
Ispravak za prošle verzije koje se i dalje koriste u distribucijama trenutno je dostupan samo u obliku . Korektivna izdanja za prethodne grane s ispravkom problema planirana su za 11. lipnja. Ažuriranja paketa pripremljena su za , , . i dostavljaju verziju 4.92, u kojoj problem nije prisutan. RHEL i CentOS nisu pogođeni budući da Exim nije uključen u njihov službeni repozitorij paketa.
Izvor: opennet.ru
