1 puntos por GN⁺ 2025-03-21 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2025-03-21
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 root al "intentar una contraseña vacía dos veces". Esto fue por ahí de 2017 o 2018

    • Si ingresabas un nombre de usuario administrador e intentabas iniciar sesión con una contraseña vacía, al principio aparecía una advertencia de que la contraseña era incorrecta. Si ignorabas la advertencia y presionabas el botón de inicio de sesión por segunda vez, iniciabas sesión como ese usuario
    • Este problema se parchó poco después de que se difundiera en redes sociales. Sigue pareciendo un error grave
    • Parece que todavía hay problemas con el mecanismo de autenticación de Mac. Es interesante que se mencione el sistema de puertos. Es un aspecto poco conocido del kernel Mach
  • "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

    • Esto parece un caso del problema del diputado confuso: <a href="https://en.wikipedia.org/wiki/Confused_deputy_problem" rel="nofollow">https://en.wikipedia.org/wiki/Confused_deputy_problem</a>;
    • Un diseño basado en capacidades debería poder prevenir este tipo de problemas de forma sistemática
  • Hubo una corrección menor en el artículo

    • La verificación de permisos no está en la capa Mach del kernel
    • <a href="https://github.com/nmggithub/wts/commit/2bdce1c0c76c7adc360e17a6a42ee547462b99d3" rel="nofollow">https://github.com/nmggithub/wts/…;
    • Fue un cambio de una sola palabra para corregir un error factual sobre cómo funciona XNU
  • 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

    • Me pregunto qué riesgo hay realmente en la práctica
  • 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]