È stata pubblicata la versione del server di posta Exim 4.94.2 con la correzione di 21 vulnerabilità (CVE-2020-28007-CVE-2020-28026, CVE-2021-27216), individuate dalla società Qualys e presentate con il nome in codice 21Nails. 10 problemi possono essere sfruttati da remoto (incluso l'esecuzione di codice con i privilegi di root) attraverso la manipolazione dei comandi SMTP durante l'interazione con il server.
Tutte le versioni di Exim, la cui storia è tracciata in Git dal 2004, sono soggette a problemi. Per 4 vulnerabilità locali e 3 problemi remoti sono stati preparati prototipi di exploit funzionanti. Gli exploit per le vulnerabilità locali (CVE-2020-28007, CVE-2020-28008, CVE-2020-28015, CVE-2020-28012) consentono di elevare i propri privilegi a quelli dell'utente root. Due problemi remoti (CVE-2020-28020, CVE-2020-28018) consentono di eseguire codice con i privilegi dell'utente exim senza autenticazione (successivamente si può ottenere l'accesso root sfruttando una delle vulnerabilità locali).
La vulnerabilità CVE-2020-28021 consente di eseguire codice da remoto con i privilegi di root, ma richiede un accesso autenticato (l'utente deve stabilire una sessione autenticata, dopodiché può sfruttare la vulnerabilità manipolando il parametro AUTH nel comando MAIL FROM). Il problema è causato dal fatto che l'attaccante può ottenere un'inserzione di stringa nell'intestazione del file spool a causa della registrazione del valore authenticated_sender senza una corretta escaping dei caratteri speciali (ad esempio, passando il comando "MAIL FROM:& AUTH=Raven+0AReyes").
Si segnala inoltre che un'altra vulnerabilità remota CVE-2020-28017 è sfruttabile per eseguire codice con i privilegi dell'utente "exim" senza autenticazione, ma richiede più di 25 GB di memoria. Per altre 13 vulnerabilità possono essere potenzialmente realizzati exploit, ma non sono stati ancora condotti lavori in questa direzione.
Gli sviluppatori di Exim erano stati informati dei problemi già nell'ottobre dell'anno scorso e hanno impiegato oltre 6 mesi per sviluppare le correzioni. Si raccomanda a tutti gli amministratori di aggiornare urgentemente Exim sui loro server di posta. server fino alla versione 4.94.2. Tutte le versioni di Exim precedenti al rilascio 4.94.2 sono state dichiarate obsolete. La pubblicazione della nuova versione è stata coordinata con le distribuzioni che hanno rilasciato aggiornamenti dei pacchetti simultaneamente: Ubuntu, Arch Linux, FreeBSD, Debian, SUSE e Fedora. RHEL e CentOS non sono interessati, poiché Exim non è presente nel loro repository di pacchetti ufficiale (al momento non c'è aggiornamento in EPEL).
Vulnerabilità remote:
- CVE-2020-28017: Overflow intero nella funzione receive_add_recipient();
- CVE-2020-28020: Overflow intero nella funzione receive_msg();
- CVE-2020-28023: Lettura da un'area al di fuori del buffer allocato nella funzione smtp_setup_msg();
- CVE-2020-28021: Sostituzione della nuova riga nell'intestazione del file di spool;
- CVE-2020-28022: Scrittura e lettura in un'area al di fuori del buffer allocato nella funzione extract_option();
- CVE-2020-28026: Troncamento e sostituzione della stringa nella funzione spool_read_header();
- CVE-2020-28019: Crash nel ripristino del puntatore alla funzione dopo un errore BDAT;
- CVE-2020-28024: Overflow attraverso il limite inferiore del buffer nella funzione smtp_ungetc();
- CVE-2020-28018: Accesso al buffer dopo che è stato liberato (use-after-free) in tls-openssl.c
- CVE-2020-28025: Lettura da un'area al di fuori del buffer allocato nella funzione pdkim_finish_bodyhash().
Vulnerabilità locali:
- CVE-2020-28007: Attacco tramite link simbolico nella directory del log di Exim;
- CVE-2020-28008: Attacchi alla directory dello spool;
- CVE-2020-28014: Creazione di un file arbitrario;
- CVE-2021-27216: Cancellazione di un file arbitrario;
- CVE-2020-28011: Overflow del buffer nella funzione queue_run();
- CVE-2020-28010: Scrittura oltre il limite del buffer nella funzione main();
- CVE-2020-28013: Overflow del buffer nella funzione parse_fix_phrase();
- CVE-2020-28016: Scrittura oltre il limite del buffer nella funzione parse_fix_phrase();
- CVE-2020-28015: Sostituzione della nuova riga nell'intestazione del file di spool;
- CVE-2020-28012: Mancanza del flag close-on-exec per il canale anonimo privilegiato;
- CVE-2020-28009: Overflow intero nella funzione get_stdinput().
Fonte: opennet.ru
