Vulnerabilitat crítica a Exim que permet executar codi al servidor amb privilegis root

Al servidor de correu Exim identificat crític vulnerabilitat (CVE-2019-10149), que pot provocar l'execució remota de codi al servidor amb drets d'arrel quan es processa una sol·licitud especialment dissenyada. La possibilitat d'explotació del problema es va observar en les versions de la 4.87 a la 4.91 inclusivament o quan es construeix amb l'opció EXPERIMENTAL_EVENT.

En la configuració per defecte, l'atac es pot dur a terme sense complicacions innecessàries per part d'un usuari local, ja que s'aplica l'ACL "verify = recipient", que realitza comprovacions addicionals per a adreces externes. Es pot produir un atac remot quan es canvia la configuració, com ara actuar com a MX secundari per a un altre domini, eliminar l'ACL "verify=recipient" o determinats canvis a local_part_suffix). També és possible un atac remot si l'atacant és capaç de mantenir oberta la connexió al servidor durant 7 dies (per exemple, enviant un byte per minut per evitar un temps d'espera). Al mateix temps, és possible que hi hagi vectors d'atac més simples per a l'explotació remota del problema.

La vulnerabilitat és causada per una verificació incorrecta de l'adreça del destinatari a la funció deliver_message() definida al fitxer /src/deliver.c. En manipular el format de l'adreça, un atacant pot aconseguir la substitució de les seves dades en els arguments d'una ordre cridada mitjançant la funció execv() amb drets d'arrel. El funcionament no requereix l'ús de tècniques complexes utilitzades per a desbordaments de memòria intermèdia o corrupció de memòria; la simple substitució de caràcters és suficient.

El problema està relacionat amb l'ús de la construcció per a la conversió d'adreces:

delivery_localpart = expand_string(
string_sprintf("${part_local:%s}", nova->adreça));
lliurament_domini = expand_string(
string_sprintf("${domini:%s}", nou->adreça));

La funció expand_string() és un combinador massa complicat, que inclou el reconeixement de l'ordre "${run{command arguments}", que condueix al llançament d'un controlador extern. Així, per atacar dins d'una sessió SMTP, un usuari local només ha d'enviar una ordre com "RCPT TO "nom d'usuari+${executar{...}}@localhost"', on localhost és un dels amfitrions de la llista local_domains, i nom d'usuari és el nom d'un usuari local existent.

Si el servidor funciona com a retransmissió de correu, n'hi ha prou amb enviar de forma remota l'ordre 'RCPT A "${run{...}}@relaydomain.com"', on relaydomain.com és un dels amfitrions que figuren a relay_to_domains. secció de configuració. Com que l'Exim no deixa caure el mode de privilegis per defecte (deliver_drop_privilege = false), les ordres passades mitjançant "${run{...}}" s'executaran com a root.

Cal destacar que la vulnerabilitat era eliminat a la versió 4.92 publicada al febrer, sense emfatitzar que la correcció podria provocar problemes de seguretat. No hi ha cap raó per creure que hi hagi hagut una ocultació deliberada de la vulnerabilitat per part dels desenvolupadors d'Exim, ja que el problema es va solucionar durant correccions fallada que es produeix quan es transmeten adreces incorrectes i Qualys va identificar la vulnerabilitat durant una auditoria de canvis a Exim.

Actualment només està disponible una correcció per a les versions anteriors que es continuen utilitzant a les distribucions pegat. Els llançaments correctius de les sucursals anteriors per solucionar el problema estan programats per a l'11 de juny. Les actualitzacions de paquets estan a punt Debian, Ubuntu, openSUSE. Arch Linux и Fedora Subministren la versió 4.92, en què el problema no apareix. Problema RHEL i CentOS no susceptibles, ja que Exim no s'inclou al seu repositori de paquets habitual.

Font: opennet.ru

Afegeix comentari