Távolról kihasználható biztonsági rés a qmail levelezőszerveren

Biztonsági kutatók a Qualystól megmutatta alkalom kizsákmányolás sérülékenységek a qmail levelezőszerveren, híres még 2005-ben (CVE-2005-1513), de nem javították, mert a qmail szerzője azzal érvelt, hogy irreális olyan működő exploit létrehozása, amely az alapértelmezett konfigurációban használható rendszerek megtámadására. A Qualys képes volt egy olyan exploitot készíteni, amely megcáfolja ezt a feltételezést, és lehetővé teszi távoli kódfuttatás kezdeményezését a szerveren egy speciálisan tervezett üzenet elküldésével.

A problémát a stralloc_readyplus() függvény egész szám túlcsordulása okozza, amely nagyon nagy üzenet feldolgozása során fordulhat elő. A működéshez 64 bites rendszerre volt szükség, több mint 4 GB virtuális memóriával. Amikor a sérülékenységet 2005-ben eredetileg elemezték, Daniel J. Bernstein azzal érvelt, hogy a kódban szereplő feltételezés, miszerint a lefoglalt tömb mérete mindig 32 bites értéken belül van, azon a tényen alapul, hogy senki sem biztosít gigabájt memóriát az egyes folyamatokhoz. Az elmúlt 15 évben a szervereken a 64 bites rendszerek váltották fel a 32 bites rendszereket, és a rendelkezésre álló memória mennyisége és a hálózati sávszélesség drámaian megnőtt.

A qmail csomagkarbantartók figyelembe vették Bernstein megjegyzését, és korlátozták a rendelkezésre álló memóriát a qmail-smtpd folyamat indításakor (például a Debian 10-ben a korlát 7 MB). A Qualys mérnökei azonban úgy találták, hogy ez nem elég, és a qmail-smtpd mellett távoli támadás is végrehajtható a qmail-local folyamat ellen, amely minden tesztelt csomagban korlátlan maradt. Ennek bizonyítékaként egy exploit prototípus készült, amely alkalmas volt a Debian csomag megtámadására a qmail-lel az alapértelmezett konfigurációban.
A távoli kódvégrehajtás megszervezéséhez támadás során a szervernek 4 GB szabad lemezterületre és 8 GB RAM-ra van szüksége.
Az exploit lehetővé teszi bármely shell parancs futtatását a rendszer bármely felhasználójának jogaival, kivéve azokat a root és rendszerfelhasználókat, akiknek nincs saját alkönyvtáruk a „/home” könyvtárban (a qmail-local folyamat a jogokkal indul a helyi felhasználóé, akinek a szállítást végzik).

A támadást végrehajtják
egy nagyon nagy, több fejlécsort is tartalmazó levél elküldésével, amelyek mérete körülbelül 4 GB és 576 MB. Egy ilyen karakterlánc feldolgozása a qmail-local alkalmazásban egész szám túlcsordulást eredményez, amikor megpróbál üzenetet kézbesíteni a helyi felhasználónak. Az egész szám túlcsordulása ezután puffertúlcsorduláshoz vezet az adatok másolásakor, és lehetővé teszi a memórialapok libc kóddal történő felülírását. A továbbított adatok elrendezésének manipulálásával lehetőség van az „open()” függvény címének átírására is, a „system()” függvény címére cserélve.

Ezután a qmesearch() qmail-local-ban történő meghívása során a „.qmail-extension” fájl az open() függvényen keresztül nyílik meg, ami a függvény tényleges végrehajtásához vezet.
system(".qmail-extension"). Mivel azonban a fájl „kiterjesztés” része a címzett címe alapján jön létre (például „localuser-extension@localdomain”), a támadók a „localuser-;command” felhasználó megadásával elintézhetik a parancs elküldését. ;@localdomain” mint az üzenet címzettje.

A kódelemzés során két sebezhetőséget is azonosítottak a további qmail-verify javításban, amely a Debian csomag részét képezi. Első sebezhetőség (CVE-2020 3811-) lehetővé teszi az e-mail cím ellenőrzésének megkerülését, a második (CVE-2020 3812-) helyi információk kiszivárgásához vezet. Az első sérülékenység különösen lehetővé teszi, hogy megkerülje az exploitban használt cím helyességének ellenőrzését a parancs küldéséhez (az ellenőrzés nem működik tartomány nélküli címeknél, például „localuser-;command;”). A második sérülékenység a fájlok és könyvtárak rendszeren való ellenőrzésére használható, beleértve azokat is, amelyek csak a root számára hozzáférhetők (a qmail-verify root jogokkal fut), a helyi kezelő közvetlen hívásával.

A probléma megkerülése érdekében Bernstein azt javasolta, hogy a qmail folyamatokat a rendelkezésre álló memória teljes korlátjával ("softlimit -m12345678") futtassák, ebben az esetben a probléma blokkolva van. Alternatív védelmi módszerként említik a feldolgozott üzenet maximális méretének korlátozását a „control/databytes” fájlon keresztül (alapértelmezés szerint nem jön létre az alapértelmezett beállításokkal, a qmail sebezhető marad). Ezenkívül a „control/databytes” nem véd a rendszerfelhasználók helyi támadásai ellen, mivel a korlátot csak a qmail-smtpd veszi figyelembe.

A probléma a csomagot érinti netqmail, szerepel a Debian tárolókban. Ehhez a csomaghoz készült egy sor javítás, amely kiküszöböli a régi, 2005-ös biztonsági réseket (az alloc() függvénykód merevmemória-korlátozásával), valamint a qmail-verify új problémáit. Külön előkészített a qmail-verify javítás frissített verziója. Fejlesztők ágak notqmail elkészítették saját javításaikat a régi problémák blokkolására, és elkezdtek dolgozni a kód minden lehetséges egész túlcsordulásán.

Forrás: opennet.ru

Hozzászólás