È stata identificata una vulnerabilità nel processo in background slaacd, responsabile in OpenBSD della configurazione automatica degli indirizzi IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), che porta a un overflow del buffer quando riceve un annuncio di router IPv6 specificamente formattato (RA, Router Advertisement).
Inizialmente, la funzionalità di auto-configurazione degli indirizzi IPv6 era implementata a livello di kernel, ma a partire da OpenBSD 6.2 è stata spostata in un processo separato e non privilegiato, slaacd. Questo processo è responsabile dell'invio di messaggi RS (Router Solicitation) e dell'analisi delle risposte RA (Router Advertisement) con informazioni sul router e sui parametri di connessione di rete.
A febbraio, è stato corretto un errore in slaacd che causava l'arresto anomalo in caso di specifica di 7 server nella lista RDNSS (Recursive DNS Servers). Questa svista ha attirato l'attenzione di ricercatori indipendenti, che hanno tentato di esaminare il codice di slaacd alla ricerca di altri errori che si presentano durante l'analisi dei campi nei messaggi RA. L'analisi ha rivelato un altro problema nel codice, che si manifesta durante la gestione del campo DNSSL (DNS Search List), che include elenchi nomi di dominio e modelli di host per DNS.
Ogni nome nell'elenco DNSSL è codificato utilizzando un delimitatore con codice nullo e etichette intermedie di un byte, che definiscono la dimensione dei dati che seguono. La vulnerabilità è causata dal fatto che nel codice di analisi dell'elenco il campo con la dimensione viene copiato in una variabile di tipo intero con segno («len = data[pos]»). Di conseguenza, se viene specificato un valore nel campo con il bit più significativo impostato, questo valore sarà interpretato nel costrutto condizionale come un numero negativo e il controllo sulla dimensione massima consentita («if (len > 63 || len + pos + 1 > datalen) {«) non funzionerà, portando a una chiamata a memcpy con un parametro in cui la dimensione dei dati copiati supera la dimensione del buffer.


Fonte: opennet.ru
