Biztonsági kutatók a Qualystól
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 (
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
Forrás: opennet.ru