
Recentemente, all'inizio dell'estate, sono emersi molti appelli per l'aggiornamento di Exim alla versione 4.92 a causa della vulnerabilità CVE-2019-10149 (). E nei giorni scorsi è emerso che il malware Sustes ha deciso di sfruttare questa vulnerabilità.
Ora tutti coloro che si sono aggiornati in fretta possono di nuovo "gioire": il 21 luglio 2019 il ricercatore Zerons ha scoperto una vulnerabilità critica in Exim Mail Transfer agent (MTA) quando utilizza TLS per le versioni da 4.80 a 4.92.1 inclusa, che consente l'esecuzione remota di codice con privilegi elevati ().
Vulnerabilità
La vulnerabilità è presente quando si utilizzano librerie sia GnuTLS che OpenSSL durante l'installazione di una connessione TLS sicura.
Secondo lo sviluppatore Heiko Schlittermann, il file di configurazione in Exim per impostazione predefinita non utilizza TLS, tuttavia molte distribuzioni durante l'installazione creano i certificati necessari e abilitano la connessione protetta. Inoltre, le versioni più recenti di Exim impostano l'opzione tls_advertise_hosts=* e generano i certificati necessari.
dipende dalla configurazione. La maggior parte delle distribuzioni la abilitano per impostazione predefinita, ma Exim ha bisogno di un certificato+chiave per funzionare come server TLS. Probabilmente le distribuzioni creano un certificato durante l'installazione. Le versioni più recenti di Exim hanno l'opzione tls_advertise_hosts impostata su «*» e creano un certificato autofirmato, se nessuno viene fornito.
La vulnerabilità stessa risiede nella gestione scorretta di SNI (Server Name Indication, tecnologia introdotta nel 2003 nel RFC 3546 per richiedere al cliente il certificato corretto per il nome di dominio, ) durante il handshake TLS. È sufficiente per un aggressore inviare SNI che termina con una barra rovesciata («") e un carattere nullo (» «).
I ricercatori della società Qualys hanno scoperto un bug nella funzione string_printing(tls_in.sni), che consiste in un'escapologia scorretta «». Di conseguenza, si verifica la scrittura della barra rovesciata in forma non escapata nel file di intestazione della stampa. Successivamente, questo file, con privilegi elevati, viene letto dalla funzione spool_read_header(), il che porta a un overflow della heap (heap overflow).
Va notato che finora gli sviluppatori di Exim hanno creato un PoC della vulnerabilità con l'esecuzione di comandi su un server vulnerabile remoto, ma al momento non è disponibile pubblicamente. Data la semplicità di sfruttamento del bug, è solo una questione di tempo e, per di più, piuttosto breve.
È possibile consultare la ricerca più dettagliata della società Qualys .

Utilizzo di SNI in TLS
Numero di server pubblici potenzialmente vulnerabili
Secondo le statistiche di un grande provider di hosting E-Soft Inc al 1 settembre, nei server affittati, la versione 4.92 è utilizzata in oltre il 70% degli host.
Version
Numero di server
Percentuale
4.92.1
6471
1.28%
4.92
376436
74.22%
4.91
58179
11.47%
4.9
5732
1.13%
4.89
10700
2.11%
4.87
14177
2.80%
4.84
9937
1.96%
Altre versioni
25568
5.04%
Statistiche dell'azienda E-Soft Inc
Se si consulta il motore di ricerca , su un totale di 5.250.000 server nel database:
- circa 3.500.000 utilizzano Exim 4.92 (circa 1.380.000 con SSL/TLS);
- oltre 74.000 utilizzano 4.92.1 (circa 25.000 con SSL/TLS).
Pertanto, il numero di server Exim noti e pubblicamente accessibili potenzialmente vulnerabili è di circa 1.5 milioni.

Ricerca di server Exim in Shodan
Protezione
- Il modo più semplice, ma non raccomandato, è non utilizzare TLS, il che porterà all'invio di messaggi di posta elettronica in chiaro.
- Un'opzione più preferibile per evitare l'esploitazione della vulnerabilità sarà l'aggiornamento alla versione .
- Se non è possibile eseguire l'aggiornamento o installare una versione patchata, è possibile impostare ACL nella configurazione di Exim per l'opzione acl_smtp_mail con le seguenti regole:
# to be prepended to your mail acl (the ACL referenced # by the acl_smtp_mail main config option) deny condition = ${if eq{}{${substr{-1}{1}{$tls_in_sni}}}} deny condition = ${if eq{}{${substr{-1}{1}{$tls_in_peerdn}}}}
Fonte: habr.com
