Se ha identificado una vulnerabilidad en el proceso en segundo plano slaacd, responsable de la autoconfiguración de direcciones IPv6 en OpenBSD (IPv6 Stateless Address Autoconfiguration, RFC 4862), que conduce a un desbordamiento de buffer al recibir un anuncio de enrutador IPv6 (RA, Router Advertisement) especialmente diseñado.
Inicialmente, la funcionalidad de autoconfiguración de direcciones IPv6 se implementó a nivel del núcleo, pero a partir de OpenBSD 6.2 se trasladó a un proceso separado y sin privilegios, slaacd. Este proceso es responsable de enviar mensajes RS (Router Solicitation) y de analizar las respuestas RA (Router Advertisement) que contienen información sobre el enrutador y los parámetros de conexión de red.
En febrero, se corrigió un error en slaacd que provocaba un cierre inesperado al especificar 7 servidores en la lista RDNSS (Recursive DNS Servers). Este descuido llamó la atención de investigadores independientes que intentaron estudiar el código de slaacd en busca de otros errores que surgieran al analizar los campos en los mensajes RA. El análisis mostró que había otro problema en el código, que se manifestaba al procesar el campo DNSSL (DNS Search List), que incluye listas de nombres de dominio y patrones de hosts para DNS.
Cada nombre en la lista DNSSL se codifica utilizando un delimitador de código nulo y etiquetas unibyte intermedias que definen el tamaño de los datos que siguen. La vulnerabilidad se debe a que en el código de análisis de la lista el campo del tamaño se copia en una variable de tipo entero con signo ("len = data[pos]"). Por lo tanto, si se especifica en el campo un valor con el bit más significativo establecido, este valor se interpretará en el operador condicional como un número negativo y la verificación del tamaño máximo permitido ("if (len > 63 || len + pos + 1 > datalen) {") no se activará, lo que llevará a una llamada a memcpy con un parámetro cuyo tamaño de datos copiados supera el tamaño del buffer.


Fuente: opennet.ru
