Filtración de contraseñas (¡y mucho más!) en macOS
Introducción
Este artículo explica la vulnerabilidad CVE-2024-54471 incluida en las actualizaciones de seguridad de Apple. Esta vulnerabilidad fue corregida en macOS Sequoia 15.1, macOS Sonoma 14.7.1 y macOS Ventura 13.7.1. Si usas un dispositivo con macOS, se recomienda actualizar a la versión más reciente.
¿Qué es el kernel?
En un sistema operativo, al código que se comunica con el hardware y proporciona a las aplicaciones un modelo de multitarea se le llama kernel. El kernel de macOS es XNU, un kernel híbrido que incluye variantes del kernel BSD y del kernel Mach.
Historia de Mach
El kernel Mach está profundamente entrelazado con las guerras de Unix de las décadas de 1980 y 1990. Mach comenzó como un proyecto de investigación de sistemas operativos en la Universidad Carnegie Mellon, se usó en el sistema operativo NeXTSTEP y, con el tiempo, se convirtió en la base de macOS.
¿Por qué Mach?
Mach fue desarrollado para reducir la complejidad del diseño y uso de los sistemas Unix. Mach está compuesto por cuatro abstracciones básicas, que todavía se usan en el macOS moderno.
Arquitectura de Mach
Cuatro abstracciones
- Tareas: el entorno en el que pueden ejecutarse los hilos, y la unidad básica de asignación de recursos.
- Hilos: la unidad básica de uso de CPU, que funciona con un contador de programa independiente dentro de una tarea.
- Puertos: canales de comunicación para mensajes, protegidos por el kernel.
- Mensajes: conjuntos de objetos de datos usados para la comunicación entre hilos.
Tareas, puertos y derechos sobre puertos
Los puertos existen solo en el espacio del kernel y en el espacio de usuario se exponen como derechos sobre puertos. Varias tareas pueden tener derechos de envío sobre un puerto, pero solo una tarea puede tener el derecho de recepción.
Estructura de los mensajes
Cada mensaje Mach está compuesto por un encabezado, descriptores opcionales, una carga útil arbitraria y un tráiler agregado por el kernel.
Cómo obtener derechos de envío
macOS cuenta con un servidor bootstrap, que posee los derechos de recepción de puertos sobre los que todas las tareas tienen derechos de envío. Los clientes pueden pedirle al servidor bootstrap derechos de envío para un servicio Mach con un nombre específico.
Generador de interfaces Mach (MIG)
Introducción
MIG es una herramienta que genera interfaces funcionales para enviar y recibir mensajes Mach. Proporciona una interfaz estilo RPC basada en mensajes que mejora la seguridad de memoria.
Detalles técnicos
MIG es un envoltorio para mensajes Mach; cada función se llama rutina y un conjunto de rutinas se llama subsistema. Los subsistemas se indexan en el campo de ID del mensaje.
Vulnerabilidad de los servidores MIG
Seguridad de los servidores MIG
Si un servidor MIG no valida al remitente del mensaje, cualquier tarea con derechos de envío puede invocar las rutinas del servidor.
Cómo encontrar servidores MIG
Se puede usar la herramienta CLI ipsw para buscar binarios que usen el símbolo NDR_record. Esto es útil para encontrar servidores y clientes MIG.
Vulnerabilidad en NetAuthAgent
Introducción a NetAuthAgent
NetAuthAgent es un daemon que maneja las credenciales de servidores de archivos en macOS. Antes de que esta vulnerabilidad fuera corregida, entregaba las credenciales del servidor cuando se le solicitaban.
Cómo funciona NetAuthAgent
NetAuthAgent usa el Llavero de macOS para almacenar credenciales. El Llavero es un gestor centralizado de secretos y cada elemento tiene su propia lista de control de acceso.
Servidor MIG de NetAuthAgent
NetAuthAgent expone un servidor MIG registrado en el servidor bootstrap con el nombre com.apple.netauth.user.gui. Este servidor ofrece rutinas que pueden leer, crear y sobrescribir credenciales.
Impacto de la vulnerabilidad
Exposición de tokens de API de iCloud
Esta vulnerabilidad expone tokens de API de iCloud, lo que permite a un atacante filtrar información del usuario o rastrear la ubicación de otros dispositivos.
Lo que Apple debió haber hecho
Este artículo incluye una discusión sobre qué medidas debió haber tomado Apple para corregir esta vulnerabilidad.
1 comentarios
Opiniones en Hacker News
Está bien escrito. Me recordó al incidente de día cero que Apple intentó ocultar hasta cierto punto. Era aquel caso en el que se podía eludir el inicio de sesión como
rootal "intentar una contraseña vacía dos veces". Esto fue por ahí de 2017 o 2018"ACLs don’t": <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>
Si un proceso expone un mecanismo para hacer de proxy de consultas al llavero para otro proceso, puede debilitar la seguridad de todo el sistema
Hubo una corrección menor en el artículo
Tomó 8 horas, pero esta publicación ya no está entre los 5 primeros de la portada (ahora está en el #27, sigue en la portada pero abajo). Gracias por todos los comentarios
Me pregunto si el autor proporciona código PoC real. Quiero probar las medidas de mitigación. Vi el código de ejemplo, pero parece incompleto
Artículo muy interesante. No sabía que hubiera tanta historia detrás de la creación de Mach y del kernel Darwin
En este momento, Mach se siente como una fuente confiable de bugs en macOS. Sé que Apple está trabajando duro para bloquear todo eso, pero me pregunto si existe una ruta para alejarse por completo de Mach
[muerto]