Malayo na mapagsamantalang kahinaan sa qmail mail server

Mga mananaliksik sa seguridad mula sa Qualys nagpakita pagkakataon pagsasamantala mga kahinaan sa qmail mail server, sikat noong 2005 (CVE-2005-1513), ngunit nanatiling hindi na-patch dahil sinabi ng may-akda ng qmail na hindi makatotohanang lumikha ng isang gumaganang pagsasamantala na maaaring magamit upang atakehin ang mga system sa default na pagsasaayos. Nakapaghanda si Qualys ng pagsasamantala na nagpapabulaan sa pagpapalagay na ito at nagpapahintulot sa isa na simulan ang pagpapatupad ng malayuang code sa server sa pamamagitan ng pagpapadala ng espesyal na idinisenyong mensahe.

Ang problema ay sanhi ng isang integer overflow sa stralloc_readyplus() function, na maaaring mangyari kapag nagpoproseso ng napakalaking mensahe. Nangangailangan ang operasyon ng 64-bit system na may higit sa 4GB ng virtual memory. Noong orihinal na nasuri ang kahinaan noong 2005, nangatuwiran si Daniel J. Bernstein na ang pagpapalagay sa code na ang laki ng inilalaang hanay ay palaging nasa loob ng 32-bit na halaga ay batay sa katotohanang walang nagbibigay ng gigabytes ng memorya sa bawat proseso. Sa nakalipas na 15 taon, pinalitan ng 64-bit system sa mga server ang 32-bit system, at ang dami ng ibinigay na memorya at bandwidth ng network ay tumaas nang husto.

Isinasaalang-alang ng mga tagapangasiwa ng qmail package ang tala ni Bernstein at nilimitahan ang magagamit na memorya kapag sinimulan ang proseso ng qmail-smtpd (halimbawa, ang Debian 10 ay nagtatakda ng limitasyon na 7MB). Ngunit nalaman ng mga inhinyero mula sa Qualys na ito ay hindi sapat at, bilang karagdagan sa qmail-smtpd, ang isang malayuang pag-atake ay maaaring isagawa sa qmail-local na proseso, na nanatiling hindi pinaghihigpitan sa lahat ng nasubok na mga pakete. Bilang patunay, isang pagsasamantalang prototype ang inihanda, na angkop para sa pag-atake sa Debian package na may qmail sa default na configuration.
Upang ayusin ang remote code execution sa panahon ng pag-atake, ang server ay nangangailangan ng 4GB ng libreng espasyo sa disk at 8GB ng RAM.
Ang pagsasamantala ay nagpapahintulot sa iyo na magpatakbo ng anumang mga utos ng shell na may mga karapatan ng sinumang gumagamit sa system, maliban sa mga gumagamit ng root at system na walang sariling subdirectory sa direktoryo ng "/home" (ang qmail-local na proseso ay inilunsad na may mga karapatan ng lokal na gumagamit kung kanino isinasagawa ang paghahatid).

Ang pag-atake ay isinasagawa
sa pamamagitan ng pagpapadala ng napakalaking mensaheng mail, kabilang ang ilang linya ng header, na may sukat na humigit-kumulang 4GB at 576MB. Ang pagpoproseso ng naturang string sa qmail-local ay nagreresulta sa isang integer overflow kapag sinusubukang maghatid ng mensahe sa lokal na user. Ang isang integer overflow ay humahantong sa isang buffer overflow kapag kinokopya ang data at ang posibilidad ng pag-overwrit ng mga pahina ng memorya gamit ang libc code. Sa pamamagitan ng pagmamanipula sa layout ng ipinadalang data, posible ring muling isulat ang address ng function na "open()", palitan ito ng address ng function na "system()".

Susunod, sa proseso ng pagtawag sa qmesearch() sa qmail-local, ang file na ".qmail-extension" ay binuksan sa pamamagitan ng open() function, na humahantong sa aktwal na pagpapatupad ng function.
system(".qmail-extension"). Ngunit dahil ang bahagi ng "extension" ng file ay nabuo batay sa address ng tatanggap (halimbawa, "localuser-extension@localdomain"), maaaring ayusin ng mga attacker na tumakbo ang command sa pamamagitan ng pagtukoy sa user na "localuser-;command ;@localdomain" bilang tatanggap ng mensahe.

Sa panahon ng pagsusuri ng code, natukoy din ang dalawang kahinaan sa karagdagang qmail-verify patch, na bahagi ng package para sa Debian. Unang kahinaan (CVE-2020-3811) ay nagbibigay-daan sa iyo na i-bypass ang pag-verify ng email address, at ang pangalawa (CVE-2020-3812) ay humahantong sa pagtagas ng lokal na impormasyon. Sa partikular, ang unang kahinaan ay nagpapahintulot sa iyo na i-bypass ang pag-verify ng kawastuhan ng address na ginamit sa pagsasamantala upang magpadala ng isang command (ang pag-verify ay hindi gumagana para sa mga address na walang domain, tulad ng "localuser-;command;"). Ang pangalawang kahinaan ay maaaring gamitin upang suriin ang pagkakaroon ng mga file at direktoryo sa system, kabilang ang mga naa-access lamang sa root (qmail-verify ay tumatakbo na may mga karapatan sa ugat), sa pamamagitan ng isang direktang tawag sa lokal na handler.

Upang malutas ang problema, inirerekomenda ni Bernstein ang pagpapatakbo ng mga proseso ng qmail na may kabuuang limitasyon sa magagamit na memorya ("softlimit -m12345678"), kung saan ang problema ay naharang. Bilang alternatibong paraan ng proteksyon, ang paglilimita sa maximum na laki ng naprosesong mensahe sa pamamagitan ng "control/databytes" na file ay binanggit din (bilang default ay hindi ito nilikha gamit ang mga default na setting na qmail ay nananatiling mahina). Bilang karagdagan, ang "control/databytes" ay hindi nagpoprotekta laban sa mga lokal na pag-atake mula sa mga user ng system, dahil ang limitasyon ay isinasaalang-alang lamang ng qmail-smtpd.

Ang problema ay nakakaapekto sa pakete netqmail, kasama sa mga repositoryo ng Debian. Isang set ng mga patch ang inihanda para sa package na ito, na inaalis ang parehong mga lumang kahinaan mula 2005 (sa pamamagitan ng pagdaragdag ng mga limitasyon ng hard memory sa alloc() function code) at mga bagong problema sa qmail-verify. Hiwalay nakahanda na-update na bersyon ng qmail-verify patch. Mga developer mga sanga hindiqmail naghanda ng sarili nilang mga patch para harangan ang mga lumang problema, at nagsimula ring magtrabaho para alisin ang lahat ng posibleng integer overflow sa code.

Pinagmulan: opennet.ru

Magdagdag ng komento