Společnost Qualys další vzdálená kritická zranitelnost (CVE-2020-8794) na poštovním serveru , vyvíjeném projektem OpenBSD. Stejně jako zranitelnost odhalena na konci ledna , nový problém umožňuje vzdálené provádění libovolných shellových příkazů na serveru s právy uživatele root. Zranitelnost v vydání .
Problém je způsoben chybou v kódu, který zajišťuje doručení pošty na vzdálený poštovní server (ne v kódu, který zpracovává příchozí připojení). Útok je možný jak na straně klienta, tak na straně serveru. Na straně klienta je útok možný v konfiguraci OpenSMTPD ve výchozím nastavení, ve které OpenSMTPD přijímá požadavky pouze na vnitřním síťovém rozhraní (localhost) a odesílá e-maily na externí servery. Pro zneužití zranitelnosti stačí, aby při doručování e-mailu OpenSMTPD navázal relaci s poštovním serverem, který je pod kontrolou útočníka, nebo aby útočník mohl zasáhnout do spojení klienta (MITM nebo přesměrování při útocích přes DNS nebo BGP).
Pro útok na straně serveru je nutné, aby byl OpenSMTPD nastaven na příjem externích síťových požadavků od jiných poštovních serverů nebo aby obsluhoval externí služby, které umožňují odeslání požadavku na libovolný e-mail (například formuláře potvrzení adresy na webových stránkách). Například útočník se může připojit k serveru OpenSMTPD a odeslat neplatný e-mail (neexistujícímu uživateli), což povede k odpovědnímu odeslání e-mailu s chybovým kódem (bounce) na server útočníka. Útočník může zneužít zranitelnost v momentě, kdy se OpenSMTPD připojí k doručení oznámení na server útočníka. Vložení shellových příkazů během útoku se ukládá do souboru, který je vykonán s právy root při restartování OpenSMTPD, proto útočník pro potvrzení útoku musí čekat na restart OpenSMTPD nebo iniciovat pád OpenSMTPD.
Problém se vyskytuje ve funkci mta_io() v kódu pro analýzu vícerozměrné odpovědi vrácené vzdáleným serverem po navázání spojení (například „250-ENHANCEDSTATUSCODES“ a „250 HELP“). V OpenSMTPD se očekává, že první řádek obsahuje trojmístné číslo a text oddělený znakem „-“, a druhý řádek trojmístné číslo a text oddělené mezerou. Pokud po trojmístném čísle ve druhém řádku nenásleduje mezera a text, ukazatel, který se používá k určení textu, se nastaví na byt následující za znakem ‘\0’ a pokusí se zkopírovat do datového buffera, který následuje po konci řádku.
Na žádost projektu OpenBSD byla publikace podrobností o zneužití zranitelnosti odložena do 26. února, aby měli uživatelé možnost aktualizovat své systémy. Problém je přítomen v kódové základně od prosince 2015, ale zneužití kódu s právy root je možné od května 2018. Výzkumníci připravili funkční prototyp exploitu, který byl úspěšně testován v sestavách OpenSMTPD pro OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) a Fedora 31.
V OpenSMTPD je také další zranitelnost (CVE-2020-8793), která umožňuje místnímu uživateli přečíst první řádek jakéhokoli souboru v systému. Například lze přečíst první řádek /etc/master.passwd, který obsahuje hash hesla uživatele root. Zranitelnost také umožňuje přečíst celé obsahu souboru patřícího jinému uživateli, pokud se tento soubor nachází ve stejné FS jako adresář /var/spool/smtpd/. Problém není zneužitelný v mnoha distribucích Linuxu, kde je hodnota /proc/sys/fs/protected_hardlinks nastavena na 1.
Problém je důsledkem neúplného odstranění , které byly zmíněny během auditu provedeného společností Qualys v roce 2015. Útočník může dosáhnout provedení svého kódu s právy skupiny „_smtpq“, když nastaví proměnnou „PATH=.“, a umístí do aktuálního adresáře skript s názvem makemap (nástroj smtpctl spouští makemap bez explicitního uvedení cesty). Po získání přístupu ke skupině „_smtpq“ může útočník poté vyvolat závodní stav (vytvořit velký soubor v adresáři offline a poslat signál SIGSTOP) a, před dokončením zpracování, nahradit soubor v adresáři offline na tvrdý symbolický odkaz ukazující na cílový soubor, jehož obsah má být přečten.
Je zajímavé, že ve Fedora 31 zranitelnost umožňuje okamžité získání privilegovaných práv skupiny root, protože proces smtpctl má příznak setgid root místo setgid smtpq. Získáním přístupu do skupiny root lze přepsat obsah /var/lib/sss/mc/passwd a získat plný root přístup v systému.
Zdroj: opennet.ru
