
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 . Dados arbitrários podem ser adicionados a este objeto de diretório usando o método , que não restringe o tamanho dos dados além dos limites do parâmetro de 32 bits. Finalmente, o exploit pode ser acionado chamando , que eventualmente chama . cria um objeto representando a ROM compilada, incluindo os dados controlados pelo usuário adicionados anteriormente. Em seguida, passa o objeto para , que copia os dados para a região de memória apontada por . Esta é uma região de memória de 4096 bytes alocada em usando . Se mais de 4096 bytes forem passados para , a escrita irá transbordar esta alocação para as páginas subsequentes.
IOLocalConfigDirectorylocalConfigDirectory_addEntry_BuffersizelocalConfigDirectory_PublishIOFireWireController::UpdateROMUpdateROMOSDataOSDataAppleFWOHCI::updateROMfpNextConfigROMAppleFWOHCI::setupAsyncAppleFWOHCI_IOMemoryBlock32::createlocalConfigDirectory_addEntry_BufferNa 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.