Kritična ranjivost u Eximu koja dopušta izvršavanje koda na poslužitelju s root privilegijama

U Exim poslužitelju pošte identificiran kritička ranjivost (CVE-2019-10149), što može dovesti do daljinskog izvršavanja koda na poslužitelju s root pravima prilikom obrade posebno izrađenog zahtjeva. Mogućnost iskorištavanja problema primijećena je u verzijama od 4.87 do uključivo 4.91 ili prilikom izgradnje s opcijom EXPERIMENTAL_EVENT.

U zadanoj konfiguraciji napad bez nepotrebnih komplikacija može izvesti lokalni korisnik, budući da se primjenjuje ACL "verify = recipient" koji vrši dodatne provjere vanjskih adresa. Daljinski napad može se dogoditi kada se postavke promijene, kao što je djelovanje kao sekundarni MX za drugu domenu, uklanjanje ACL-a "verify=recipient" ili određene promjene u local_part_suffix). Daljinski napad također je moguć ako napadač može držati vezu s poslužiteljem otvorenom 7 dana (na primjer, slanje jednog bajta u minuti kako bi se zaobišao timeout). U isto vrijeme, moguće je da postoje jednostavniji vektori napada za daljinsko iskorištavanje problema.

Ranjivost je uzrokovana netočnom provjerom adrese primatelja u funkciji deliver_message() definiranoj u datoteci /src/deliver.c. Manipuliranjem formatiranja adrese, napadač može postići zamjenu svojih podataka u argumentima naredbe pozvane kroz funkciju execv() s root pravima. Operacija ne zahtijeva upotrebu složenih tehnika koje se koriste za prekoračenje međuspremnika ili oštećenje memorije; dovoljna je jednostavna zamjena znakova.

Problem je povezan s korištenjem konstrukcije za konverziju adresa:

dostavi_lokalnidio = proširi_string(
string_sprintf("${local_part:%s}", nova->adresa));
dostavi_domenu = proširi_string(
string_sprintf("${domain:%s}", nova->adresa));

Expand_string() funkcija je prekomplicirana kombinacija, uključujući prepoznavanje naredbe “${run{command arguments}”, što dovodi do pokretanja vanjskog rukovatelja. Stoga, za napad unutar SMTP sesije, lokalni korisnik treba samo poslati naredbu poput 'RCPT TO “username+${run{...}}@localhost”', gdje je localhost jedan od hostova s ​​popisa local_domains, a korisničko ime je ime postojećeg lokalnog korisnika.

Ako poslužitelj radi kao relej pošte, dovoljno je daljinski poslati naredbu 'RCPT TO "${run{...}}@relaydomain.com"', gdje je relaydomain.com jedan od hostova navedenih u relay_to_domains odjeljak postavki. Budući da Exim ne postavlja prema zadanim postavkama način ispuštanja privilegija (deliver_drop_privilege = false), naredbe proslijeđene putem "${run{...}}" bit će izvršene kao root.

Važno je napomenuti da je ranjivost bila eliminiran u izdanju 4.92 objavljenom u veljači, bez naglašavanja da bi popravak mogao dovesti do sigurnosnih problema. Nema razloga vjerovati da je došlo do namjernog prikrivanja ranjivosti od strane programera Exima, budući da je problem riješen tijekom ispravke kvar koji se javlja kada se prenose netočne adrese, a ranjivost je identificirao Qualys tijekom revizije promjena u Eximu.

Popravak za prethodne verzije koje se i dalje koriste u distribucijama trenutno je dostupan samo kao zakrpa. Korektivna izdanja za prethodne grane za rješavanje problema zakazana su za 11. lipnja. Ažuriranja paketa su spremna za Debian, Ubuntu, openSUSE. Arch Linux и Fedora Isporučuju verziju 4.92, u kojoj se problem ne pojavljuje. RHEL i CentOS problem nije osjetljiv, budući da Exim nije uključen u njihov redoviti repozitorij paketa.

Izvor: opennet.ru

Dodajte komentar