La vulnerabilidad del código del núcleo de Apple afectó a todos los dispositivos

Otro día, otra vulnerabilidad. Descubierta por [Kevin Backhouse], CVE-2018-4407 es un problema particularmente serio porque está presente en toda la línea de productos de Apple, desde el Macbook hasta el Apple Watch. La falla está en el núcleo XNU que comparten todos estos productos.

Este es un problema de desbordamiento del búfer en el manejo de errores de los paquetes de red. El núcleo espera una longitud fija de esos paquetes pero no comprueba para evitar que se escriban más allá del final del buffer.El hecho de que el kernel XNU de Apple alimente todos sus productos es notable, pero problemas como este son un recordatorio de la potencial desventaja de ese enfoque. Gracias a la divulgación responsable, un parche fue retirado en septiembre.

Anatomía de un desbordamiento de búfer

Los desbordamientos de los búferes no son nuevos, pero un recordatorio de lo que está pasando exactamente podría estar en orden. En los idiomas de bajo nivel como el C, el diseñador de software es responsable de administrar la memoria de la computadora manualmente. Asignan la memoria, etiquetando un cierto número de bytes para un uso determinado. Un desbordamiento del búfer es cuando el programa escribe más bytes en la ubicación de la memoria de los que están asignados, escribiendo más allá del límite previsto en partes de la memoria que probablemente están siendo utilizadas para un propósito diferente. En resumen, este desbordamiento se escribe en la memoria que puede contener otros datos o incluso código ejecutable.

Con una vulnerabilidad de desbordamiento del búfer, un atacante puede escribir cualquier código que desee en ese espacio de memoria desbordado, y luego manipular el programa para saltar a ese código recién escrito. Esto se conoce como ejecución de código arbitrario. [Computerphile] tiene un gran recorrido sobre los desbordamientos de búfer y cómo conducen a la ejecución de código.

Esta vulnerabilidad de desbordamiento golpea el núcleo XNU de Apple

[Kevin] se tomó el tiempo para explicar el asunto que encontró más a fondo .La vulnerabilidad proviene de que el código del núcleo hace una suposición sobre los paquetes entrantes. Los mensajes de error de ICMP se envían automáticamente en respuesta a varios eventos de la red. Probablemente estemos más familiarizados con el mensaje de “conexión rechazada”, que indica un puerto cerrado por el cortafuegos. Estos paquetes ICMP incluyen el encabezado IP del paquete que provocó el error. La implementación XNU de este proceso asume que el paquete entrante siempre tendrá un encabezado de la longitud correcta, y copia ese encabezado en un búfer sin comprobar primero la longitud. Un paquete especialmente elaborado puede tener un encabezado más largo, y estos son los datos que desbordan el buffer.

Debido al papel que juega la ICMP en la comunicación del estado de la red, un cortafuegos cerrado no es suficiente para mitigar el ataque. Incluso cuando se envía a un puerto cerrado, la vulnerabilidad puede desencadenarse. Aparte de la actualización a una versión del sistema operativo con parches, la única mitigación es ejecutar el cortafuegos de MacOS en lo que se llama “modo sigiloso”. Este modo no responde a los pings, y lo más importante, deja caer silenciosamente los paquetes en lugar de enviar respuestas de error ICMP. Esta mitigación no es posible para los dispositivos watchOS e iOS.

La buena noticia sobre la vulnerabilidad es que un paquete, malformado de esta manera, tiene pocas posibilidades de pasar por un router. Un atacante debe estar en la misma red física para poder enviar el paquete malicioso. El vector de ataque más probable, entonces, es el WiFi público en la cafetería local.

Vuelva después del descanso para una demostración de este ataque en acción.

Hasta ahora, la vulnerabilidad sólo se conoce por las máquinas de choque, como se ha visto anteriormente. Debido a la naturaleza del problema, es probable que esta vulnerabilidad se convierta eventualmente en un exploit de ejecución de código completo. [Kevin] informó a Apple del problema en privado, y arreglaron el problema en las actualizaciones de septiembre de MacOS e iOS.

Deja un comentario