Kritická zranitelnost v Exim, která umožňuje vykonávat kód na serveru s právy root

Na poštovním serveru Exim byla odhalena kritická zranitelnost (CVE-2019-10149), která může vést k vzdálenému vykonání kódu na serveru s právy root při zpracování speciálně formátovaného požadavku. Možnost exploatace problému byla zaznamenána ve verzích od 4.87 do 4.91 včetně nebo při sestavení s volbou EXPERIMENTAL_EVENT.

V konfiguraci s výchozími nastaveními může být útok proveden bez zbytečných komplikací ze strany lokálního uživatele, jelikož se používá ACL „verify = recipient“, která provádí další kontroly pro externí adresy. Vzdálený útok je možný při změně nastavení, například při práci jako sekundární MX pro jinou doménu, odstranění ACL „verify = recipient“ nebo určitých změnách v local_part_suffix). Vzdálený útok je také možný, pokud útočník dokáže udržet spojení se serverem otevřené po dobu 7 dnů (například vysíláním jednoho bajtu za minutu, aby se obcházelo přerušení kvůli timeoutu). Není vyloučeno, že pro vzdálenou exploataci problému existují i jednodušší vektory útoku.

Zranitelnost je způsobena nesprávnou kontrolou adresy příjemce ve funkci deliver_message(), definované v souboru /src/deliver.c. Skrze manipulaci s formátováním adresy může útočník dosáhnout vložení svých dat do argumentů příkazu, volaného skrze funkci execv() s právy root. K exploataci není potřeba používat složité techniky, které se používají při přetečení bufferu nebo poškození paměti, stačí jen jednoduché vložení znaků.

Problém je spojen s použitím konstrukce pro převod adres:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->address));
deliver_domain = expand_string(
string_sprintf("${domain:%s}", new->address));

Funkce expand_string() je přeplněným nástrojem, včetně rozpoznávání příkazu "${run{příkaz argumenty}", což vede k spuštění externího zpracovatele. Tím pádem pro útok v rámci SMTP relace lokálnímu uživateli stačí předat příkaz typu 'RCPT TO "username+${run{…}}@localhost"', přičemž localhost je jedním z hostitelů ze seznamu local_domains, a username je jméno existujícího lokálního uživatele.

Pokud server funguje jako poštovní relé, stačí vzdáleně poslat příkaz ‘RCPT TO «${run{…}}@relaydomain.com»‘, kde relaydomain.com je jeden z hostitelů uvedených v sekci nastavení relay_to_domains. Protože ve výchozím nastavení Exim neaplikuje režim odbavení oprávnění (deliver_drop_privilege = false), příkazy předané přes «${run{…}}» budou provedeny s právy root.

Je pozoruhodné, že zranitelnost byla odstraněna v vydání 4.92, které vyšlo v únoru, aniž by se zdůraznilo, že oprava může vést k problémům s bezpečností. Neexistují důvody domnívat se, že by vývojáři Exim vědomě skrývali zranitelnost, protože problém byl vyřešen během opravy selhání, které vzniká při přenosu nesprávných adres, a zranitelnost byla odhalena společností Qualys během auditu změn v Exim.

Oprava pro předchozí verze, které se nadále používají v distribucích, je zatím k dispozici pouze ve formě patche. Opravy pro předchozí větve, které problém odstraní, jsou naplánovány na 11. června. Aktualizace balíčků byly připraveny pro Debian, Ubuntu, openSUSE. Arch Linux a Fedora distribuce, které dodávají verzi 4.92, v níž se problém neprojevuje. RHEL a CentOS se této problematiky vystavený, protože Exim není součástí jejich standardního repozitáře balíčků.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster