Projet RSS Zéro
Suivre
Les pointeurs fuient à travers les structures de données indexées par pointeur
Google Project Zero a discuté de la nécessité de fuites ASLR à distance pour exploiter les bogues de corruption de mémoire sur les appareils Apple. Cela a conduit à la découverte d'une technique qui pourrait permettre de fuir à distance un pointeur sans violations de la sécurité de la mémoire ni attaques temporelles. La méthode s'applique aux surfaces d'attaque qui désérialisent, resérialisent et renvoient des données fournies par l'attaquant. Bien qu'aucune surface d'attaque immédiate dans le monde réel n'ait été identifiée sur macOS/iOS, la technique a été testée à l'aide d'un cas artificiel avec NSKeyedArchiver. Le problème a été signalé à Apple et corrigé, bien qu'aucune entrée publique de suivi des bogues n'ait été créée en raison de l'absence d'impact réel démontré. Cette technique novatrice s'appuie sur des travaux antérieurs liés aux attaques par collision de tables de hachage. Historiquement, les attaques hashDoS exploitaient les performances des tables de hachage dans le pire des cas pour provoquer un déni de service. Des recherches antérieures ont également suggéré l'utilisation de collisions de hachage pour fuir des adresses. Le concept hashDoS peut être considéré comme un attaquant ralentissant l'accès à des compartiments de hachage spécifiques. Ce principe a été exploité dans Firefox pour fuir des adresses du tas par des mesures temporelles d'insertions dans des Map JavaScript. L'itération sur des structures de données indexées par des pointeurs peut également révéler des informations sur les adresses des objets. Les mécanismes de sérialisation, en particulier ceux qui autorisent des graphes d'objets arbitraires, peuvent être dangereux. NSKeyedUnarchiver d'Apple fonctionne avec une liste blanche de classes désérialisables. Un cas de test spécifique vise à fuir le pointeur du cache partagé en désérialisant et en resérialisant des données fournies par l'attaquant à l'aide de NSKeyedUnarchiver. Le hachage de l'objet singleton NSNull, lorsqu'il n'est pas explicitement géré, est par défaut son adresse, qui est stockée dans le cache partagé. Les instances NSNumber sont hachées différemment, en fonction de leur valeur numérique. Les dictionnaires utilisent des codes de hachage modulo le nombre de compartiments pour gérer le placement des clés.