
Contournement TCC
En tant qu'étudiant, j'ai un accès limité aux appareils sur lesquels je peux tester cette vulnérabilité. Les versions que j'ai testées jusqu'à présent sont MacOS 12.3.1, MacOS 12.3, MacOS 12.0, MacOS 10.15.7 et MacOS 11.6.1. La vulnérabilité fonctionne sur toutes les versions testées.
Impact : Une application malveillante pourrait être en mesure de contourner certaines préférences de confidentialité
Description : Lorsqu'un exécutable est supprimé pendant son exécution, le processus peut contourner les restrictions relatives à l'enregistrement d'écran ainsi qu'à certains paramètres d'accessibilité, notamment l'injection de frappes clavier (via metasploit).
Raisons possibles : macOS ne peut pas trouver les permissions de l'exécutable parent du processus et n'empêche donc pas l'enregistrement d'écran. Cependant, il est déroutant que la caméra et le micro restent correctement restreints.
Détails :
tccutil reset All entraîne l'affichage d'une invite de permission -- L'accès à la caméra ou au micro entraîne également l'affichage d'une invite de permission.Cela fonctionne sur une installation fraîche de macOS.
Exécuter le POC depuis src/POC.sh produira une capture d'écran sans invite TCC et inclura toutes les fenêtres visibles par l'utilisateur. Le script doit occasionnellement être exécuté plusieurs fois (max 3) pour qu'une capture d'écran soit produite.
Cette exploitation a été découverte pour la première fois par moi en expérimentant avec la livraison web de Metasploit. J'ai découvert qu'en supprimant l'exécutable déposé immédiatement après l'ouverture d'un shell meterpreter, le shell acquiert des capacités qui sont normalement verrouillées derrière une invite TCC. Cette vulnérabilité permet également à un attaquant d'injecter des frappes clavier. Cependant, je ne suis pas développeur Objective-C et n'ai donc pas pu créer mon propre POC. Cet effet peut toujours être obtenu via Metasploit.
src/POC.sh -- Script shell : Copie screenshot, l'exécute, et le supprime pendant son exécution.
src/screenshot -- Exécutable Mach-O : Prend une capture d'écran et la sauvegarde dans src/screenshot.png. Compilé à partir de src/screenshot.m.
src/screenshot.m -- Crédits à theevilbit pour le code de base. La seule modification que j'ai apportée a été d'ajouter un délai de 3 secondes avant la capture d'écran pour permettre assez de temps pour supprimer l'exécutable avant que la capture ne soit prise.