
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 IOLocalConfigDirectory. Diesem Verzeichnisobjekt
können mit der Methode localConfigDirectory_addEntry_Buffer beliebige Daten hinzugefügt werden, die die
Größe des Datenparameters nicht über die Grenzen des 32-Bit-size-Parameters hinaus einschränkt.
Schließlich kann der Exploit durch Aufruf von localConfigDirectory_Publish ausgelöst werden, was
letztendlich IOFireWireController::UpdateROM aufruft. UpdateROM erstellt ein OSData-Objekt, das das
kompilierte ROM darstellt, einschließlich der zuvor hinzugefügten, vom Benutzer kontrollierten Daten.
Anschließend übergibt es das OSData-Objekt an AppleFWOHCI::updateROM, das die Daten in den
Speicherbereich kopiert, auf den fpNextConfigROM zeigt. Dies ist ein 4096-Byte-Speicherbereich, der in
AppleFWOHCI::setupAsync mittels AppleFWOHCI_IOMemoryBlock32::create reserviert wird. Wenn mehr als
4096 Bytes an localConfigDirectory_addEntry_Buffer übergeben werden, läuft der Schreibvorgang über diese
Reservierung auf die nachfolgenden Seiten über.
In 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.