Kritična ranjivost u Eximu koja omogućava izvršavanje koda na serveru sa root privilegijama

U Exim mail serveru identifikovan kritička ranjivost (CVE-2019-10149), što može dovesti do udaljenog izvršavanja koda na serveru s root pravima prilikom obrade posebno kreiranog zahtjeva. Mogućnost iskorištavanja problema zabilježena je u verzijama od 4.87 do 4.91 uključujući i kod izgradnje sa opcijom EXPERIMENTAL_EVENT.

U zadanoj konfiguraciji, napad se može izvesti bez nepotrebnih komplikacija od strane lokalnog korisnika, jer se primjenjuje ACL "verify = recipient", koji vrši dodatne provjere za eksterne adrese. Do udaljenog napada može doći kada se postavke promijene, kao što je djelovanje kao sekundarni MX za drugu domenu, uklanjanje "verify=recipient" ACL-a ili određene promjene u local_part_suffix). Daljinski napad je također moguć ako je napadač u mogućnosti da zadrži vezu sa serverom otvorenu 7 dana (na primjer, šalje jedan bajt u minuti da zaobiđe vremensko ograničenje). Istovremeno, moguće je da postoje jednostavniji vektori napada za daljinsku eksploataciju problema.

Ranjivost je uzrokovana neispravnom verifikacijom adrese primaoca u funkciji dostavi_message() definiranoj u datoteci /src/deliver.c. Manipulišući formatiranjem adrese, napadač može postići supstituciju svojih podataka u argumente komande pozvane preko funkcije execv() sa root pravima. Operacija ne zahtijeva korištenje složenih tehnika koje se koriste za prekoračenje bafera ili oštećenje memorije; dovoljna je jednostavna zamjena znakova.

Problem je vezan za upotrebu konstrukcije za konverziju adresa:

dostavi_localpart = expand_string(
string_sprintf("${local_part:%s}", novo->adresa));
dostavi_domena = expand_string(
string_sprintf("${domena:%s}", novo->adresa));

Funkcija expand_string() je prekompliciran kombinator, uključujući prepoznavanje naredbe “${run{command arguments}”, što dovodi do pokretanja vanjskog rukovatelja. Dakle, da bi napao unutar SMTP sesije, lokalni korisnik treba samo poslati komandu poput 'RCPT TO “username+${run{...}}@localhost”', gdje je localhost jedan od hostova sa liste local_domains, a korisničko ime je ime postojećeg lokalnog korisnika.

Ako server radi kao mail relej, dovoljno je daljinski poslati naredbu 'RCPT NA "${run{...}}@relaydomain.com"', gdje je relaydomain.com jedan od hostova navedenih u relay_to_domains odjeljak postavki. Pošto Exim ne podrazumeva da ispušta režim privilegija (deliver_drop_privilege = false), komande prosleđene preko "${run{...}}" će biti izvršene kao root.

Važno je napomenuti da je ranjivost bila eliminisan u izdanju 4.92 objavljenom u februaru, bez naglašavanja da bi popravak mogao dovesti do sigurnosnih problema. Nema razloga vjerovati da je došlo do namjernog prikrivanja ranjivosti od strane Exim programera, budući da je problem riješen tokom popravci greška koja se javlja kada se prenesu netačne adrese, a ranjivost je identifikovana od strane Qualysa tokom revizije promena u Eximu.

Ispravka za prethodne verzije koje se i dalje koriste u distribucijama trenutno je dostupna samo kao patch. Ispravna izdanja za prethodne grane kako bi se riješio problem zakazana su za 11. jun. Ažuriranja paketa su spremna za Debian, Ubuntu, openSUSE. Arch Linux и fedora Oni isporučuju verziju 4.92, u kojoj se problem ne pojavljuje. RHEL i CentOS problem nije podložan, pošto Exim nije uključen u njihovo redovno spremište paketa.

izvor: opennet.ru

Dodajte komentar