Kritická zraniteľnosť v Exime, ktorá umožňuje spustenie kódu na serveri s oprávneniami root

Na poštovom serveri Exim identifikované kritický zraniteľnosť (CVE-2019 10149,), čo môže viesť k vzdialenému spusteniu kódu na serveri s právami root pri spracovaní špeciálne pripravenej požiadavky. Možnosť využitia problému bola zaznamenaná vo verziách od 4.87 do 4.91 vrátane alebo pri zostavovaní s možnosťou EXPERIMENTAL_EVENT.

V predvolenej konfigurácii môže útok vykonať bez zbytočných komplikácií lokálny používateľ, keďže je aplikovaný ACL „verify = recipient“, ktorý vykonáva dodatočné kontroly externých adries. Vzdialený útok môže nastať, keď sa zmenia nastavenia, ako napríklad pôsobenie ako sekundárny MX pre inú doménu, odstránenie ACL „verify=recipient“ alebo určité zmeny v prípone local_part_suffix). Vzdialený útok je možný aj vtedy, ak je útočník schopný udržať pripojenie k serveru otvorené 7 dní (napríklad odoslaním jedného bajtu za minútu, aby sa obišiel časový limit). Zároveň je možné, že existujú jednoduchšie vektory útoku na vzdialené využitie problému.

Zraniteľnosť je spôsobená nesprávnym overením adresy príjemcu vo funkcii delivery_message() definovanej v súbore /src/deliver.c. Manipuláciou s formátovaním adresy môže útočník dosiahnuť nahradenie svojich údajov do argumentov príkazu volaného cez funkciu execv() s právami root. Prevádzka nevyžaduje použitie zložitých techník používaných na pretečenie vyrovnávacej pamäte alebo poškodenie pamäte, postačuje jednoduchá náhrada znakov.

Problém súvisí s použitím konštrukcie na konverziu adresy:

delivery_localpart = expand_string(
string_sprintf("${miestna_časť:%s}", nová->adresa));
delivery_domain = expand_string(
string_sprintf("${doména:%s}", nová->adresa));

Funkcia expand_string() je príliš komplikovaný zlučovač vrátane rozpoznávania príkazu „${run{príkazové argumenty}“, ktorý vedie k spusteniu externého obslužného programu. Na útok v rámci relácie SMTP teda lokálny používateľ potrebuje poslať príkaz ako 'RCPT TO “username+${run{...}}@localhost”', kde localhost je jeden z hostiteľov zo zoznamu local_domains, a užívateľské meno je meno existujúceho lokálneho užívateľa.

Ak server funguje ako mail relay, stačí na diaľku poslať príkaz 'RCPT TO "${run{...}}@relaydomain.com"', kde relaydomain.com je jeden z hostiteľov uvedených v relay_to_domains sekcia nastavení. Keďže Exim štandardne nepúšťa režim privilégií (deliver_drop_privilege = false), príkazy odovzdané cez "${run{...}}" budú vykonávané ako root.

Je pozoruhodné, že zraniteľnosť bola eliminovaný vo vydaní 4.92 vydanom vo februári bez toho, aby sa zdôraznilo, že oprava môže viesť k bezpečnostným problémom. Nie je dôvod domnievať sa, že došlo k zámernému zatajeniu zraniteľnosti vývojármi Exim, keďže problém bol vyriešený počas opravy zlyhanie, ku ktorému dochádza pri prenose nesprávnych adries a zraniteľnosť bola identifikovaná spoločnosťou Qualys počas auditu zmien v Exime.

Oprava pre predchádzajúce verzie, ktoré sa naďalej používajú v distribúciách, je momentálne dostupná len ako náplasť. Opravné vydania pre predchádzajúce pobočky na odstránenie problému sú naplánované na 11. júna. Aktualizácie balíkov sú pripravené debian, ubuntu, openSUSE. Arch Linux и Fedora Dodávajú verziu 4.92, v ktorej sa problém neprejavuje. Problém RHEL a CentOS nie je náchylný, pretože Exim nie je súčasťou ich bežného úložiska balíkov.

Zdroj: opennet.ru

Pridať komentár