
CVE-2016-7608: Desbordamiento de búfer en IOFireWireFamily.
IOFireWireFamily-overflow es un exploit de prueba de concepto para CVE-2016-7608, un desbordamiento de búfer en IOFireWireUserClient que se corrigió en macOS Sierra 10.12.2. Esta vulnerabilidad puede provocar una denegación de servicio o posiblemente la ejecución de código arbitrario en dispositivos con un puerto FireWire.
El método AppleFWOHCI::updateROM no comprueba la longitud de un argumento OSData antes de copiar su contenido con bcopy a una región de memoria de tamaño fijo asignada mediante AppleFWOHCI_IOMemoryBlock32::create.
El exploit se puede activar mediante una instancia de IOFireWireUserClient. Llamar al método localConfigDirectory_Create produce un handle a un . Se pueden añadir datos arbitrarios a este objeto de directorio mediante el método , que no restringe el tamaño de los datos más allá de los límites del parámetro de 32 bits. Finalmente, el exploit se puede activar llamando a , que a su vez llama a . crea un objeto que representa la ROM compilada, incluidos los datos controlados por el usuario añadidos anteriormente. Luego pasa el objeto a , que copia los datos en la región de memoria apuntada por . Esta es una región de memoria de 4096 bytes asignada en mediante . Si se pasan más de 4096 bytes a , la escritura desbordará esta asignación hacia las páginas siguientes.
IOLocalConfigDirectorylocalConfigDirectory_addEntry_BuffersizelocalConfigDirectory_PublishIOFireWireController::UpdateROMUpdateROMOSDataOSDataAppleFWOHCI::updateROMfpNextConfigROMAppleFWOHCI::setupAsyncAppleFWOHCI_IOMemoryBlock32::createlocalConfigDirectory_addEntry_BufferEn la práctica, la página posterior al búfer desbordado suele estar sin mapear, lo que provoca un pánico del kernel al desbordarse.
El código de IOFireWireFamily-overflow se publica en el dominio público. Como cortesía, pido que si haces referencia o usas cualquier parte de este código, me lo atribuyas.