
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 . È possibile aggiungere dati arbitrari a questo oggetto directory usando il metodo , che non limita la dimensione dei dati oltre i confini del parametro a 32 bit. Infine, l'exploit può essere attivato chiamando , che a sua volta chiama . crea un oggetto che rappresenta la ROM compilata, inclusi i dati controllati dall'utente aggiunti in precedenza. Passa quindi l'oggetto a , che copia i dati nella regione di memoria puntata da . Si tratta di una regione di memoria di 4096 byte allocata in tramite . Se a vengono passati più di 4096 byte, la scrittura farà traboccare questa allocazione nelle pagine successive.
IOLocalConfigDirectorylocalConfigDirectory_addEntry_BuffersizelocalConfigDirectory_PublishIOFireWireController::UpdateROMUpdateROMOSDataOSDataAppleFWOHCI::updateROMfpNextConfigROMAppleFWOHCI::setupAsyncAppleFWOHCI_IOMemoryBlock32::createlocalConfigDirectory_addEntry_BufferIn 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.