CVE-2015-7547: il nuovo bug in glibc. E ancora per DNS.

0

dnsQuasi a un anno di distanza da GHOST si presenta un nuovo bug, e sempre per la gestione delle risposte DNS. Non abbiamo un nomignolo per indicarlo (almeno non ancora), quindi useremo il codice che gli è stato assegnato: CVE-2015-7547.

CVE-2015-7547 consiste nella possibilità di un malintenzionato di inviare ad una macchina remota codice tramite risposta DNS, e poi eseguire tale codice; l’attacco può essere portato da un server DNS compromesso o con il classico metodo del man-in-the-middle.

Il problema è piuttosto serio, ma risulta molto grave perché si trova nelle librerie fondamentali dei sistemi GNU/Linux, ovvero glibc (the GNU C library): qualsiasi programma che usi la rete scritto per Linux usa questa libreria, e quindi risulta vulnerabile. Il problema non è limitato ai server o ai PC: basti pensare che anche i cellulari con sistema Android usano questa libreria.

Un team di Google ha contattato i manutentori di glibc per avvertirli della scoperta, e per comunicare che stavano studiando una soluzione prima di rendere pubblico il bug. La risposta è stata piacevolmente sorprendente: anche un team di Red Hat stava facendo lo stesso lavoro. I due team hanno collaborato per arrivare ad una soluzione, che è stata pubblicata e verrà presto distribuita.

Ad essere onesti il bug nel codice di glibc è stato trovato già a luglio 2015, ma l’implicazione di poter eseguire codice non era stata vista: giudicato poco grave, è stato messo un poco da parte.

Per i più curiosi una breve descrizione tecnica.

Per risolvere i nomi in indirizzi tramite DNS, glibc interroga un server DNS e memorizza la risposta in un’aria di memoria apposita, fissata a 2048 byte.

La risposta però può avere dimensioni ben maggiori, fino a 65535 byte; in questo caso glibc prepara apposta una nuova area di memoria. L’errore di programmazione è qui: glibc usa non la nuova area, ma la porzione di memoria iniziale, quella troppo piccola. Abbiamo quindi uno stack overflow:  vengono scritti comunque tutti i byte del messaggio anche se lo spazio previsto era minore.

Questo vuol dire che tutti i dati oltre i primi 2048 byte sono presenti in memoria (sovrascrivendo eventualmente i dati già presenti, non c’è alcun controllo) ma non gestiti da glibc: è qui che il malintenzionato può mettere il proprio programma da far eseguire.

Il problema può essere mitigato limitando la dimensione dei messaggi DNS, oppure usando un proprio server DNS come filtro.

 

Ho coltivato la mia passione per l’informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *