
CVE-2016-7608: Переполнение буфера в IOFireWireFamily.
IOFireWireFamily-overflow — это эксплойт для подтверждения концепции уязвимости CVE-2016-7608, переполнения
буфера в IOFireWireUserClient, которое было исправлено в macOS Sierra 10.12.2. Эта уязвимость может быть
использована для вызова отказа в обслуживании или, возможно, произвольного выполнения кода на устройствах с
портом FireWire.
Метод AppleFWOHCI::updateROM не проверяет длину аргумента OSData перед копированием его содержимого с
помощью bcopy в область памяти фиксированного размера, выделенную с использованием
AppleFWOHCI_IOMemoryBlock32::create.
Эксплойт может быть запущен с использованием экземпляра IOFireWireUserClient. Вызов метода
localConfigDirectory_Create возвращает дескриптор . Произвольные данные могут быть
добавлены в этот объект каталога с помощью метода , который не
ограничивает размер данных, кроме пределов 32-битного параметра . Наконец, эксплойт может быть
запущен вызовом , который в конечном итоге вызывает
. создаёт объект , представляющий скомпилированный
ROM, включая управляемые пользователем данные, добавленные ранее. Затем он передаёт объект в
, который копирует данные в область памяти, на которую указывает
. Это область памяти размером 4096 байт, выделенная в с помощью
. Если в передать более 4096
байт, то запись переполнит это выделение, затронув последующие страницы.
IOLocalConfigDirectorylocalConfigDirectory_addEntry_BuffersizelocalConfigDirectory_PublishIOFireWireController::UpdateROMUpdateROMOSDataOSDataAppleFWOHCI::updateROMfpNextConfigROMAppleFWOHCI::setupAsyncAppleFWOHCI_IOMemoryBlock32::createlocalConfigDirectory_addEntry_BufferНа практике страница, следующая за переполненным буфером, обычно не отображена, что вызывает панику ядра при переполнении.
Код IOFireWireFamily-overflow выпущен в общественное достояние. В порядке любезности я прошу, чтобы при использовании или цитировании этого кода вы указывали меня как автора.