
CVE-2016-7608: Estouro de buffer no IOFireWireFamily.
IOFireWireFamily-overflow é uma prova de conceito de exploit para CVE-2016-7608, um estouro de buffer em IOFireWireUserClient que foi corrigido no macOS Sierra 10.12.2. Esta vulnerabilidade pode ser acionada para causar negação de serviço ou possivelmente execução arbitrária de código em dispositivos com uma porta FireWire.
O método AppleFWOHCI::updateROM não verifica o comprimento de um argumento OSData antes de copiar (bcopy) seu conteúdo para uma região de memória de tamanho fixo alocada usando AppleFWOHCI_IOMemoryBlock32::create.
O exploit pode ser acionado usando uma instância de IOFireWireUserClient. Chamar o método localConfigDirectory_Create produz um handle para um IOLocalConfigDirectory. Dados arbitrários podem ser adicionados a este objeto de diretório usando o método localConfigDirectory_addEntry_Buffer, que não restringe o tamanho dos dados além dos limites do parâmetro size de 32 bits. Finalmente, o exploit pode ser acionado chamando localConfigDirectory_Publish, que eventualmente chama IOFireWireController::UpdateROM. UpdateROM cria um objeto OSData representando a ROM compilada, incluindo os dados controlados pelo usuário adicionados anteriormente. Em seguida, passa o objeto OSData para AppleFWOHCI::updateROM, que copia os dados para a região de memória apontada por fpNextConfigROM. Esta é uma região de memória de 4096 bytes alocada em AppleFWOHCI::setupAsync usando AppleFWOHCI_IOMemoryBlock32::create. Se mais de 4096 bytes forem passados para localConfigDirectory_addEntry_Buffer, a escrita irá transbordar esta alocação para as páginas subsequentes.
Na prática, a página após o buffer estourado geralmente não está mapeada, causando um kernel panic no estouro.
O código IOFireWireFamily-overflow é liberado em domínio público. Como cortesia, peço que, se você referenciar ou usar qualquer parte deste código, atribua a mim.