Una vulnerabilità sfruttabile da remoto nel server di posta qmail

Ricercatori sulla sicurezza di Qualys hanno mostrato la possibilità sfruttamento vulnerabilità nel server di posta qmail, conosciuta fin dal 2005 (CVE-2005-1513), ma rimasta non corretta poiché l'autore di qmail sosteneva che fosse irrealistico creare un exploit funzionante che potesse essere utilizzato per attaccare sistemi con configurazione predefinita. In Qualys sono riusciti a preparare un exploit che contraddice questa affermazione e permette di avviare l'esecuzione remota di codice sul server inviando un messaggio appositamente formattato.

Il problema è causato da un overflow intero nella funzione stralloc_readyplus(), che può verificarsi durante l'elaborazione di un messaggio molto grande. Per l'approccio era necessario un sistema a 64 bit con più di 4 GB di memoria virtuale. Nella prima analisi della vulnerabilità nel 2005, Daniel Bernstein sosteneva che l'assunzione presente nel codice secondo cui la dimensione dell'array allocato è sempre contenuta in un valore a 32 bit era basata sull'idea che nessuno fornisca gigabyte di memoria a ciascun processo. Negli ultimi 15 anni, i sistemi a 64 bit sui server hanno sostituito quelli a 32 bit, con un aumento significativo della memoria fornita e della larghezza di banda delle reti.

I pacchetti associati a qmail hanno tenuto conto del commento di Bernstein e, all'avvio del processo qmail-smtpd, limitavano la memoria disponibile (ad esempio, su Debian 10 è impostato un limite di 7 MB). Tuttavia, gli ingegneri di Qualys hanno scoperto che ciò non è sufficiente e che, oltre a qmail-smtpd, l'attacco remoto può essere condotto sul processo qmail-local, che in tutti i pacchetti esaminati è rimasto illimitato. Come prova è stato preparato un prototipo di exploit adatto per attaccare il pacchetto Debian con qmail in configurazione predefinita.
Per organizzare l'esecuzione remota di codice durante l'attacco è necessaria la disponibilità di 4 GB di spazio libero su disco e 8 GB di RAM sul server.
L'exploit consente di eseguire qualsiasi comando shell con i diritti di qualsiasi utente del sistema, tranne root e utenti di sistema che non hanno la propria sottodirectory nella cartella "/home" (il processo qmail-local viene avviato con i diritti dell'utente locale a cui viene effettuata la consegna).

L'attacco viene effettuato
tramite l'invio di un messaggio e-mail molto grande, che include diverse righe nell'intestazione, di circa 4GB e 576MB. L'elaborazione di una tale riga in qmail-local porta a un overflow di interi durante il tentativo di consegnare il messaggio a un utente locale. L'overflow di interi porta poi a un overflow di buffer durante la copia dei dati, consentendo la sovrascrittura delle pagine di memoria con codice libc. Attraverso manipolazioni della disposizione dei dati trasmessi, è possibile riscrivere anche l'indirizzo della funzione «open()», sostituendolo con l'indirizzo della funzione «system()».

Successivamente, nel processo di chiamata di qmesearch() in qmail-local si apre il file «.qmail-extension» tramite la funzione open(), il che porta all'effettivo avvio della funzione
system(«.qmail-extension»). Ma poiché parte del file «extension» è generata in base all'indirizzo del destinatario (ad esempio, «localuser-extension@localdomain»), gli attaccanti possono organizzare la trasmissione di un comando da eseguire, specificando l'utente «localuser-;command;@localdomain» come destinatario del messaggio.

Durante l'analisi del codice sono state identificate anche due vulnerabilità in un patch aggiuntivo di qmail-verify, incluso nel pacchetto per Debian. La prima vulnerabilità (CVE-2020-3811) consente di bypassare la verifica dell'indirizzo e-mail, mentre la seconda (CVE-2020-3812) porta a una fuga di informazioni locali. In particolare, la prima vulnerabilità consente di saltare il controllo della validità dell'indirizzo utilizzato nell'exploit per inviare il comando (il controllo non viene attivato per indirizzi senza dominio, come «localuser-;command;»). La seconda vulnerabilità può essere utilizzata per controllare l'esistenza di file e directory nel sistema, incluse quelle accessibili solo per root (qmail-verify viene eseguito con diritti di root), tramite accesso diretto al gestore locale.

Per aggirare il problema, Bernstein ha raccomandato di eseguire i processi qmail impostando un limite generale sulla memoria disponibile («softlimit -m12345678»), e in questo caso il problema viene bloccato. Come alternativa si suggerisce di limitare la dimensione massima del messaggio elaborato tramite il file «control/databytes» (di default non viene creato con le impostazioni di default di qmail, che rimane vulnerabile). Inoltre, «control/databytes» non protegge dagli attacchi locali da parte degli utenti del sistema, poiché il limite è considerato solo in qmail-smtpd.

Il problema riguarda il pacchetto netqmail, presente nei repository Debian. Per questo pacchetto è stato preparato un insieme di patch che risolvono sia le vecchie vulnerabilità del 2005 (attraverso l'aggiunta di limiti rigidi di memoria nella funzione alloc() nel codice), sia i nuovi problemi in qmail-verify. Separatamente è preparato una versione aggiornata della patch qmail-verify. Gli sviluppatori un fork notqmail hanno preparato le loro patch per bloccare i vecchi problemi e hanno avviato i lavori per risolvere tutte le possibili sovrapposizioni di interi nel codice.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster