Fuite de mots de passe (et bien plus encore !) sur macOS
Introduction
Cet article explique la vulnérabilité CVE-2024-54471 incluse dans les mises à jour de sécurité d’Apple. Cette vulnérabilité a été corrigée dans macOS Sequoia 15.1, macOS Sonoma 14.7.1 et macOS Ventura 13.7.1. Si vous utilisez un appareil macOS, il est recommandé de le mettre à jour vers la version la plus récente.
Qu’est-ce que le noyau ?
Dans un système d’exploitation, le code qui communique avec le matériel et fournit aux applications un modèle de multitâche est appelé le noyau. Le noyau de macOS est XNU, un noyau hybride qui inclut des variantes du noyau BSD et du noyau Mach.
Histoire de Mach
Le noyau Mach est profondément lié aux guerres Unix des années 1980 et 1990. Mach a commencé comme un projet de recherche sur les systèmes d’exploitation à l’université Carnegie Mellon, a été utilisé dans le système d’exploitation NeXTSTEP, qui a fini par devenir la base de macOS.
Pourquoi Mach ?
Mach a été développé pour réduire la complexité de la conception et de l’utilisation des systèmes Unix. Mach se compose de quatre abstractions fondamentales, qui sont encore utilisées dans le macOS moderne.
Architecture de Mach
Quatre abstractions
- Tâche : environnement dans lequel les threads peuvent s’exécuter, et unité de base de l’allocation des ressources.
- Thread : unité de base de l’utilisation du CPU, fonctionnant avec son propre compteur ordinal au sein d’une tâche.
- Port : canal de communication pour les messages, protégé par le noyau.
- Message : ensemble d’objets de données utilisé pour la communication entre threads.
Tâches, ports et droits sur les ports
Les ports n’existent que dans l’espace noyau et sont exposés à l’espace utilisateur sous forme de droits sur les ports. Plusieurs tâches peuvent disposer du droit d’envoi vers un port, mais une seule tâche peut en détenir le droit de réception.
Structure d’un message
Chaque message Mach se compose d’un en-tête, de descripteurs optionnels, d’une charge utile arbitraire et d’un trailer ajouté par le noyau.
Comment obtenir des droits d’envoi
macOS dispose d’un serveur bootstrap, qui détient les droits de réception sur les ports pour lesquels toutes les tâches possèdent des droits d’envoi. Un client peut demander au serveur bootstrap des droits d’envoi pour un service Mach portant un nom spécifique.
Mach Interface Generator (MIG)
Introduction
MIG est un outil qui génère une interface fonctionnelle pour l’envoi et la réception de messages Mach. Il fournit une interface de style RPC basée sur les messages, ce qui améliore la sûreté mémoire.
Détails techniques
MIG est un wrapper autour des messages Mach ; chaque fonction est appelée une routine, et un ensemble de routines est appelé un sous-système. Le sous-système est indexé dans le champ d’identifiant du message.
Vulnérabilité des serveurs MIG
Sécurité des serveurs MIG
Si un serveur MIG ne vérifie pas l’expéditeur des messages, toute tâche disposant d’un droit d’envoi peut appeler les routines du serveur.
Trouver des serveurs MIG
On peut utiliser l’outil CLI ipsw pour rechercher les binaires qui utilisent le symbole NDR_record. Cela est utile pour trouver des serveurs et des clients MIG.
Vulnérabilité de NetAuthAgent
Présentation de NetAuthAgent
NetAuthAgent est un daemon qui gère les identifiants des serveurs de fichiers sur macOS. Avant la correction de cette vulnérabilité, il les fournissait lorsqu’on demandait les identifiants d’un serveur.
Fonctionnement de NetAuthAgent
NetAuthAgent utilise le Trousseau d’accès de macOS pour stocker les identifiants. Le trousseau d’accès est un gestionnaire centralisé de secrets, et chaque entrée possède sa propre liste de contrôle d’accès.
Serveur MIG de NetAuthAgent
NetAuthAgent expose un serveur MIG enregistré auprès du serveur bootstrap sous le nom com.apple.netauth.user.gui. Ce serveur fournit des routines permettant de lire, créer et écraser des identifiants.
Impact de la vulnérabilité
Exposition des jetons d’API iCloud
Cette vulnérabilité peut exposer des jetons d’API iCloud, permettant à un attaquant d’exfiltrer des informations utilisateur ou de suivre la localisation d’autres appareils.
Ce qu’Apple aurait dû faire
Cet article inclut une discussion sur les mesures qu’Apple aurait dû prendre pour corriger cette vulnérabilité.
1 commentaires
Commentaire Hacker News
Article bien rédigé. Ça me rappelle un incident zero-day qu’Apple a essayé de minimiser dans une certaine mesure. C’était l’affaire où il était possible de contourner la connexion root en « essayant deux fois avec un mot de passe vide ». C’était vers 2017 ou 2018
« ACLs don’t » : <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>
Si l’on expose un mécanisme permettant à un processus de relayer des requêtes Keychain pour un autre processus, cela peut affaiblir la sécurité de tout le système
L’article a fait l’objet d’une petite correction
Ça a pris 8 heures, mais ce post n’est désormais plus dans le top 5 de la première page (il est actuellement #27, toujours en première page mais en bas). Merci pour tous les commentaires
Je me demande si l’auteur fournit réellement le code PoC. J’aimerais tester les mesures d’atténuation. J’ai vu un exemple de code, mais il semble incomplet
Article très intéressant. Je ne savais pas qu’il y avait autant d’histoire derrière la création de Mach et du noyau Darwin
En ce moment, Mach donne l’impression d’être une source fiable de bugs sur macOS. Je sais qu’Apple fait beaucoup d’efforts pour tout verrouiller, mais je me demande s’il existe une voie pour s’éloigner complètement de Mach
[mort]