Kritiese kwesbaarheid in Exim wat toelaat dat kode op 'n bediener as wortel uitgevoer word

In Exim-posbediener geïdentifiseer krities kwesbaarheid (CVE-2019-10149), wat kan lei tot die uitvoering van afgeleë kode op die bediener met wortelregte wanneer 'n spesiaal vervaardigde versoek verwerk word. Die moontlikheid van ontginning van die probleem is opgemerk in weergawes van 4.87 tot 4.91 ingesluit of wanneer gebou word met die EXPERIMENTAL_EVENT opsie.

In die verstekkonfigurasie kan die aanval sonder onnodige komplikasies deur 'n plaaslike gebruiker uitgevoer word, aangesien die "verifieer = ontvanger" ACL toegepas word, wat addisionele kontroles vir eksterne adresse uitvoer. 'n Afgeleë aanval kan plaasvind wanneer instellings verander word, soos om as 'n sekondêre MX vir 'n ander domein op te tree, die verwydering van die "verify=recipient" ACL, of sekere veranderinge aan local_part_suffix). 'n Afgeleë aanval is ook moontlik as die aanvaller in staat is om die verbinding met die bediener oop te hou vir 7 dae (byvoorbeeld deur een greep per minuut te stuur om 'n uitteltyd te omseil). Terselfdertyd is dit moontlik dat daar eenvoudiger aanvalsvektore is vir afstandontginning van die probleem.

Die kwesbaarheid word veroorsaak deur verkeerde verifikasie van die ontvanger se adres in die delivery_message()-funksie wat in die /src/deliver.c-lêer gedefinieer is. Deur die adresformatering te manipuleer, kan 'n aanvaller die vervanging van sy data in die argumente van 'n opdrag bewerkstellig wat deur die execv()-funksie met wortelregte geroep word. Operasie vereis nie die gebruik van komplekse tegnieke wat gebruik word vir bufferoorvloei of geheuekorrupsie nie; eenvoudige karaktervervanging is voldoende.

Die probleem hou verband met die gebruik van die konstruk vir adresomskakeling:

lewer_plaaslike deel = expand_string(
string_sprintf("${local_part:%s}", new->adres));
lewer_domein = brei_string(
string_sprintf("${domein:%s}", nuwe->adres));

Die expand_string() funksie is 'n oorgekompliseerde kombinasie, insluitend die herkenning van die opdrag "${run{command arguments}", wat lei tot die bekendstelling van 'n eksterne hanteerder. Om dus binne 'n SMTP-sessie aan te val, hoef 'n plaaslike gebruiker slegs 'n opdrag soos 'RCPT TO "gebruikersnaam+${run{...}}@localhost"' te stuur, waar localhost een van die gashere van die local_domains lys is, en gebruikersnaam is die naam van 'n bestaande plaaslike gebruiker.

As die bediener as 'n posaflos werk, is dit genoeg om die opdrag 'RCPT NA "${run{...}}@relaydomain.com"' te stuur, waar relaydomain.com een ​​van die gashere is wat in die relay_to_domains gelys is instellings afdeling. Aangesien Exim nie verstek om die privilegiemodus te laat val nie (deliver_drop_privilege = false), sal opdragte wat deur "${run{...}}" gestuur word as wortel uitgevoer word.

Dit is opmerklik dat die kwesbaarheid was uitgeskakel in die 4.92-vrystelling wat in Februarie vrygestel is, sonder om te beklemtoon dat die oplossing tot sekuriteitsprobleme kan lei. Daar is geen rede om te glo dat daar 'n doelbewuste verberging van die kwesbaarheid deur die Exim-ontwikkelaars was nie, aangesien die probleem opgelos is tydens regstellings mislukking wat plaasvind wanneer verkeerde adresse versend word, en die kwesbaarheid is deur Qualys geïdentifiseer tydens 'n oudit van veranderinge in Exim.

'n Regstelling vir vorige weergawes wat steeds in verspreidings gebruik word, is tans slegs beskikbaar as pleister. Korrektiewe vrystellings vir vorige takke om die probleem op te los, is geskeduleer vir 11 Junie. Pakketopdaterings is gereed vir Debian, Ubuntu, openSUSE. Arch Linux и Fedora Hulle verskaf weergawe 4.92, waarin die probleem nie voorkom nie. RHEL en CentOS probleem nie onderwerp nie, aangesien Exim nie by hul gewone pakketbewaarplek ingesluit is nie.

Bron: opennet.ru

Voeg 'n opmerking