I ricercatori di sicurezza di Qualys lo hanno dimostrato la possibilità di sfruttare una vulnerabilità nel server di posta qmail, noto dal 2005 (CVE-2005-1513), ma non corretto, da allora qmail ha affermato che non era realistico creare un exploit funzionante che potrebbe essere utilizzato per attaccare i sistemi nella configurazione predefinita.
Ma sembra che gli sviluppatori di qmail si sbagliavano, dal momento che Qualys è riuscito a preparare un exploit che rifiuta questa ipotesi e consente di avviare l'esecuzione di codice in modalità remota sul server inviando un messaggio appositamente predisposto.
Il problema è causato da un overflow nella funzione stralloc_readyplus (), che può verificarsi durante l'elaborazione di un messaggio di grandi dimensioni. Per l'operazione era richiesto un sistema a 64 bit con una capacità di memoria virtuale superiore a 4 GB.
Nell'analisi iniziale della vulnerabilità nel 2005, Daniel Bernstein ha sostenuto che l'ipotesi nel codice che la dimensione dell'array allocato corrisponda sempre a un valore di 32 bit si basa 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, la quantità di memoria fornita e la larghezza di banda della rete sono aumentate notevolmente.
I pacchetti che accompagnano qmail hanno tenuto conto del commento di Bernstein e all'avvio del processo qmail-smtpd, limitavano la memoria disponibile (ad esempio, su Debian 10, il limite era fissato a 7 MB).
Ma il Gli ingegneri Qualys hanno scoperto che questo non è sufficiente e in aggiunta a qmail-smtpd, è possibile eseguire un attacco remoto al processo qmail-local, che è rimasto illimitato su tutti i pacchetti testati.
Come prova, è stato preparato un prototipo di exploit, che è adatto per attaccare il pacchetto fornito da Debian con qmail nella configurazione predefinita. Per organizzare l'esecuzione di 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 sul sistema, eccetto root e utenti di sistema che non hanno una propria sottodirectory nella directory "/ home"
L'attacco viene effettuato inviando un messaggio di posta molto grande, che include più righe nell'intestazione, di circa 4 GB e 576 MB di dimensione.
Durante l'elaborazione di detta riga in qmail-local un intero overflow si verifica quando si tenta di recapitare un messaggio a un utente locale. Un intero overflow porta quindi a un buffer overflow durante la copia dei dati e alla possibilità di sovrascrivere le pagine di memoria con il codice libc.
Inoltre, nel processo di chiamata di qmesearch () in qmail-local, il file ".qmail-extension" viene aperto tramite la funzione open (), che porta al lancio effettivo del sistema (". Qmail-extension" ). Ma poiché parte del file "extension" è formata in base all'indirizzo del destinatario (ad esempio, "localuser-extension @ localdomain"), gli aggressori possono organizzare l'inizio del comando specificando l'utente "localuser-; comando; @localdomain »come destinatario del messaggio.
L'analisi del codice ha anche rivelato due vulnerabilità nella patch aggiuntiva controllo di qmail, che fa parte del pacchetto Debian.
- La prima vulnerabilità (CVE-2020-3811) consente di aggirare la verifica degli indirizzi e-mail e la seconda (CVE-2020-3812) porta a una fuga di informazioni locali.
- La seconda vulnerabilità può essere utilizzata per verificare la presenza di file e directory sul sistema, compresi quelli disponibili solo per root (qmail-verify inizia con i privilegi di root) tramite una chiamata diretta al driver locale.
Una serie di patch è stata preparata per questo pacchetto, eliminando le vecchie vulnerabilità del 2005 aggiungendo limiti di memoria rigida al codice della funzione alloc () e nuovi problemi in qmail.
Inoltre, una versione aggiornata della patch qmail è stata preparata separatamente. Gli sviluppatori della versione notqmail hanno preparato le loro patch per bloccare vecchi problemi e hanno anche iniziato a lavorare per eliminare tutti i possibili overflow di interi nel codice.
fonte: https://www.openwall.com/