hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md

6.8 KiB

Abuso de Instaladores en macOS

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

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 equipo objetivo. 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

https://www.youtube.com/watch?v=iASSG0_zobQ
  • 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 para 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 la ejecución.

Descomprimir

# Tool to directly get the files inside a package
pkgutil —expand "/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

Para visualizar el contenido del instalador sin descomprimirlo manualmente, también puedes usar la herramienta gratuita Suspicious Package.

Información Básica de DMG

Los archivos DMG, o Apple Disk Images, son un formato de archivo utilizado por 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 a través del 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:

https://www.youtube.com/watch?v=iASSG0_zobQ

AuthorizationExecuteWithPrivileges

Esta es una función pública 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á abusar de su ejecución con root para escalar privilegios.

# 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 Bugs" - Csaba Fitzl

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 xml de Distribución

Es posible agregar etiquetas <script> en el archivo xml de distribución del paquete y ese código se ejecutará y puede ejecutar comandos utilizando system.run:

Referencias