Kritika vundebleco en Exim kiu permesas kodon esti efektivigita sur la servilo kun radikaj privilegioj

En Exim-poŝtservilo identigita kritikaj vundebleco (CVE-2019-10149), kiu povas konduki al fora koda ekzekuto sur la servilo kun radikrajtoj dum prilaborado de speciale kreita peto. La ebleco de ekspluatado de la problemo estis notita en versioj de 4.87 ĝis 4.91 inkluzive aŭ dum konstruado kun la opcio EXPERIMENTAL_EVENT.

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 eliminita en la eldono 4.92 publikigita en februaro, sen emfazi, ke la solvo povus konduki al sekurecaj problemoj. Ne estas kialo kredi, ke estis intenca kaŝado de la vundebleco fare de la programistoj de Exim, ĉar la problemo estis riparita dum korektoj fiasko, kiu okazas kiam malĝustaj adresoj estas transdonitaj, kaj la vundebleco estis identigita de Qualys dum revizio de ŝanĝoj en Exim.

Riparo por antaŭaj versioj, kiuj daŭre estas uzataj en distribuoj, estas nuntempe nur disponebla kiel flikaĵo. Korektigaj eldonoj por antaŭaj branĉoj por ripari la problemon estas planitaj por la 11-a de junio. Pakaj ĝisdatigoj estas pretaj por Debian, ubuntu, openSUSE. Arch Linukso и Fedora Ili provizas version 4.92, en kiu la problemo ne aperas. Problemo de RHEL kaj CentOS ne susceptible, ĉar Exim ne estas inkluzivita en ilia regula pakdeponejo.

fonto: opennet.ru

Aldoni komenton