Krityske kwetsberens yn Exim wêrtroch koade kin wurde útfierd op 'e tsjinner mei root-privileges

Yn Exim mail tsjinner identifisearre kritysk kwetsberens (CVE-2019-10149), wat kin liede ta útfiering fan koade op ôfstân op 'e tsjinner mei rootrjochten by it ferwurkjen fan in spesjaal makke fersyk. De mooglikheid fan eksploitaasje fan it probleem waard opmurken yn ferzjes fan 4.87 oant 4.91 ynklusyf of by it bouwen mei de EXPERIMENTAL_EVENT opsje.

Yn 'e standertkonfiguraasje kin de oanfal sûnder ûnnedige komplikaasjes útfierd wurde troch in lokale brûker, om't de "ferifiearje = ûntfanger" ACL wurdt tapast, dy't ekstra kontrôles foar eksterne adressen útfiert. In oanfal op ôfstân kin foarkomme as ynstellings wizige wurde, lykas fungearje as in sekundêre MX foar in oar domein, it fuortsmiten fan de "ferifiearje=ûntfanger" ACL, of bepaalde wizigingen oan local_part_suffix). In oanfal op ôfstân is ek mooglik as de oanfaller by steat is om de ferbining mei de tsjinner iepen te hâlden foar 7 dagen (bygelyks ien byte per minút ferstjoere om in time-out te omgean). Tagelyk is it mooglik dat d'r ienfâldiger oanfalvektoren binne foar eksploitaasje op ôfstân fan it probleem.

De kwetsberens wurdt feroarsake troch ferkearde ferifikaasje fan it adres fan de ûntfanger yn de funksje deliver_message() definiearre yn it /src/deliver.c-bestân. Troch it manipulearjen fan de adres opmaak, in oanfaller kin berikke de ferfanging fan syn gegevens yn de arguminten fan in kommando neamd troch de execv () funksje mei root rjochten. Operaasje fereasket net it gebrûk fan komplekse techniken dy't brûkt wurde foar bufferoverflows of ûnthâldkorrupsje; ienfâldige karakterferfanging is genôch.

It probleem is relatearre oan it gebrûk fan it konstruksje foar adreskonverzje:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->adres));
leverje_domein = útwreidzje_string(
string_sprintf("${domein:%s}", nij->adres));

De funksje expand_string() is in te komplisearre kombinator, ynklusyf it werkennen fan it kommando "${run{command arguminten}", wat liedt ta de lansearring fan in eksterne handler. Sa, om binnen in SMTP-sesje oan te fallen, hoecht in lokale brûker allinich in kommando te stjoeren lykas 'RCPT TO "brûkersnamme+${run{...}}@localhost"', wêr't localhost ien fan 'e hosts is fan 'e list local_domains, en brûkersnamme is de namme fan in besteande lokale brûker.

As de tsjinner wurket as e-postrelay, is it genôch om op ôfstân it kommando 'RCPT TO "${run{...}}@relaydomain.com"' te stjoeren, wêrby't relaydomain.com ien fan 'e hosts is neamd yn 'e relay_to_domains ynstellings seksje. Om't Exim net standert is om de privileezjemodus te fallen (deliver_drop_privilege = false), wurde kommando's trochjûn fia "${run{...}}" útfierd as root.

It is opmerklik dat de kwetsberens wie eliminearre yn 'e 4.92-release útbrocht yn febrewaris, sûnder te beklamjen dat de fix kin liede ta feiligensproblemen. D'r is gjin reden om te leauwen dat d'r in opsetlike ferburgenheid fan 'e kwetsberens wie troch de Exim-ûntwikkelders, om't it probleem waard reparearre tidens korreksjes falen dy't optreedt as ferkearde adressen wurde oerdroegen, en de kwetsberens waard identifisearre troch Qualys tidens in kontrôle fan feroarings yn Exim.

In fix foar eardere ferzjes dy't bliuwend wurde brûkt yn distribúsjes is op it stuit allinich beskikber as patch. Korrigearjende releases foar eardere tûken om it probleem op te lossen binne pland foar 11 juny. Pakket updates binne klear foar Debian, ubuntu, openSUSE. Arch Linux и Fedora Se leverje ferzje 4.92, wêryn it probleem net ferskynt. RHEL en CentOS probleem net gefoelich, om't Exim net is opnommen yn har reguliere pakketopslach.

Boarne: opennet.ru

Add a comment