L’équipe Project Zero de Google est réputée pour sa capacité à détecter les failles de sécurité affectant ses propres produits ainsi que ceux fabriqués par d’autres sociétés. Ses membres localisent les défauts des logiciels, les signalent en privé aux fabricants et leur donnent 90 jours pour résoudre le problème avant de le divulguer publiquement.
L’année dernière, l’équipe a révélé des vulnérabilités dans Windows 10 S et Microsoft Edge. Maintenant, elle a exposé une faille « de gravité élevée » dans le noyau de macOS.
Un chercheur en sécurité du Projet Zero de Google a découvert que, même si le noyau de macOS, XNU, autorise le comportement de copie sur écriture (COW) dans certains cas, il est essentiel que toute mémoire copiée ne soit pas disponible pour modification depuis le processus source.
Le copy-on-write ou copie sur écriture (souvent désigné par son sigle anglais COW) est une stratégie d’optimisation utilisée en programmation. L’idée fondamentale : si de multiples appelants demandent des ressources initialement impossibles à distinguer, vous pouvez leur donner des pointeurs vers la même ressource. Cette fiction peut être maintenue jusqu’à ce qu’un appelant modifie sa « copie » de la ressource. À ce moment-là, une copie privée est créée. Cela évite que le changement soit visible ailleurs. Ceci se produit de manière transparente pour les appelants. L’avantage principal est que si un appelant ne fait jamais de modifications, la copie privée n’est jamais créée.
L’utilisation principale du Copy-on-write est la mémoire virtuelle de systèmes d’exploitation. Lorsqu’un processus crée une copie de lui-même, les pages de la mémoire qui doivent être modifiées soit par le processus soit par sa copie sont marquées copy-on-write. Lorsque le processus modifie une page mémoire, le noyau du système d’exploitation intercepte l’opération et copie la page mémoire pour que les changements de la mémoire d’un processus n’affectent pas celle d’un autre.
Une autre utilisation est la fonction calloc. Elle peut être implémentée en ayant une page de mémoire vive remplie par des zéros. Quand la mémoire est allouée, les pages retournées font toutes référence à la page de zéros et sont marquées copy-on-write. De cette façon, la quantité de mémoire vive allouée pour le processus n’augmente pas tant que les données ne sont pas écrites dans le tampon retourné par calloc. Typiquement, cela n’est fait que pour les allocations mémoire importantes.
Un chercheur en sécurité du Project Zero a découvert que si une image de système de fichiers appartenant à un utilisateur était modifiée, le sous-système de gestion virtuel n’était pas informé des modifications, ce qui signifie qu’un attaquant pouvait potentiellement entreprendre des actions malveillantes sans que le système de fichiers en soit informé.
Le chercheur a informé Apple de la faille en novembre 2018, mais la société n’a pas encore résolu le problème même après le dépassement du délai de 90 jours. C’est pourquoi le bogue est maintenant rendu public avec un label « sévérité élevée ». Cela dit, Apple a reconnu le problème et a travaillé avec Project Zero sur un correctif pour une future version de macOS.
Source : Project Zero