versione correttiva risolve una vulnerabilità critica (), che nella configurazione predefinita può portare all'esecuzione remota di codice da parte di un attaccante con privilegi di root. Il problema si manifesta solo quando è attivato il supporto TLS e viene sfruttato attraverso l'invio di un certificato client appositamente formattato o un valore modificato in SNI. La vulnerabilità è stata identificata da Qualys.
Problema nel gestore di escape dei caratteri speciali nella stringa ( di string.c) ed è causata dal fatto che il carattere ‘\’ alla fine della stringa viene interpretato prima del carattere nullo (‘\0’) ed lo escapa. Durante l'escaping, la sequenza ‘\’ e il successivo codice nullo di fine stringa vengono trattati come un unico carattere e il puntatore si sposta su dati al di fuori della stringa, che vengono interpretati come una sua continuazione.
Il codice che chiama string_interpret_escape() alloca un buffer per lo stream, basandosi sulla dimensione effettiva, e il puntatore risultante si trova nell'area al di fuori dei confini del buffer. Di conseguenza, durante il tentativo di elaborazione della stringa di input si verifica una situazione di lettura di dati dalla zona al di fuori dei limiti del buffer allocato, e il tentativo di scrittura della stringa disabilitata può portare a scrivere oltre il buffer.
Nella configurazione predefinita, la vulnerabilità può essere sfruttata attraverso l'invio di dati appositamente formattati in SNI durante l'instaurazione di una connessione sicura al server. Il problema può anche essere sfruttato modificando i valori di peerdn nelle configurazioni impostate per l'autenticazione tramite certificato client, o durante l'importazione di certificati. L'attacco tramite SNI e peerdn è possibile a partire dalla versione , in cui la funzione string_unprinting() è stata utilizzata per disattivare l'escaping del contenuto di peerdn e SNI.
Per l'attacco tramite SNI è stato preparato un prototipo di exploit, funzionante su architetture i386 e amd64 nei sistemi Linux con Glibc. L'exploit utilizza un overlay nel heap, portando alla sovrascrittura della memoria in cui è memorizzato il nome del file di log. Il nome del file viene sostituito con «/../../../../../../../../etc/passwd». Successivamente viene sovrascritta la variabile con l'indirizzo del mittente, che è ora il primo a essere memorizzato nel log, permettendo di aggiungere un nuovo utente al sistema.
Gli aggiornamenti dei pacchetti per risolvere la vulnerabilità sono stati rilasciati dalle distribuzioni , , , e . La questione su RHEL e CentOS , poiché Exim non è incluso nel loro repository di pacchetti standard (in aggiornamento , ma fino ad ora nel repository pubblico). Nel codice di Exim, il problema viene risolto con una riga di codice , che disabilita l'escapamento dell'azione del backslash se si trova alla fine della stringa.
Come soluzione temporanea per bloccare la vulnerabilità, è possibile disabilitare il supporto TLS o aggiungere nel
sezione ACL «acl_smtp_mail»:
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}
Fonte: opennet.ru
