A biztonsági kutatók a Qualys cégtől lehetőség sebezhetőségek a qmail levelező szerverben, már 2005 óta (CVE-2005-1513) fennáll, de azóta nem javították, mivel a qmail szerzője azt állította, hogy irreális létrehozni egy működő exploitot, amelyet a rendszerek alapértelmezett konfigurációban való támadására lehetne használni. A Qualys szakembereinek sikerült egy exploitet készíteni, amely megcáfolja ezt a feltételezést és lehetővé teszi a kód távoli végrehajtását a szerveren egy különösen formázott üzenet elküldésével.
A probléma egy egész szám túlcsordulásból ered a stralloc_readyplus() függvényben, amely egy nagyon nagy üzenet feldolgozása során léphet fel. A kihasználáshoz 64 bites rendszerre volt szükség, amely rendelkezik 4GB-nál nagyobb virtuális memóriával. A sebezhetőség eredeti elemzésekor 2005-ben Daniel Bernstein azt állította, hogy a kódban lévő feltételezés, miszerint a lefoglalt tömb mérete mindig 32 bites értékben van, azon alapul, hogy senki nem ad gigabájt memóriát minden egyes folyamatnak. Az elmúlt 15 évben a 64 bites rendszerek a szervereken kiszorították a 32 bites változatokat, a biztosítandó memória mennyisége drámaian megnőtt, és a hálózati sávszélesség is jelentősen nőtt.
A qmailhez kapcsolódó csomagok figyelembe vették Bernstein megjegyzését, és a qmail-smtpd folyamat elindításakor korlátozták a rendelkezésre álló memóriát (például Debian 10 alatt 7MB limit van beállítva). De a Qualys mérnökei kiderítették, hogy ez nem elegendő, és a qmail-smtpd mellett egy távoli támadás a qmail-local folyamat ellen is végrehajtható, amely az összes ellenőrzött csomagban korlátlan maradt. Bizonyítékául egy prototípust készítettek, amely alkalmas a Debian csomagban található qmail alapértelmezett konfigurációjának támadására.
A kód távoli végrehajtásának megszervezéséhez 4GB szabad lemezterület és 8GB RAM szükséges a szerveren.
Az exploit lehetővé teszi bármilyen shell parancs futtatását bármely felhasználó jogainak megfelelően a rendszeren, kivéve a rootot és azokat a rendszerszintű felhasználókat, akiknek nincs saját almappa a „/home” könyvtárban (a qmail-local folyamat helyi felhasználói jogokkal fut, amelyhez a kézbesítést végzik).
A támadás végrehajtása
egy 4GB és 576MB méretű, több sorból álló e-mail üzenet elküldésével. Az ilyen sor feldolgozása a qmail-local-ban egész szám túlcsorduláshoz vezet, amikor megpróbálják kézbesíteni az üzenetet egy helyi felhasználónak. Az egész szám túlcsordulás ezután puffer túlcsorduláshoz vezet az adatok másolása közben, és lehetőséget biztosít a libc kóddal rendelkező memóriaoldalak felülírására. Az átvitt adatok manipulációjával lehetséges felülírni az 'open()' függvény címét, helyette a 'system()' függvény címére.
Ezután, a qmesearch() qmail-local-beli hívása közben a '.qmail-extension' fájl megnyitása történik az open() függvény használatával, ami a tényleges függvény elindításához vezet.
system(«.qmail-extension»). Azonban mivel a 'extension' fájl egy része a címzett címéből képződik (például 'localuser-extension@localdomain'), a támadók parancsot tudnak küldeni a végrehajtásra az 'localuser-;command;@localdomain' címzett megadásával.
A kód elemzése során két sérülékenységet is felfedeztek a qmail-verify kiegészítő patchekben, amely a Debian csomag része. Az első sérülékenység () lehetővé teszi az e-mail cím ellenőrzésének megkerülését, a második () pedig helyi információk kiszivárgásához vezet. Különösen az első sérülékenység lehetővé teszi az ellenőrzés megkerülését az expozíció során használt cím helyessége tekintetében (az ellenőrzés nem működik olyan címek esetén, amelyek nem rendelkeznek doménnel, mint például 'localuser-;command;'). A második sérülékenységet a rendszer fájljainak és könyvtárainak meglétének ellenőrzésére is fel lehet használni, még a root által elérhető fájlok esetében is (a qmail-verify root jogokkal fut).
A probléma megkerülésére Bernstein azt javasolta, hogy a qmail folyamatokat úgy indítsák, hogy közös memóriakorlátozást állítanak be ('softlimit -m12345678'), és ez esetben a probléma blokkolva van. Alternatív védelmi módnak említik a feldolgozott üzenet maximális méretének korlátozását a 'control/databytes' fájlon keresztül (alapértelmezett beállításokkal nem jön létre, így a qmail sebezhető marad). Ezen kívül a 'control/databytes' nem véd a helyi támadásokkal szemben a rendszer felhasználói részéről, mivel a korlátozás csak a qmail-smtpd-ban érvényes.
A probléma a csomagot érinti , amely a Debian adattárakban található. Ehhez a csomaghoz egy patch-csomag készült, amely eltünteti a 2005-ös régi sebezhetőségeket (a memóriára vonatkozó szigorú korlátok kódba történő beépítésével az alloc() funkcióban), valamint új problémákat a qmail-verify vonatkozásában. Egyedileg frissített verzióját a qmail-verify patch-nek. A fejlesztők elkészítették saját patch-eiket a régi problémák blokkolására, és megkezdték a lehetséges egész számok túltöltésének kiküszöbölését a kódban.
Forrás: opennet.ru
