Vzdáleně zneužitá zranitelnost poštovního serveru qmail

Bezpečnostní výzkumníci z Qualys ukázáno příležitost vykořisťování zranitelnosti poštovního serveru qmail, slavný v roce 2005 (CVE-2005-1513), ale zůstal neopraven, protože autor qmailu tvrdil, že je nereálné vytvořit funkční exploit, který by mohl být použit k útoku na systémy ve výchozí konfiguraci. Qualys dokázal připravit exploit, který vyvrací tento předpoklad a umožňuje spustit vzdálené spuštění kódu na serveru odesláním speciálně navržené zprávy.

Problém je způsoben přetečením celého čísla ve funkci stralloc_readyplus(), ke kterému může dojít při zpracování velmi velké zprávy. Provoz vyžadoval 64bitový systém s více než 4 GB virtuální paměti. Když byla zranitelnost původně analyzována v roce 2005, Daniel J. Bernstein tvrdil, že předpoklad v kódu, že velikost alokovaného pole je vždy v rámci 32bitové hodnoty, je založen na skutečnosti, že nikdo neposkytuje gigabajty paměti každému procesu. Za posledních 15 let nahradily 64bitové systémy na serverech 32bitové systémy a množství dodávané paměti a šířka pásma sítě se dramaticky zvýšily.

Správci balíčků qmail vzali Bernsteinovu poznámku v úvahu a omezili dostupnou paměť při spouštění procesu qmail-smtpd (například v Debianu 10 je limit nastaven na 7 MB). Ale inženýři z Qualys zjistili, že to nestačí a kromě qmail-smtpd lze provést vzdálený útok na proces qmail-local, který zůstal ve všech testovaných balíčcích neomezený. Jako důkaz byl připraven exploit prototyp, který byl vhodný pro útok na balíček Debian pomocí qmailu ve výchozí konfiguraci.
Pro organizaci vzdáleného spuštění kódu během útoku server vyžaduje 4 GB volného místa na disku a 8 GB RAM.
Exploit vám umožňuje spouštět libovolné příkazy shellu s právy libovolného uživatele v systému, s výjimkou uživatelů root a systémových uživatelů, kteří nemají svůj vlastní podadresář v adresáři „/home“ (proces qmail-local je spuštěn s právy místního uživatele, kterému se doručení provádí).

Útok je proveden
odesláním velmi velké poštovní zprávy, včetně několika řádků záhlaví, o velikosti přibližně 4 GB a 576 MB. Zpracování takového řetězce v qmail-local má za následek přetečení celého čísla při pokusu o doručení zprávy místnímu uživateli. Přetečení celého čísla pak vede k přetečení vyrovnávací paměti při kopírování dat a možnosti přepsání paměťových stránek kódem libc. Manipulací s rozložením přenášených dat je také možné přepsat adresu funkce „open()“ a nahradit ji adresou funkce „system()“.

Dále se v procesu volání qmesearch() v qmail-local otevře soubor „.qmail-extension“ pomocí funkce open(), což vede ke skutečnému provedení funkce.
system(".qmail-extension"). Protože se však část souboru „rozšíření“ generuje na základě adresy příjemce (například „localuser-extension@localdomain“), mohou útočníci zařídit, aby byl příkaz odeslán zadáním uživatele „localuser-;command ;@localdomain” jako příjemce zprávy.

Během analýzy kódu byly také identifikovány dvě zranitelnosti v dodatečné opravě qmail-verify, která je součástí balíčku pro Debian. První zranitelnost (CVE-2020-3811) umožňuje obejít ověření e-mailové adresy a druhé (CVE-2020-3812) vede k úniku místních informací. Zejména první zranitelnost umožňuje obejít ověření správnosti adresy použité v exploitu k odeslání příkazu (ověření nefunguje pro adresy bez domény, jako je „localuser-;command;“). Druhou chybu zabezpečení lze použít ke kontrole přítomnosti souborů a adresářů v systému, včetně těch, které jsou přístupné pouze uživateli root (qmail-verify běží s právy root), prostřednictvím přímého volání místního handleru.

K vyřešení problému Bernstein doporučil spouštět procesy qmail s celkovým limitem dostupné paměti („softlimit -m12345678“), v takovém případě je problém zablokován. Jako alternativní způsob ochrany je také zmíněno omezení maximální velikosti zpracovávané zprávy prostřednictvím souboru „control/databytes“ (ve výchozím nastavení se nevytváří s výchozím nastavením, qmail zůstává zranitelný). Navíc „control/databytes“ nechrání před lokálními útoky ze strany uživatelů systému, protože limit je brán v úvahu pouze v qmail-smtpd.

Problém se týká balíčku netqmail, který je součástí repozitářů Debianu. Pro tento balíček byla připravena sada oprav, které eliminují jak staré zranitelnosti z roku 2005 (přidáním limitů pevné paměti do kódu funkce alloc()), tak nové problémy v qmail-verify. Odděleně připravený aktualizovaná verze opravy qmail-verify. Vývojáři větví notqmail připravili své vlastní záplaty k blokování starých problémů a také začali pracovat na odstranění všech možných přetečení celých čísel v kódu.

Zdroj: opennet.ru

Přidat komentář