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

9 KiB

Abus des Installateurs macOS

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Informations de Base sur les Pkg

Un package d'installation macOS (également connu sous le nom de fichier .pkg) est un format de fichier utilisé par macOS pour distribuer des logiciels. Ces fichiers sont comme une boîte qui contient tout ce dont un logiciel a besoin pour s'installer et fonctionner correctement.

Le fichier du package est en fait une archive qui contient une hiérarchie de fichiers et de répertoires qui seront installés sur la cible. Il peut également inclure des scripts pour effectuer des tâches avant et après l'installation, comme la configuration des fichiers de configuration ou le nettoyage des anciennes versions du logiciel.

Hiérarchie

https://www.youtube.com/watch?v=iASSG0_zobQ
  • Distribution (xml) : Personnalisations (titre, texte de bienvenue...) et vérifications de script/installation
  • PackageInfo (xml) : Infos, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
  • Liste des matériaux (bom) : Liste des fichiers à installer, mettre à jour ou supprimer avec les autorisations de fichier
  • Charge utile (archive CPIO compressée gzip) : Fichiers à installer dans l'emplacement d'installation à partir de PackageInfo
  • Scripts (archive CPIO compressée gzip) : Scripts d'installation pré et post et autres ressources extraites vers un répertoire temporaire pour l'exécution.

Décompression

# 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

Pour visualiser le contenu de l'installateur sans le décompresser manuellement, vous pouvez également utiliser l'outil gratuit Suspicious Package.

Informations de base sur les fichiers DMG

Les fichiers DMG, ou images disque Apple, sont un format de fichier utilisé par macOS d'Apple pour les images disque. Un fichier DMG est essentiellement une image disque montable (il contient son propre système de fichiers) qui contient des données de bloc brut généralement compressées et parfois chiffrées. Lorsque vous ouvrez un fichier DMG, macOS le monte comme s'il s'agissait d'un disque physique, vous permettant d'accéder à son contenu.

{% hint style="danger" %} Notez que les installateurs .dmg prennent en charge tant de formats que par le passé, certains d'entre eux contenant des vulnérabilités ont été abusés pour obtenir une exécution de code kernel. {% endhint %}

Hiérarchie

La hiérarchie d'un fichier DMG peut être différente en fonction du contenu. Cependant, pour les DMG d'application, elle suit généralement cette structure :

  • Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications.
  • Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels qui composent l'application.
  • Lien vers Applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but de ceci est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application.

Privilège élevé via abus de pkg

Exécution à partir de répertoires publics

Si un script d'installation pré ou post exécute par exemple à partir de /var/tmp/Installerutil, et qu'un attaquant pouvait contrôler ce script, il pourrait escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :

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

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

AuthorizationExecuteWithPrivileges

Il s'agit d'une fonction publique que plusieurs installateurs et mises à jour appelleront pour exécuter quelque chose en tant que root. Cette fonction accepte le chemin du fichier à exécuter en tant que paramètre, cependant, si un attaquant pouvait modifier ce fichier, il serait capable d'abuser de son exécution avec les privilèges root pour escalader les privilèges.

# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig

Pour plus d'informations, consultez cette présentation : https://www.youtube.com/watch?v=lTOItyjTTkw

Exécution par montage

Si un installateur écrit dans /tmp/fixedname/bla/bla, il est possible de créer un montage sur /tmp/fixedname sans propriétaires afin de modifier n'importe quel fichier pendant l'installation pour abuser du processus d'installation.

Un exemple de cela est CVE-2021-26089 qui a réussi à écraser un script périodique pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : OBTS v4.0: "Mont(agne) de Bugs" - Csaba Fitzl

pkg en tant que logiciel malveillant

Charge utile vide

Il est possible de simplement générer un fichier .pkg avec des scripts de pré et post-installation sans aucune charge utile.

JS dans le xml de distribution

Il est possible d'ajouter des balises <script> dans le fichier xml de distribution du package et ce code sera exécuté et il peut exécuter des commandes en utilisant system.run:

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :