Detalii despre vulnerabilitatea critică în Exim au fost divulgate

Publicat versiune corectivă Exim 4.92.2 cu eliminarea critică vulnerabilități (CVE-2019-15846), care în configurația implicită poate duce la executarea de cod de la distanță de către un atacator cu privilegii root. Problema se manifestă doar atunci când suportul TLS este activat și este exploatată prin transmiterea unui certificat client special format sau a unei valori modificate în SNI. Vulnerabilitate a fost identificată de către compania Qualys.

Problema există în handler-ul de escapare a caracterelor speciale din șir (string_interpret_escape() din string.c) și este cauzată de faptul că simbolul ‘\’ de la sfârșitul șirului este interpretat înainte de caracterul nul (‘\0’) și îl escapează. La escapare, secvența ‘\’ și următorul cod nul de sfârșit de șir sunt procesate ca un singur simbol, iar pointerul se mută pe datele dincolo de sfârșitul șirului, care sunt interpretate ca fiind continuarea acestuia.

Codul care apelează string_interpret_escape() alocă un buffer pentru stocare, bazându-se pe dimensiunea reală, iar pointerul obținut ajunge în zona din afara limitelor buffer-ului. Prin urmare, când se încearcă procesarea șirului de intrare, apare o situație de citire a datelor din zona din afara limitelor buffer-ului alocat, iar încercarea de a scrie șirul dezescapat poate duce la o scriere peste limita buffer-ului.

În configurația implicită, vulnerabilitatea poate fi exploatată prin transmiterea de date special concepute în SNI atunci când se stabilește o conexiune securizată la server. Problema poate fi, de asemenea, exploatată prin modificarea valorilor peerdn în configurațiile configurate pentru autentificarea prin certificat de client sau la importul certificatelor. Atacul prin SNI și peerdn este posibil începând cu versiunea Exim 4.80, în care funcția string_unprinting() a fost aplicată pentru dezescaparea conținutului peerdn și SNI.

Pentru atacul prin SNI, a fost pregătit un prototip de exploit, care funcționează pe arhitecturi i386 și amd64 în sisteme Linux cu Glibc. În exploit se utilizează suprapunerea datelor pe zona heap, conducând la rescrierea memoriei în care este păstrat numele fișierului de log. Numele fișierului este înlocuit cu „/..../..../..../..../..../..../..../..../etc/passwd”. Apoi, variabila cu adresa expeditorului, care este prima salvată în log, este rescrisă, permițând adăugarea unui nou utilizator în sistem.

Actualizările pachetelor cu remedieri ale vulnerabilității au fost lansate de distribuții Debian, Ubuntu, Fedora, SUSE/openSUSE și FreeBSD. RHEL și CentOS problema vulnerabile, deoarece Exim nu face parte din repository-ul lor standard de pachete (în EPEL actualizare este deja formatat, dar până acum nu este inclus într-un depozit public). În codul Exim, problema este rezolvată cu o singură linie patch-ul, dezactivând acțiunea de escapare a backslash-ului, dacă se află la sfârșitul liniei.

Ca o soluție pentru blocarea vulnerabilității, se poate dezactiva suportul TLS sau adăuga în
secțiunea ACL „acl_smtp_mail”:

negare condiție = ${if eq{\}{${substr{-1}{1}{$tls_in_sni}}}}
negare condiție = ${if eq{\}{${substr{-1}{1}{$tls_in_peerdn}}}}

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster