Sa Exim mail server
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
Ang isang pag-aayos para sa mga nakaraang bersyon na patuloy na ginagamit sa mga pamamahagi ay kasalukuyang magagamit lamang bilang
Pinagmulan: opennet.ru