Vzdialene zneužiteľná zraniteľnosť v poštovom serveri qmail

Bezpečnostní výskumníci z Qualys show príležitosť prevádzkové zraniteľnosti v poštovom serveri qmail, slávny ešte v roku 2005 (CVE-2005-1513), ale zostal neopravený, pretože autor qmailu tvrdil, že je nereálne vytvoriť funkčný exploit, ktorý by sa dal použiť na útoky na systémy v predvolenej konfigurácii. Qualys dokázal pripraviť exploit, ktorý vyvracia tento predpoklad a umožňuje spustiť vzdialené spustenie kódu na serveri odoslaním špeciálne navrhnutej správy.

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ť (CVE-2020 3811,) vám umožňuje obísť overenie e-mailovej adresy a druhé (CVE-2020 3812,) vedie k úniku miestnych informácií. Najmä prvá zraniteľnosť vám umožňuje obísť overenie správnosti adresy použitej v exploite na odoslanie príkazu (overenie nefunguje pre adresy bez domény, ako napríklad „localuser-;command;“). Druhú zraniteľnosť možno použiť na kontrolu prítomnosti súborov a adresárov v systéme, vrátane tých, ktoré sú prístupné iba pre root (qmail-verify beží s právami root), prostredníctvom priameho volania lokálnemu handleru.

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 netqmail, ktorý je súčasťou repozitárov Debianu. Pre tento balík bola pripravená sada opráv, ktorá odstraňuje staré zraniteľnosti z roku 2005 (pridaním limitov pevnej pamäte do kódu funkcie alloc()) a nové problémy v qmail-verify. Oddelene pripravené aktualizovaná verzia opravy qmail-verify. Vývojári pobočky notqmail pripravili svoje vlastné záplaty na blokovanie starých problémov a tiež začali pracovať na odstránení všetkých možných pretečení celých čísel v kóde.

Zdroj: opennet.ru

Pridať komentár