
CVE-2016-7608: Buffer overflow in IOFireWireFamily.
IOFireWireFamily-overflow è un exploit proof-of-concept per CVE-2016-7608, un buffer overflow in IOFireWireUserClient corretto in macOS Sierra 10.12.2. Questa vulnerabilità può essere sfruttata per causare un denial of service o, potenzialmente, l'esecuzione di codice arbitrario su dispositivi dotati di porta FireWire.
Il metodo AppleFWOHCI::updateROM non controlla la lunghezza di un argomento OSData prima di copiare con bcopy il suo contenuto in una regione di memoria di dimensione fissa allocata tramite AppleFWOHCI_IOMemoryBlock32::create.
L'exploit può essere attivato utilizzando un'istanza di IOFireWireUserClient. La chiamata al metodo localConfigDirectory_Create restituisce un handle a un IOLocalConfigDirectory. È possibile aggiungere dati arbitrari a questo oggetto directory usando il metodo localConfigDirectory_addEntry_Buffer, che non limita la dimensione dei dati oltre i confini del parametro size a 32 bit. Infine, l'exploit può essere attivato chiamando localConfigDirectory_Publish, che a sua volta chiama IOFireWireController::UpdateROM. UpdateROM crea un oggetto OSData che rappresenta la ROM compilata, inclusi i dati controllati dall'utente aggiunti in precedenza. Passa quindi l'oggetto OSData a AppleFWOHCI::updateROM, che copia i dati nella regione di memoria puntata da fpNextConfigROM. Si tratta di una regione di memoria di 4096 byte allocata in AppleFWOHCI::setupAsync tramite AppleFWOHCI_IOMemoryBlock32::create. Se a localConfigDirectory_addEntry_Buffer vengono passati più di 4096 byte, la scrittura farà traboccare questa allocazione nelle pagine successive.
In pratica, la pagina dopo il buffer soggetto a overflow è solitamente non mappata, causando un kernel panic in caso di overflow.
Il codice di IOFireWireFamily-overflow è rilasciato nel pubblico dominio. Come cortesia, ti chiedo di attribuirmi il merito se fai riferimento o usi parte di questo codice.