Bezpečnostní výzkumníci z Qualys
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 (
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
Zdroj: opennet.ru