Bezpečnostní výskumníci z Qualys
Problém je spôsobený pretečením celého čísla vo funkcii stralloc_readyplus(), ku ktorému môže dôjsť pri spracovaní veľmi veľkej správy. Prevádzka si vyžadovala 64-bitový systém s viac ako 4 GB virtuálnej pamäte. Keď bola táto zraniteľnosť pôvodne analyzovaná v roku 2005, Daniel J. Bernstein tvrdil, že predpoklad v kóde, že veľkosť alokovaného poľa je vždy v rámci 32-bitovej hodnoty, je založený na skutočnosti, že nikto neposkytuje gigabajty pamäte každému procesu. Za posledných 15 rokov 64-bitové systémy na serveroch nahradili 32-bitové systémy a množstvo dodávanej pamäte a šírka pásma siete sa dramaticky zvýšili.
Správcovia balíka qmail vzali Bernsteinovu poznámku do úvahy a pri spustení procesu qmail-smtpd obmedzili dostupnú pamäť (napríklad v Debiane 10 je limit nastavený na 7 MB). Inžinieri z Qualys však zistili, že to nestačí a okrem qmail-smtpd je možné vykonať vzdialený útok na proces qmail-local, ktorý zostal neobmedzený vo všetkých testovaných balíkoch. Ako dôkaz bol pripravený exploit prototyp, ktorý bol vhodný na napadnutie balíka Debian pomocou qmailu v predvolenej konfigurácii.
Na organizáciu vzdialeného spustenia kódu počas útoku server vyžaduje 4 GB voľného miesta na disku a 8 GB RAM.
Exploit vám umožňuje spúšťať akékoľvek príkazy shellu s právami ktoréhokoľvek používateľa v systéme, s výnimkou používateľov root a systémových používateľov, ktorí nemajú svoj vlastný podadresár v adresári „/home“ (proces qmail-local sa spúšťa s právami miestneho používateľa, ktorému sa doručuje).
Útok sa uskutoční
prostredníctvom odoslania veľmi veľkej e-mailovej správy, vrátane niekoľkých riadkov hlavičky, s veľkosťou približne 4 GB a 576 MB. Spracovanie takéhoto reťazca v qmail-local má za následok pretečenie celého čísla pri pokuse o doručenie správy lokálnemu používateľovi. Pretečenie celého čísla potom vedie k pretečeniu vyrovnávacej pamäte pri kopírovaní údajov a možnosti prepísania pamäťových stránok kódom libc. Manipuláciou s rozložením prenášaných údajov je tiež možné prepísať adresu funkcie „open()“ a nahradiť ju adresou funkcie „system()“.
Ďalej, v procese volania qmesearch() v qmail-local, sa pomocou funkcie open() otvorí súbor „.qmail-extension“, čo vedie k skutočnému vykonaniu funkcie
system(".qmail-extension"). Ale keďže časť súboru „extension“ sa generuje na základe adresy príjemcu (napríklad „localuser-extension@localdomain“), útočníci môžu zariadiť odoslanie príkazu tak, že zadajú používateľa „localuser-;command ;@localdomain” ako príjemca správy.
Počas analýzy kódu boli tiež identifikované dve zraniteľnosti v dodatočnej oprave qmail-verify, ktorá je súčasťou balíka pre Debian. Prvá zraniteľnosť (
Aby sa problém vyriešil, Bernstein odporučil spustiť procesy qmail s celkovým limitom dostupnej pamäte („softlimit -m12345678“), v takom prípade je problém zablokovaný. Ako alternatívny spôsob ochrany je uvedené aj obmedzenie maximálnej veľkosti spracovávanej správy prostredníctvom súboru „control/databytes“ (v predvolenom nastavení sa nevytvára s predvolenými nastaveniami qmail zostáva zraniteľný). Navyše „control/databytes“ nechráni pred lokálnymi útokmi zo strany používateľov systému, pretože limit berie do úvahy iba qmail-smtpd.
Problém sa týka balíka
Zdroj: opennet.ru