7.7 KiB
Abuso de Instaladores en macOS
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!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de HackTricks y HackTricks Cloud.
Información Básica de Pkg
Un paquete instalador 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 funcionar correctamente.
El archivo del paquete en sí es un archivo que contiene una jerarquía de archivos y directorios que se instalarán en el ordenador 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
- Distribución (xml): Personalizaciones (título, texto de bienvenida…) y verificaciones 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 útil (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 preinstalación y postinstalación y más recursos extraídos a un directorio temporal para su 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
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 en bruto típicamente comprimidos y a veces encriptados. Cuando abres un archivo DMG, macOS lo monta como si fuera un disco físico, permitiéndote acceder a su contenido.
Jerarquía
La jerarquía de un archivo DMG puede ser diferente basada en el contenido. Sin embargo, para DMGs de aplicaciones, usualmente sigue esta estructura:
- Nivel Superior: Esta es la raíz de la imagen de disco. A menudo contiene la aplicación y posiblemente un enlace a la carpeta 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 componen la aplicación.
- Enlace a Aplicaciones: Este es un acceso directo a la carpeta 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 app.
Privesc a través del abuso de pkg
Ejecución desde directorios públicos
Si un script de preinstalación o postinstalación se está ejecutando, por ejemplo, desde /var/tmp/Installerutil
, un atacante podría controlar ese script para escalar privilegios cada vez que se ejecute. O otro ejemplo similar:
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, sería capaz de 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
Para más información, consulta esta charla: https://www.youtube.com/watch?v=lTOItyjTTkw
Ejecución mediante montaje
Si un instalador escribe en /tmp/fixedname/bla/bla
, es posible crear un montaje sobre /tmp/fixedname
con noowners para que puedas 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: "Mount(ain) of Bugs" - Csaba Fitzl
pkg como malware
Payload Vacío
Es posible generar un archivo .pkg
solo con scripts de preinstalación y postinstalación sin ningún payload.
JS en Distribution xml
Es posible agregar etiquetas <script>
en el archivo distribution xml del paquete y ese código se ejecutará y puede ejecutar comandos usando system.run
:
Referencias
- DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws
- OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert
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!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sigue a Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub HackTricks y HackTricks Cloud.