Na poštovním serveru Exim kritická (), 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 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 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ě . Opravy pro předchozí větve, které problém odstraní, jsou naplánovány na 11. června. Aktualizace balíčků byly připraveny pro , , . a distribuce, které dodávají verzi 4.92, v níž se problém neprojevuje. RHEL a CentOS se této problematiky , protože Exim není součástí jejich standardního repozitáře balíčků.
Zdroj: opennet.ru
