macOS Dirty NIB
Para más detalles sobre la técnica, consulta la publicación original en: https://blog.xpnsec.com/dirtynib/ y la siguiente publicación de https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/. Aquí hay un resumen:
¿Qué son los archivos NIB?
Los archivos Nib (abreviatura de NeXT Interface Builder), parte del ecosistema de desarrollo de Apple, están destinados a definir elementos de UI y sus interacciones en aplicaciones. Incluyen objetos serializados como ventanas y botones, y se cargan en tiempo de ejecución. A pesar de su uso continuo, Apple ahora aboga por Storyboards para una visualización más completa del flujo de UI.
El archivo Nib principal se referencia en el valor NSMainNibFile
dentro del archivo Info.plist
de la aplicación y se carga mediante la función NSApplicationMain
ejecutada en la función main
de la aplicación.
Proceso de Inyección de Dirty Nib
Creación y Configuración de un Archivo NIB
Configuración Inicial:
Crea un nuevo archivo NIB usando XCode.
Agrega un objeto a la interfaz, configurando su clase a
NSAppleScript
.Configura la propiedad
source
inicial a través de Atributos de Tiempo de Ejecución Definidos por el Usuario.
Gadget de Ejecución de Código:
La configuración facilita la ejecución de AppleScript bajo demanda.
Integra un botón para activar el objeto
Apple Script
, desencadenando específicamente el selectorexecuteAndReturnError:
.
Pruebas:
Un simple Apple Script para fines de prueba:
Prueba ejecutando en el depurador de XCode y haciendo clic en el botón.
Apuntando a una Aplicación (Ejemplo: Pages)
Preparación:
Copia la aplicación objetivo (por ejemplo, Pages) en un directorio separado (por ejemplo,
/tmp/
).Inicia la aplicación para eludir problemas de Gatekeeper y almacenarla en caché.
Sobrescribiendo el Archivo NIB:
Reemplaza un archivo NIB existente (por ejemplo, About Panel NIB) con el archivo DirtyNIB creado.
Ejecución:
Desencadena la ejecución interactuando con la aplicación (por ejemplo, seleccionando el elemento del menú
About
).
Prueba de Concepto: Acceso a Datos del Usuario
Modifica el AppleScript para acceder y extraer datos del usuario, como fotos, sin el consentimiento del usuario.
Ejemplo de Código: Archivo .xib Malicioso
Accede y revisa un ejemplo de un archivo .xib malicioso que demuestra la ejecución de código arbitrario.
Otro Ejemplo
En la publicación https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/ puedes encontrar un tutorial sobre cómo crear un dirty nib.
Abordando las Restricciones de Lanzamiento
Las restricciones de lanzamiento obstaculizan la ejecución de aplicaciones desde ubicaciones inesperadas (por ejemplo,
/tmp
).Es posible identificar aplicaciones que no están protegidas por restricciones de lanzamiento y apuntar a ellas para la inyección de archivos NIB.
Otras Protecciones de macOS
Desde macOS Sonoma en adelante, las modificaciones dentro de los paquetes de aplicaciones están restringidas. Sin embargo, los métodos anteriores involucraban:
Copiar la aplicación a una ubicación diferente (por ejemplo,
/tmp/
).Renombrar directorios dentro del paquete de la aplicación para eludir las protecciones iniciales.
Después de ejecutar la aplicación para registrarse con Gatekeeper, modificar el paquete de la aplicación (por ejemplo, reemplazando MainMenu.nib con Dirty.nib).
Renombrar los directorios de nuevo y volver a ejecutar la aplicación para ejecutar el archivo NIB inyectado.
Nota: Las actualizaciones recientes de macOS han mitigado este exploit al prevenir modificaciones de archivos dentro de los paquetes de aplicaciones después de la caché de Gatekeeper, lo que hace que el exploit sea ineficaz.
Last updated