Este es otro BWAIN, que es nuestra abreviatura de Bug With An Impressive Name.
Esa es la abreviatura que usamos para las vulnerabilidades con nombres, logotipos e incluso sitios web dedicados que son atractivos, interesantes, elegantes, importantes o dramáticos y, a veces, incluso todos estos al mismo tiempo.
Los ejemplos clásicos incluyen:
Heartbleed. La vulnerabilidad de fuga de datos del lado del servidor en OpenSSL, la biblioteca de cifrado utilizada por millones de servidores web en todo el mundo.
Lira de Orfeo. Una falla en el sistema de autenticación Kerberos utilizado por Microsoft Windows y en varios programas de código abierto, incluido Samba. Este es el único BWAIN que podemos recordar que no solo tenía un logotipo, sino también una melodía propia. (Es un ukelele, en caso de que te lo estés preguntando, no una lira real).
BootHole. Un error en GRUB, juego de palabras, el gestor de arranque de Linux más popular.
Esta vez, estamos hablando de NAME:WRECK, una serie de errores en el software de DNS que utilizan varios sistemas operativos.
Este “grupo de errores” aparece en un informe publicado por investigadores de Forescout y JSOF.
El apodo proviene de la palabra “name” en DNS, combinado con el hecho de que todos los errores, teóricamente, podrían permitir que un atacante bloqueara un dispositivo afectado, o quizás algo peor.
DNS, como probablemente sepas, es la abreviatura para sistema de nombres de dominio, que convierte nombres como nakedsecurity.sophos.com
en números de IP como 192.0.66.200
.
Técnicamente, puedes ejecutar una pila de red TCP/IP sin DNS, simplemente haciendo referencia a cada dispositivo solo por su número de red.
Pero incluso las redes de prueba más limitadas y autónomas terminan rápidamente pidiendo DNS, y si alguna vez deseas conectar tu dispositivo o dispositivos a Internet, puedes considerar que la compatibilidad con DNS es imprescindible.
Es por eso que cualquier dispositivo TCP/IP, sin importar cuán pequeño sea y que recursos limitados pueda tener, y cualquier sistema operativo, sin importar cuánto haya sido miniaturizado, incluye código para lo que se conoce como resolución de DNS o búsqueda de DNS.
Ese código necesita saber cómo formular solicitudes DNS, que son paquetes de red binarios codificados de forma compacta especificados en RFC 1035, publicados allá por 1987, cuando cada byte realmente importaba.
El código de búsqueda de DNS también necesita saber cómo deconstruir las respuestas de DNS con formato similar, aunque ese código no creara esos paquetes en primer lugar, y no sepa si puede confiar en la persona que lo hizo.
Como probablemente sepas, dar sentido a los datos binarios, conocido como análisis en la jerga, es muy fácil hacerlo mal.
El hecho de que un programa pueda analizar de manera confiable miles de millones de paquetes bien formados sin problemas no significa que no se comportará mal cuando se enfrente a paquetes deliberadamente mal formados que nunca ocurrirían con un uso regular.
El problema está en los detalles
El informe NAME: WRECK no es solo un error o una vulnerabilidad, y todos se remontan al año pasado, excepto uno.
Afortunadamente, todos están parcheados (al menos uno ha tenido una actualización durante casi un año) pero juntos constituyen un recordatorio valioso de que incluso en la era moderna, los programadores continúan cometiendo errores de codificación de la vieja escuela.
Las vulnerabilidades que se han agrupado bajo la “marca” NAME:WRECK se encontraron en tres sistemas operativos diferentes.
Dos eran sistemas operativos de bajo nivel, a menudo conocidos como RTOS (abreviatura de sistemas operativos en tiempo real) dedicados a dispositivos de Internet de las Cosas (IoT), a saber, Nucleus NET de Siemens y NetX de Microsoft.
El tercero es FreeBSD, ampliamente utilizado como sistema operativo de servidor convencional y como sistema operativo para dispositivos integrados. Como sugiere el nombre, FreeBSD está disponible de forma gratuita, como Linux, pero utiliza una licencia de código abierto mucho más sencilla y libre.
Análisis de errores y problemas de aleatoriedad
Seis de las vulnerabilidades involucraban errores de análisis, donde los datos enviados de vuelta en las respuestas de DNS se procesaban erróneamente, lo que provocaba desbordamientos del búfer.
Algunos de estos podrían explotarse para hacer que el código de búsqueda de DNS lea datos donde no debería, provocando un bloqueo o denegación de servicio (DoS).
Otros podrían ser explotados no solo para leer desde el lugar equivocado sino también para escribir en el lugar equivocado, lo que lleva a la ejecución remota de código (RCE).
RCE, generalmente significa que un atacante puede inyectar malware silenciosamente en un ordenador simplemente enviando paquetes fraudulentos, sin necesidad de iniciar sesión primero o conocer ningún tipo de contraseña.
Un error involucró un error de límite de bucle, donde el código no agregó bytes a una cadena de texto, decidiendo que la cadena aún no estaba llena y volvió por más, agregando en vano cero bytes una y otra vez para siempre, en la esperanza que la cadena eventualmente se hiciera más larga.
El último error implicó un problema de aleatoriedad, donde los números aleatorios únicos agregados como identificadores de transacción en las respuestas de DNS no eran lo suficientemente aleatorios.
Como resultado, los atacantes podrían crear respuestas DNS falsas que pasarían la prueba y realizarían el envenenamiento de DNS en la lista almacenada del dispositivo local de respuestas DNS conocidas.
Al alimentar un dispositivo de Internet con una lista de nombres de servidor y números de IP falsos, los delincuentes podrían engañar a ese dispositivo para que visite sitios impostores, reemplazando los números de IP reales de servidores conocidos con números de IP controlados por los delincuentes.
Los errores son:
Identificador CVE SO Tipo de error Resultado -------------- ----------- ---------------- ------------- CVE-2020-7461 FreeBSD Buffer overwrite RCE CVE-2020-15795 Nucleus NET Buffer overwrite RCE CVE-2020-27009 Nucleus NET Buffer overwrite RCE CVE-2020-27736 Nucleus NET Buffer overread Crash/DoS CVE-2020-27737 Nucleus NET Buffer overread Crash/DoS CVE-2020-27738 Nucleus NET Buffer overread Crash/DoS CVE-2021-25677 Nucleus NET Poor randomness DNS poisoning [NOT ISSUED] NetX Infinite loop Hang/DoS
El informe NAME:WRECK incluye un noveno error, aunque este fue encontrado en 2016 por investigadores de Exodus Intelligence. De alguna manera, ese error nunca recibió un identificador CVE en ese momento, pero se emitió uno de forma retrospectiva, a saber, CVE-2016-20009. Ese error era una sobrescritura del búfer en las redes IP de WindRiver, que aparentemente conduce a la ejecución remota de código. No estamos seguros de si alguna vez se solucionó o si todavía se puede explotar en las versiones actuales de IPNet. Si eres un usuario de WindRiver, te recomendamos que consultes el informe Exodus para obtener más detalles que te ayudarán a determinar si eres vulnerable.
¿Qué hacer?
Como suele ocurrir, el parche es la solución en este caso.
Es casi seguro que los usuarios habituales de FreeBSD ya habrán actualizado sus portátiles y servidores, y es casi seguro que no tendrán que preocuparse.
Sin embargo, si tienes un dispositivo integrado basado en FreeBSD, es posible que quieras ponerte en contacto con el fabricante del dispositivo para confirmar que el parche se ha incluido en el firmware actual del dispositivo.
Dado el interés de los medios en este informe, los desarrolladores que usan Nucleus NET o NetX en sus productos deberían considerar publicar una nota para sus clientes para decir si sus dispositivos son vulnerables o no.
Los programadores interesados en el tipo de errores de codificación de bajo nivel que llevaron a estos errores podrían querer echar un vistazo al informe Forescout / JSOF, que ofrece seis ejemplos prácticos de errores de codificación que deben buscar.