Kritikal na kahinaan sa Exim na nagpapahintulot sa code na maisagawa sa server na may mga pribilehiyo sa ugat

Sa Exim mail server nakilala mapanganib kahinaan (CVE-2019-10149), na maaaring humantong sa remote code execution sa server na may mga root rights kapag nagpoproseso ng isang espesyal na ginawang kahilingan. Ang posibilidad ng pagsasamantala sa problema ay nabanggit sa mga bersyon mula 4.87 hanggang 4.91 kasama o kapag nagtatayo gamit ang EXPERIMENTAL_EVENT na opsyon.

Sa default na pagsasaayos, ang pag-atake ay maaaring isagawa nang walang mga hindi kinakailangang komplikasyon ng isang lokal na gumagamit, dahil inilapat ang "verify = recipient" ACL, na nagsasagawa ng mga karagdagang pagsusuri para sa mga panlabas na address. Maaaring maganap ang isang malayuang pag-atake kapag binago ang mga setting, gaya ng pagkilos bilang pangalawang MX para sa isa pang domain, pag-alis ng "verify=recipient" ACL, o ilang partikular na pagbabago sa local_part_suffix). Posible rin ang isang malayuang pag-atake kung magagawa ng umaatake na panatilihing bukas ang koneksyon sa server sa loob ng 7 araw (halimbawa, pagpapadala ng isang byte bawat minuto upang i-bypass ang isang timeout). Kasabay nito, posible na mayroong mas simpleng mga vector ng pag-atake para sa malayuang pagsasamantala sa problema.

Ang kahinaan ay sanhi ng maling pag-verify ng address ng tatanggap sa function na deliver_message() na tinukoy sa /src/deliver.c file. Sa pamamagitan ng pagmamanipula sa pag-format ng address, makakamit ng isang attacker ang pagpapalit ng kanyang data sa mga argumento ng isang command na tinatawag sa pamamagitan ng execv() function na may mga karapatan sa ugat. Ang operasyon ay hindi nangangailangan ng paggamit ng mga kumplikadong pamamaraan na ginagamit para sa buffer overflows o memory corruption; sapat na ang simpleng pagpapalit ng character.

Ang problema ay nauugnay sa paggamit ng construct para sa conversion ng address:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", bago->address));
deliver_domain = expand_string(
string_sprintf("${domain:%s}", bago->address));

Ang expand_string() function ay isang sobrang kumplikadong combiner, kabilang ang pagkilala sa command na "${run{command arguments}", na humahantong sa paglulunsad ng external handler. Kaya, para mag-atake sa loob ng SMTP session, kailangan lang ng lokal na user na magpadala ng command tulad ng 'RCPT TO β€œusername+${run{...}}@localhost”', kung saan ang localhost ay isa sa mga host mula sa local_domains list, at ang username ay ang pangalan ng isang umiiral na lokal na user.

Kung gumagana ang server bilang isang mail relay, sapat na upang malayuang ipadala ang command na 'RCPT SA "${run{...}}@relaydomain.com"', kung saan ang relaydomain.com ay isa sa mga host na nakalista sa relay_to_domains seksyon ng mga setting. Dahil hindi default ang Exim na i-drop ang privilege mode (deliver_drop_privilege = false), ang mga command na ipinasa sa pamamagitan ng "${run{...}}" ay isasagawa bilang root.

Kapansin-pansin na ang kahinaan ay inalis sa 4.92 release na inilabas noong Pebrero, nang hindi binibigyang-diin na ang pag-aayos ay maaaring humantong sa mga problema sa seguridad. Walang dahilan upang maniwala na mayroong sinadyang pagtatago ng kahinaan ng mga developer ng Exim, dahil ang problema ay naayos sa panahon ng pag-aayos kabiguan na nangyayari kapag ang mga maling address ay ipinadala, at ang kahinaan ay natukoy ng Qualys sa panahon ng pag-audit ng mga pagbabago sa Exim.

Ang isang pag-aayos para sa mga nakaraang bersyon na patuloy na ginagamit sa mga pamamahagi ay kasalukuyang magagamit lamang bilang patch. Ang mga corrective release para sa mga nakaraang sangay upang ayusin ang problema ay naka-iskedyul para sa ika-11 ng Hunyo. Handa na ang mga update sa package Debian, Ubuntu, openSUSE. Arch Linux ΠΈ Fedora Nagbibigay sila ng bersyon 4.92, kung saan hindi lilitaw ang problema. Problema sa RHEL at CentOS hindi madaling kapitan, dahil hindi kasama ang Exim sa kanilang regular na imbakan ng package.

Pinagmulan: opennet.ru

Magdagdag ng komento