
Prova de conceito e documentação da vulnerabilidade CVE-2022-32832 corrigida no iOS 15.6
CVE-2022-32832 é uma vulnerabilidade no método externo AppleAPFSUserClient::methodDeltaCreateFinalize (seletor 49). Aqui está a descompilação antes da correção:
__int64 __cdecl AppleAPFSUserClient::methodDeltaCreateFinalize(AppleAPFSUserClient *this, void *a2, IOExternalMethodArguments *args)
{
void *ctx;
__int64 result;
ctx = this->deltaCreateCtx;
if ( !ctx )
return 0xE00002D8LL;
AppleAPFSContainer::deltaCreateTeardown(ctx);
result = 0LL;
this->deltaCreateCtx = 0LL;
return result;
}
AppleAPFSUserClient::externalMethod não utiliza técnicas de sincronização para serializar chamadas de métodos externos. Isso significa que é possível para um atacante fazer um double-free do delta_create_ctx_t e propriedades relacionadas, ao fazer duas chamadas concorrentes para no mesmo userclient, já que ambas poderão chamar (o método responsável por liberar o ) antes que seja definido como .
AppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLPara acionar isso, um atacante primeiro precisa criar um "contexto de criação delta" no userclient utilizando o método externo AppleAPFSUserClient::methodDeltaCreatePrepare (seletor 36). Isso requer um volume não montado para funcionar, portanto, um fluxo normal de exploração exige que o atacante também crie um volume alvo usando o método externo AppleAPFSUserClient::methodVolumeCreate, que requer privilégios de superusuário. É por esse motivo que a Apple descreveu o impacto da vulnerabilidade como:
Um aplicativo com privilégios de root pode ser capaz de executar código arbitrário com privilégios de kernel
Este repositório inclui um exploit de prova de conceito para este problema que causa um kernel panic em versões vulneráveis do macOS ao causar underflow na contagem de referência de um objeto do kernel. Este exploit deve ser executado como root pelos motivos mencionados acima.
CVE-2022-32832 foi corrigido adicionando chamadas IOLockLock e IOLockUnlock a AppleAPFSUserClient::methodDeltaCreateFinalize para proteger o código vulnerável.