
CVE-2016-7608: Débordement de tampon dans IOFireWireFamily.
IOFireWireFamily-overflow est un exploit de preuve de concept pour CVE-2016-7608, un débordement de tampon dans IOFireWireUserClient qui a été corrigé dans macOS Sierra 10.12.2. Cette vulnérabilité peut être déclenchée pour provoquer un déni de service ou éventuellement une exécution de code arbitraire sur les appareils dotés d'un port FireWire.
La méthode AppleFWOHCI::updateROM ne vérifie pas la longueur d'un argument OSData avant de copier (avec bcopy) son contenu dans une région mémoire de taille fixe allouée à l'aide de AppleFWOHCI_IOMemoryBlock32::create.
L'exploit peut être déclenché en utilisant une instance de IOFireWireUserClient. L'appel de la méthode localConfigDirectory_Create renvoie un descripteur vers un IOLocalConfigDirectory. Des données arbitraires peuvent être ajoutées à cet objet répertoire à l'aide de la méthode localConfigDirectory_addEntry_Buffer, qui ne limite pas la taille des données au-delà des limites du paramètre size sur 32 bits. Enfin, l'exploit peut être déclenché en appelant localConfigDirectory_Publish, qui appelle finalement IOFireWireController::UpdateROM. UpdateROM crée un objet OSData représentant la ROM compilée, y compris les données contrôlées par l'utilisateur ajoutées précédemment. Il passe ensuite l'objet OSData à AppleFWOHCI::updateROM, qui copie les données dans la région mémoire pointée par fpNextConfigROM. Il s'agit d'une région mémoire de 4096 octets allouée dans AppleFWOHCI::setupAsync à l'aide de AppleFWOHCI_IOMemoryBlock32::create. Si plus de 4096 octets sont passés à localConfigDirectory_addEntry_Buffer, alors l'écriture dépassera cette allocation sur les pages suivantes.
En pratique, la page suivant le tampon saturé est généralement non mappée, ce qui provoque un noyau paniqué en cas de débordement.
Le code IOFireWireFamily-overflow est placé dans le domaine public. Par courtoisie, je demande que si vous référencez ou utilisez une partie de ce code, vous m'en attribuiez le crédit.