versiune corectivă cu eliminarea critică (), 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 de către compania Qualys.
Problema în handler-ul de escapare a caracterelor speciale din șir ( 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 , î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 , , , și . RHEL și CentOS problema , deoarece Exim nu face parte din repository-ul lor standard de pachete (în actualizare , dar până acum într-un depozit public). În codul Exim, problema este rezolvată cu o singură linie , 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
