
CVE-2016-7608: Pufferüberlauf in IOFireWireFamily.
IOFireWireFamily-overflow ist ein Proof-of-Concept-Exploit für CVE-2016-7608, einen Pufferüberlauf in
IOFireWireUserClient, der in macOS Sierra 10.12.2 behoben wurde. Diese Sicherheitslücke kann ausgelöst
werden, um einen Denial-of-Service oder möglicherweise die Ausführung beliebigen Codes auf Geräten mit
einem FireWire-Anschluss zu verursachen.
Die Methode AppleFWOHCI::updateROM überprüft nicht die Länge eines OSData-Arguments, bevor sie
dessen Inhalt mittels bcopy in einen Speicherbereich fester Größe kopiert, der mit
AppleFWOHCI_IOMemoryBlock32::create reserviert wurde.
Der Exploit kann mithilfe einer Instanz von IOFireWireUserClient ausgelöst werden. Der Aufruf der Methode
localConfigDirectory_Create liefert ein Handle auf ein . Diesem Verzeichnisobjekt
können mit der Methode beliebige Daten hinzugefügt werden, die die
Größe des Datenparameters nicht über die Grenzen des 32-Bit--Parameters hinaus einschränkt.
Schließlich kann der Exploit durch Aufruf von ausgelöst werden, was
letztendlich aufruft. erstellt ein -Objekt, das das
kompilierte ROM darstellt, einschließlich der zuvor hinzugefügten, vom Benutzer kontrollierten Daten.
Anschließend übergibt es das -Objekt an , das die Daten in den
Speicherbereich kopiert, auf den zeigt. Dies ist ein 4096-Byte-Speicherbereich, der in
mittels reserviert wird. Wenn mehr als
4096 Bytes an übergeben werden, läuft der Schreibvorgang über diese
Reservierung auf die nachfolgenden Seiten über.
IOLocalConfigDirectorylocalConfigDirectory_addEntry_BuffersizelocalConfigDirectory_PublishIOFireWireController::UpdateROMUpdateROMOSDataOSDataAppleFWOHCI::updateROMfpNextConfigROMAppleFWOHCI::setupAsyncAppleFWOHCI_IOMemoryBlock32::createlocalConfigDirectory_addEntry_BufferIn der Praxis ist die Seite nach dem überlaufenen Puffer normalerweise nicht zugeordnet, was bei Überlauf eine Kernel-Panic verursacht.
Der Code von IOFireWireFamily-overflow wird in die Public Domain entlassen. Als Höflichkeit bitte ich darum, dass Sie, wenn Sie auf diesen Code verweisen oder ihn verwenden, ihn mir zuschreiben.