# Abuso de Instaladores en macOS
Aprende hacking en AWS desde cero hasta experto conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCI脫N**](https://github.com/sponsors/carlospolop)!
* Obt茅n la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colecci贸n exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **脷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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
## Informaci贸n B谩sica de Pkg
Un **paquete de instalaci贸n** de macOS (tambi茅n conocido como archivo `.pkg`) es un formato de archivo utilizado por macOS para **distribuir software**. Estos archivos son como una **caja que contiene todo lo que un software** necesita para instalarse y ejecutarse correctamente.
El archivo del paquete en s铆 es un archivo comprimido que contiene una **jerarqu铆a de archivos y directorios que se instalar谩n en el** ordenador de destino. Tambi茅n puede incluir **scripts** para realizar tareas antes y despu茅s de la instalaci贸n, como configurar archivos de configuraci贸n o limpiar versiones antiguas del software.
### Jerarqu铆a
* **Distribuci贸n (xml)**: Personalizaciones (t铆tulo, texto de bienvenida...) y comprobaciones de script/instalaci贸n
* **PackageInfo (xml)**: Informaci贸n, requisitos de instalaci贸n, ubicaci贸n de instalaci贸n, rutas a scripts a ejecutar
* **Lista de materiales (bom)**: Lista de archivos para instalar, actualizar o eliminar con permisos de archivo
* **Carga (archivo CPIO comprimido con gzip)**: Archivos para instalar en la `ubicaci贸n de instalaci贸n` desde PackageInfo
* **Scripts (archivo CPIO comprimido con gzip)**: Scripts de pre y post instalaci贸n y m谩s recursos extra铆dos a un directorio temporal para su ejecuci贸n.
### Descomprimir
```bash
# Tool to directly get the files inside a package
pkgutil 鈥攅xpand "/path/to/package.pkg" "/path/to/out/dir"
# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"
# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts
```
## Informaci贸n b谩sica de los archivos DMG
Los archivos DMG, o Im谩genes de Disco de Apple, son un formato de archivo utilizado por el macOS de Apple para im谩genes de disco. Un archivo DMG es esencialmente una **imagen de disco montable** (contiene su propio sistema de archivos) que contiene datos de bloques crudos generalmente comprimidos y a veces encriptados. Cuando abres un archivo DMG, macOS lo **monta como si fuera un disco f铆sico**, lo que te permite acceder a su contenido.
### Jerarqu铆a
La jerarqu铆a de un archivo DMG puede ser diferente seg煤n el contenido. Sin embargo, para los DMGs de aplicaciones, generalmente sigue esta estructura:
- Nivel superior: Este es la ra铆z de la imagen de disco. A menudo contiene la aplicaci贸n y posiblemente un enlace a la carpeta de Aplicaciones.
- Aplicaci贸n (.app): Esta es la aplicaci贸n real. En macOS, una aplicaci贸n es t铆picamente un paquete que contiene muchos archivos y carpetas individuales que conforman la aplicaci贸n.
- Enlace de Aplicaciones: Este es un acceso directo a la carpeta de Aplicaciones en macOS. El prop贸sito de esto es facilitar la instalaci贸n de la aplicaci贸n. Puedes arrastrar el archivo .app a este acceso directo para instalar la aplicaci贸n.
## Escalada de privilegios mediante el abuso de pkg
### Ejecuci贸n desde directorios p煤blicos
Si un script de pre o post instalaci贸n est谩 ejecutando, por ejemplo, desde **`/var/tmp/Installerutil`**, y un atacante pudiera controlar ese script, podr铆a escalar privilegios cada vez que se ejecute. Otro ejemplo similar:
### AuthorizationExecuteWithPrivileges
Esta es una [funci贸n p煤blica](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que varios instaladores y actualizadores llamar谩n para **ejecutar algo como root**. Esta funci贸n acepta la **ruta** del **archivo** a **ejecutar** como par谩metro, sin embargo, si un atacante pudiera **modificar** este archivo, podr谩 **abuzar** de su ejecuci贸n con root para **escalar privilegios**.
```bash
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
```
### Ejecuci贸n mediante montaje
Si un instalador escribe en `/tmp/fixedname/bla/bla`, es posible **crear un montaje** sobre `/tmp/fixedname` sin propietarios para poder **modificar cualquier archivo durante la instalaci贸n** y abusar del proceso de instalaci贸n.
Un ejemplo de esto es **CVE-2021-26089** que logr贸 **sobrescribir un script peri贸dico** para obtener ejecuci贸n como root. Para m谩s informaci贸n, echa un vistazo a la charla: [**OBTS v4.0: "Monta帽a de Errores" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## pkg como malware
### Carga 煤til vac铆a
Es posible simplemente generar un archivo **`.pkg`** con **scripts de pre y post-instalaci贸n** sin ninguna carga 煤til.
### JS en Distribution xml
Es posible agregar etiquetas **`