„Exim“ pašto serveryje
Pagal numatytąją konfigūraciją ataka gali būti įvykdyta be nereikalingų vietinio vartotojo komplikacijų, nes taikomas ACL „verify = recipient“, kuris atlieka papildomus išorinių adresų patikrinimus. Nuotolinė ataka gali įvykti, kai pakeičiami nustatymai, pvz., veikia kaip antrinis MX kitam domenui, pašalinamas „verify=recipient“ ACL arba tam tikri local_part_suffix pakeitimai). Nuotolinė ataka taip pat galima, jei užpuolikas sugeba palaikyti ryšį su serveriu atidarytą 7 dienas (pavyzdžiui, siunčia vieną baitą per minutę, kad apeitų skirtąjį laiką). Tuo pačiu metu gali būti, kad yra paprastesnių atakų vektorių, skirtų nuotoliniam problemos išnaudojimui.
Pažeidžiamumą sukelia neteisingas gavėjo adreso patikrinimas naudojant /src/deliver.c faile apibrėžtą funkciją delivery_message(). Manipuliuodamas adreso formatavimu, užpuolikas gali pakeisti savo duomenis į komandos, iškviestos per funkciją execv() su root teisėmis, argumentais. Veikimui nereikia naudoti sudėtingų metodų, naudojamų buferio perpildymui ar atminties sugadinimui; pakanka paprasto simbolio pakeitimo.
Problema susijusi su konstrukcijos naudojimu adreso konvertavimui:
pristatyti_localpart = expand_string(
string_sprintf("${local_part:%s}", naujas->adresas));
pristatymo_domenas = expand_string(
string_sprintf("${domenas:%s}", naujas->adresas));
Funkcija expand_string() yra pernelyg sudėtingas kombinatorius, įskaitant komandos „${run{command arguments}“ atpažinimą, dėl kurio paleidžiama išorinė tvarkytoja. Taigi, norėdamas atakuoti SMTP seanso metu, vietiniam vartotojui tereikia nusiųsti komandą, pvz., „RCPT“ Į „username+${run{...}}@localhost“, kur „localhost“ yra vienas iš prieglobų iš sąrašo „local_domains“, o vartotojo vardas yra esamo vietinio vartotojo vardas.
Jei serveris veikia kaip pašto perdavimas, pakanka nuotoliniu būdu išsiųsti komandą 'RCPT TO "${run{...}}@relaydomain.com"', kur relaydomain.com yra vienas iš relay_to_domains nurodytų prieglobų. nustatymų skyrių. Kadangi Exim pagal numatytuosius nustatymus nepaleidžia privilegijų režimo (deliver_drop_privilege = false), komandos, perduodamos per "${run{...}}", bus vykdomos kaip root.
Pažymėtina, kad pažeidžiamumas buvo
Ankstesnių versijų, kurios ir toliau naudojamos platinimuose, pataisymas šiuo metu pasiekiamas tik kaip
Šaltinis: opennet.ru