Vulnerabilità eseguibile da remoto nel server di posta qmail

I ricercatori di sicurezza della società Qualys hanno mostrato possibilità sfruttamento hanno identificato vulnerabilità nel server di posta qmail, nota risalenti al 2005 (CVE-2005-1513), rimasta però non corretta poiché l'autore di qmail sosteneva che fosse irrealistico creare un exploit funzionante utilizzabile per attaccare sistemi in configurazione predefinita. In Qualys sono riusciti a preparare un exploit che confuta questa affermazione e consente l'esecuzione remota di codice sul server tramite l'invio di 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 sfruttare questa vulnerabilità era necessaria una sistema a 64 bit con più di 4 GB di memoria virtuale. Quando la vulnerabilità è stata inizialmente analizzata nel 2005, Daniel J. Bernstein sosteneva che l'assunzione presente nel codice secondo cui la dimensione dell'array allocato rientra sempre in un valore a 32 bit fosse basata sul fatto che nessuno fornisce gigabyte di memoria a ogni processo. Negli ultimi 15 anni, i sistemi a 64 bit nei server hanno soppiantato quelli a 32 bit, con un aumento significativo della quantità di memoria fornita e della capacità di rete.

I pacchetti di supporto per qmail hanno tenuto conto della segnalazione di Bernstein e, durante l'avvio del processo qmail-smtpd, limitavano la memoria disponibile (ad esempio, in Debian 10 è impostato un limite di 7 MB). Tuttavia, gli ingegneri di Qualys hanno scoperto che questo non è sufficiente e che oltre a qmail-smtpd, un attacco remoto può essere condotto sul processo qmail-local, che in tutti i pacchetti esaminati rimaneva senza limitazioni. Come prova, è stato preparato un prototipo di exploit adatto per attaccare il pacchetto qmail fornito in Debian con la configurazione predefinita.
Per organizzare l'esecuzione remota di codice durante l'attacco è necessario che sul server ci siano 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 nel sistema, tranne root e utenti di sistema che non hanno una propria sottodirectory nella cartella «/home» (il processo qmail-local viene eseguito con i diritti dell'utente locale a cui viene effettuata la consegna).

L'attacco viene effettuato
attraverso l'invio di un'email molto grande, con diverse righe nell'intestazione, della dimensione di circa 4GB e 576MB. L'elaborazione di tale intestazione in qmail-local porta a un overflow intero durante il tentativo di consegna del messaggio a un utente locale. L'overflow intero a sua volta causa un overflow del buffer durante la copia dei dati e la possibilità di sovrascrivere pagine di memoria con codice libc. Attraverso manipolazioni della disposizione dei dati trasmessi, è possibile anche sovrascrivere l'indirizzo della funzione «open()», sostituendolo con l'indirizzo della funzione «system()».

Successivamente, nel processo della chiamata a qmesearch() in qmail-local, avviene l'apertura del file «.qmail-extension» tramite la funzione open(), il che porta all'effettivo avvio della funzione
system(«.qmail-extension»). Ma poiché una parte del file «extension» è formata in base all'indirizzo del destinatario (ad esempio, «localuser-extension@localdomain»), gli attaccanti possono organizzare l'invio di comandi per l'esecuzione, specificando l'utente «localuser-;command;@localdomain» come destinatario del messaggio.

Durante l'analisi del codice sono state individuate anche due vulnerabilità nel patch aggiuntivo qmail-verify, che fa parte del pacchetto per Debian. La prima vulnerabilità (CVE-2020-3811) consente di bypassare la verifica dell'indirizzo email, mentre la seconda (CVE-2020-3812) porta a una possibile fuga di informazioni locali. In particolare, la prima vulnerabilità permette di eludere la validazione dell'indirizzo utilizzato nell'exploit per l'invio del comando (la verifica non scatta per indirizzi privi di dominio, come «localuser-;command;»). La seconda vulnerabilità può essere utilizzata per verificare l'esistenza di file e directory nel sistema, anche quelle accessibili solo al root (qmail-verify viene eseguito con i privilegi di root), attraverso l'accesso diretto all'elaboratore locale.

Per aggirare il problema, Bernstein ha raccomandato di eseguire i processi qmail impostando un limite condiviso sulla memoria disponibile («softlimit -m12345678»), in questo caso il problema viene bloccato. Come metodo alternativo di protezione viene anche menzionato il limite della dimensione massima dei messaggi elaborati tramite il file «control/databytes» (di default non viene creato e, con le impostazioni di default, qmail rimane vulnerabile). Inoltre, «control/databytes» non protegge da attacchi locali da parte degli utenti del sistema, poiché il limite viene considerato solo in qmail-smtpd.

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

Fonte: opennet.ru

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