En Exim-poŝtservilo
En la defaŭlta agordo, la atako povas esti farita sen nenecesaj komplikaĵoj de loka uzanto, ĉar la "kontrolu = ricevanto" ACL estas aplikata, kiu faras pliajn kontrolojn por eksteraj adresoj. Fora atako povas okazi kiam agordoj estas ŝanĝitaj, kiel agado kiel sekundara MX por alia domajno, forigante la "verify=ricevanto" ACL, aŭ certajn ŝanĝojn al local_part_suffix). Fora atako ankaŭ estas ebla se la atakanto kapablas teni la konekton al la servilo malfermita dum 7 tagoj (ekzemple, sendante unu bajton por minuto por preterpasi tempon). Samtempe, eblas, ke ekzistas pli simplaj atakvektoroj por fora ekspluato de la problemo.
La vundebleco estas kaŭzita de malĝusta konfirmo de la adreso de la ricevanto en la funkcio deliver_message() difinita en la dosiero /src/deliver.c. Manipulante la adresformaton, atakanto povas atingi la anstataŭigon de siaj datumoj en la argumentojn de komando vokita per la funkcio execv() kun radikrajtoj. Operacio ne postulas la uzon de kompleksaj teknikoj uzitaj por bufrosuperfluado aŭ memorkorupto; simpla karakteranstataŭigo estas sufiĉa.
La problemo estas rilata al la uzo de la konstruo por adreskonverto:
live_localpart = vast_string(
string_sprintf("${loka_parto:%s}", nova->adreso));
live_domain = vast_string(
string_sprintf("${domajno:%s}", nova->adreso));
La funkcio expand_string() estas tro komplika kombinilo, inkluzive de rekono de la komando "${run{command arguments}", kiu kondukas al lanĉo de ekstera prizorganto. Tiel, por ataki ene de SMTP-sesio, loka uzanto nur bezonas sendi komandon kiel 'RCPT TO “uzantnomo+${run{...}}@localhost”', kie localhost estas unu el la gastigantoj de la listo de lokaj_domajnoj, kaj uzantnomo estas la nomo de ekzistanta loka uzanto.
Se la servilo funkcias kiel poŝta relajso, sufiĉas malproksime sendi la komandon 'RCPT AL "${run{...}}@relaydomain.com"', kie relaydomain.com estas unu el la gastigantoj listigitaj en la relay_to_domains. sekcio de agordoj. Ĉar Exim ne defaŭlte faligi privilegian reĝimon (deliver_drop_privilege = false), ordonoj pasigitaj per "${run{...}}" estos ekzekutitaj kiel radiko.
Estas rimarkinde, ke la vundebleco estis
Riparo por antaŭaj versioj, kiuj daŭre estas uzataj en distribuoj, estas nuntempe nur disponebla kiel
fonto: opennet.ru