Nel server di posta Exim
Nella configurazione predefinita l'attacco può essere effettuato senza inutili complicazioni da un utente locale, poiché viene applicata l'ACL "verify = recipient" che esegue controlli aggiuntivi per gli indirizzi esterni. Un attacco remoto può verificarsi quando le impostazioni vengono modificate, ad esempio agendo come MX secondario per un altro dominio, rimuovendo l'ACL "verify=recipient" o alcune modifiche a local_part_suffix). Un attacco remoto è possibile anche se l'aggressore riesce a mantenere aperta la connessione al server per 7 giorni (ad esempio inviando un byte al minuto per aggirare un timeout). Allo stesso tempo, è possibile che esistano vettori di attacco più semplici per lo sfruttamento remoto del problema.
La vulnerabilità è causata da un'errata verifica dell'indirizzo del destinatario nella funzione deliver_message() definita nel file /src/deliver.c. Manipolando la formattazione dell'indirizzo, un utente malintenzionato può ottenere la sostituzione dei suoi dati negli argomenti di un comando richiamato tramite la funzione execv() con diritti di root. Il funzionamento non richiede l'uso di tecniche complesse utilizzate per i buffer overflow o il danneggiamento della memoria; è sufficiente la semplice sostituzione dei caratteri.
Il problema è legato all'uso del costrutto per la conversione degli indirizzi:
consegna_partelocale = espandi_stringa(
string_sprintf("${local_part:%s}", nuovo->indirizzo));
consegna_dominio = espandi_stringa(
string_sprintf("${dominio:%s}", nuovo->indirizzo));
La funzione expand_string() è un combinatore eccessivamente complicato, incluso il riconoscimento del comando "${run{command topics}", che porta al lancio di un gestore esterno. Pertanto, per attaccare all'interno di una sessione SMTP, un utente locale deve solo inviare un comando come 'RCPT TO “username+${run{...}}@localhost”', dove localhost è uno degli host dall'elenco local_domains, e nomeutente è il nome di un utente locale esistente.
Se il server funziona come relè di posta, è sufficiente inviare da remoto il comando 'RCPT TO "${run{...}}@relaydomain.com"', dove Relaydomain.com è uno degli host elencati in Relay_to_domains sezione Impostazioni. Poiché Exim non rinuncia automaticamente alla modalità privilegio (deliver_drop_privilege = false), i comandi passati tramite "${run{...}}" verranno eseguiti come root.
È interessante notare che la vulnerabilità era
Una correzione per le versioni precedenti che continuano a essere utilizzate nelle distribuzioni è attualmente disponibile solo come
Fonte: opennet.ru