Le firmware iPhone 3.1.3 de février 2010 a permis à Apple de corriger plusieurs vulnérabilités. La plus notable affectait le chargeur de démarrage iBoot et permettait de jailbreaker les iPhones 3GS. Une autre faille intéressante découverte par Tobias Klein a également été patchée, il s'agissait d'un stack buffer overflow dans la gestion des fichiers audio au format MP4 [CVE]. L'exploitation des failles de sécurité sur l'iPhone est rendue compliquée par l'utilisation du bit XN (eXecute Never) du CPU ARM, empêchant l'exécution de code sur la pile et le tas. Nous présentons ici comment utiliser le « return oriented programming » pour exploiter cette faille.
1. Analyse de la vulnérabilité
1.1 Le format MP4 et le démon mediaserverd
Un fichier MP4 est un conteneur composé de plusieurs blocs appelés « atomes », identifiés par un tag ASCII de 4 octets précédé par la taille du bloc. Ces atomes peuvent être imbriqués et vont contenir des métadonnées ou des flux audio/vidéo. Un conteneur MP4 commence toujours par un atome « ftyp » qui indique le format des données contenues dans le fichier.
La gestion des fonctionnalités multimédias de l'iPhone est assurée par le démon mediaserverd, qui expose différentes méthodes via une interface IPC. Ce démon va donc gérer la lecture des flux audio et vidéo à la demande des différentes applications du téléphone, et en particulier décoder les différents formats de fichiers.
1.2 Description du bug
La vulnérabilité concerne la fonction MP4AudioStream::ParseHeader dans la bibliothèque AudioToolbox. Le prologue de la fonction est le suivant :
STMFD SP!,...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première