IOFireWireFamily-overflow 是 CVE-2016-7608 的概念验证漏洞利用程序,该漏洞是 IOFireWireUserClient 中的一个缓冲区溢出漏洞,已在 macOS Sierra 10.12.2 中修复。此漏洞可被触发,导致拒绝服务,或可能在使用 FireWire 端口的设备上执行任意代码。
AppleFWOHCI::updateROM 方法在通过 AppleFWOHCI_IOMemoryBlock32::create 分配的固定大小内存区域中 bcopy 其内容之前,未检查 OSData 参数的长度。
该漏洞可通过 IOFireWireUserClient 实例触发。调用 localConfigDirectory_Create 方法可获取 IOLocalConfigDirectory 的句柄。可以使用 localConfigDirectory_addEntry_Buffer 方法向此目录对象添加任意数据,该方法除了受 32 位 size 参数的限制外,不限制数据大小。最后,通过调用 localConfigDirectory_Publish 触发漏洞,该函数最终会调用 IOFireWireController::UpdateROM。UpdateROM 创建一个 OSData 对象,代表编译后的 ROM,其中包含之前添加的用户控制数据。然后,它将 OSData 对象传递给 AppleFWOHCI::updateROM,后者将数据复制到由 fpNextConfigROM 指向的内存区域。这是一个通过 AppleFWOHCI::setupAsync 使用 AppleFWOHCI_IOMemoryBlock32::create 分配的 4096 字节内存区域。如果传递给 localConfigDirectory_addEntry_Buffer 的数据超过 4096 字节,则写入操作会将此分配区域溢出到后续页面。
实际上,溢出缓冲区后的页面通常未被映射,导致溢出时发生内核恐慌。
IOFireWireFamily-overflow 代码已发布到公共领域。出于礼貌,如果您引用或使用此代码的任何部分,请注明出处。