Bezpečnostní výzkumníci ze společnosti Qualys možnost zranitelnosti v poštovním serveru qmail, již od roku 2005 (CVE-2005-1513), ale zůstávala neopravená, protože autor qmail tvrdil, že vytvoření funkčního exploitatu, který by mohl být použit pro útoky na systémy s výchozí konfigurací, je nerealistické. V Qualys se podařilo připravit exploit, který toto tvrzení vyvrací a umožňuje začít vzdálené spuštění kódu na serveru prostřednictvím zaslání speciálně upravené zprávy.
Problém je způsoben celým přetečením v funkci stralloc_readyplus(), které může nastat při zpracování velmi velké zprávy. K pro využití zranitelnosti byla vyžadována 64bitová architektura se size paměti větší než 4 GB. Při prvotním rozboru zranitelnosti v roce 2005 Daniel Bernstein tvrdil, že předpoklad v kódu, podle kterého velikost alokovaného pole vždy spadá do 32bitové hodnoty, vychází z toho, že nikdo neposkytuje gigabyty paměti každému procesu. Během posledních 15 let 64bitové systémy na serverech vytlačily 32bitové, dodávané objemy paměti dramaticky vzrostly a šířka pásma sítí se zvýšila.
Doprovodné balíčky qmail zohlednily poznámku Bernsteina a při spuštění procesu qmail-smtpd omezily dostupnou paměť (například v Debianu 10 je limit nastaven na 7 MB). Ale inženýři ze společnosti Qualys zjistili, že to nestačí, a kromě qmail-smtpd může být vzdálený útok proveden na proces qmail-local, který ve všech zkontrolovaných balících zůstal neomezen. Jako důkaz byl připraven prototyp exploit, vhodný k útoku na balík qmail dodávaný s Debianem v výchozí konfiguraci.
Pro realizaci vzdáleného spuštění kódu během útoku je na serveru potřeba mít 4 GB volného místa na disku a 8 GB RAM.
Exploit umožňuje spustit libovolné shellové příkazy s právy jakéhokoli uživatele v systému, kromě root a systémových uživatelů, kteří nemají svůj podadresář v adresáři "/home" (proces qmail-local je spuštěn s právy lokálního uživatele, jemuž se provádí doručení).
Útok se provádí
při odesílání velmi velké e-mailové zprávy, která zahrnuje několik řádků v hlavičce, o velikosti přibližně 4GB a 576MB. Zpracování takového řetězce v qmail-local způsobuje 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 následně vede k přetečení bufferu při kopírování dat a možnosti přepsání oblastí paměti s kódem libc. Přes manipulaci s uspořádáním předávaných dat je možné také přepsat adresu funkce „open()“ a nahradit ji adresou funkce „system()“.
Dále, během volání qmesearch() v qmail-local dochází k otevření souboru „.qmail-extension“ přes funkci open(), což vede k faktickému spuštění funkce
system(„.qmail-extension“). Ale protože část souboru „extension“ je tvořena na základě adresy příjemce (například „localuser-extension@localdomain“), útočníci mohou zorganizovat přenos příkazu ke spuštění tím, že jako příjemce zprávy uvedou uživatele „localuser-;command;@localdomain“.
Při analýze kódu byly také odhaleny dvě zranitelnosti v dodatečném patchi qmail-verify, který je součástí balíčku pro Debian. První zranitelnost () umožňuje obejít ověření e-mailové adresy, a druhá () vede k úniku místních informací. Konkrétně první zranitelnost umožňuje obejít kontrolu správnosti adresy, použité v exploitaci pro přenos příkazu (kontrola nefunguje pro adresy bez domény, jako je „localuser-;command;“). Druhá zranitelnost může být využita k ověření existence souborů a adresářů v systému, včetně těch, které jsou přístupné pouze pro root (qmail-verify běží s právy root), prostřednictvím přímého přístupu k místnímu zpracovateli.
Aby se problém vyřešil, doporučil Bernstein spouštět procesy qmail s nastavením společného limitu na dostupnou paměť („softlimit -m12345678“), a v tomto případě je problém zablokován. Jako alternativní způsob ochrany se také zmiňuje omezení maximální velikosti zpracovávané zprávy přes soubor „control/databytes“ (při výchozích nastaveních qmail se ve výchozím nastavení nevytváří, takže zůstává zranitelný). Kromě toho „control/databytes“ nechrání před místními útoky ze strany uživatelů systému, protože omezení se zohledňuje pouze v qmail-smtpd.
Problém se týká balíčku , který je součástí repozitářů Debian. Pro tento balíček byl připraven soubor patchů, který odstraňuje jak staré zranitelnosti z roku 2005 (přidáním pevných limitů na paměť do funkce alloc()), tak nové problémy v qmail-verify. Zvlášť aktualizovaná verze patchu qmail-verify. Vývojáři připravili své patche pro blokaci starých problémů a zahájili práci na odstranění všech možných celočíselných přetečení v kódu.
Zdroj: opennet.ru
