Vulnerabilità sfruttabile da remoto nel server di posta qmail

Ricercatori di sicurezza di Qualys hanno mostrato opportunità Operativo vulnerabilità nel server di posta qmail, conosciuto nel 2005 (CVE-2005-1513), ma rimase senza patch perché l'autore di qmail sostenne che non era realistico creare un exploit funzionante che potesse essere utilizzato per attaccare i sistemi nella configurazione predefinita. Qualys è riuscita a preparare un exploit che smentisce questa ipotesi e consente di avviare l'esecuzione di codice remoto sul server inviando un messaggio appositamente progettato.

Il problema è causato da un overflow di numeri interi nella funzione stralloc_readyplus(), che può verificarsi durante l'elaborazione di un messaggio molto grande. L'operazione richiedeva un sistema a 64 bit con più di 4 GB di memoria virtuale. Quando la vulnerabilità fu analizzata per la prima volta nel 2005, Daniel J. Bernstein sostenne che il presupposto nel codice secondo cui la dimensione dell'array allocato fosse sempre entro il valore di 32 bit si basava sul fatto che nessuno fornisce gigabyte di memoria a ciascun processo. Negli ultimi 15 anni, i sistemi a 64 bit sui server hanno sostituito i sistemi a 32 bit e la quantità di memoria fornita e la larghezza di banda di rete sono aumentate notevolmente.

I manutentori del pacchetto qmail hanno tenuto conto della nota di Bernstein e hanno limitato la memoria disponibile all'avvio del processo qmail-smtpd (ad esempio, in Debian 10 il limite è impostato a 7 MB). Ma gli ingegneri di Qualys hanno scoperto che questo non basta e che, oltre a qmail-smtpd, è possibile sferrare un attacco remoto anche al processo qmail-local, che in tutti i pacchetti testati è rimasto illimitato. Come prova è stato preparato un prototipo di exploit adatto ad attaccare il pacchetto Debian con qmail nella configurazione predefinita.
Per organizzare l'esecuzione del codice remoto durante un attacco, il server richiede 4 GB di spazio libero su disco e 8 GB di RAM.
L'exploit consente di eseguire qualsiasi comando shell con i diritti di qualsiasi utente del sistema, ad eccezione degli utenti root e di sistema che non hanno una propria sottodirectory nella directory "/home" (il processo qmail-local viene avviato con i diritti dell'utente locale a cui viene effettuata la consegna).

L'attacco viene effettuato
inviando un messaggio di posta molto grande, comprendente diverse righe di intestazione, che misurano circa 4 GB e 576 MB. L'elaborazione di tale stringa in qmail-local provoca un overflow di numeri interi quando si tenta di consegnare un messaggio all'utente locale. Un overflow di numeri interi porta quindi ad un overflow del buffer durante la copia dei dati e alla possibilità di sovrascrivere le pagine di memoria con codice libc. Manipolando la disposizione dei dati trasmessi è anche possibile riscrivere l'indirizzo della funzione “open()”, sostituendolo con l'indirizzo della funzione “system()”.

Successivamente, nel processo di chiamata di qmesearch() in qmail-local, il file “.qmail-extension” viene aperto tramite la funzione open(), che porta all'effettiva esecuzione della funzione
system(".qmail-estensione"). Ma poiché la parte "estensione" del file viene generata in base all'indirizzo del destinatario (ad esempio, "localuser-extension@localdomain"), gli aggressori possono organizzare l'invio del comando specificando l'utente "localuser-;command ;@localdomain” come destinatario del messaggio.

Durante l'analisi del codice sono state identificate due vulnerabilità anche nella patch aggiuntiva qmail-verify, che fa parte del pacchetto per Debian. Prima vulnerabilità (CVE-2020-3811) ti consente di ignorare la verifica dell'indirizzo email e il secondo (CVE-2020-3812) porta alla fuga di informazioni locali. In particolare, la prima vulnerabilità consente di bypassare la verifica della correttezza dell'indirizzo utilizzato nell'exploit per inviare un comando (la verifica non funziona per indirizzi senza dominio, come “localuser-;command;”). La seconda vulnerabilità può essere utilizzata per verificare la presenza di file e directory nel sistema, compresi quelli accessibili solo da root (qmail-verify viene eseguito con diritti di root), tramite una chiamata diretta al gestore locale.

Per aggirare il problema, Bernstein consiglia di eseguire i processi qmail con un limite totale di memoria disponibile (“softlimit -m12345678”), nel qual caso il problema viene bloccato. Come metodo di protezione alternativo viene menzionata anche la limitazione della dimensione massima del messaggio elaborato tramite il file “control/databytes” (per impostazione predefinita non viene creato con le impostazioni predefinite qmail rimane vulnerabile). Inoltre, "control/databytes" non protegge dagli attacchi locali da parte degli utenti del sistema, poiché il limite viene preso in considerazione solo da qmail-smtpd.

Il problema riguarda il pacchetto netqmail, incluso nei repository Debian. Per questo pacchetto è stata preparata una serie di patch che eliminano sia le vecchie vulnerabilità del 2005 (aggiungendo limiti di memoria al codice della funzione alloc()) sia i nuovi problemi in qmail-verify. Separatamente preparato versione aggiornata della patch qmail-verify. Sviluppatori rami notqmail hanno preparato le proprie patch per bloccare vecchi problemi e hanno anche iniziato a lavorare per eliminare tutti i possibili overflow di numeri interi nel codice.

Fonte: opennet.ru

Aggiungi un commento