
Prova de conceito de exploit e análise técnica para CVE-2022-32832, uma condição de corrida no kernel APFS da Apple no macOS que possibilita escalonamento de privilégios.
CVE-2022-32832 é uma vulnerabilidade no método externo AppleAPFSUserClient::methodDeltaCreateFinalize (seletor 49). Aqui está a descompilação anterior ao patch:
__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 quaisquer técnicas de sincronização para serializar chamadas de métodos externos. Isto significa que é possível para um atacante realizar um double-free do e das propriedades relacionadas, competindo duas chamadas a no mesmo , uma vez que ambas poderão chamar (o método responsável por libertar o ) antes de ser definido como .
delta_create_ctx_tAppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLPara despoletar isto, um atacante precisa primeiro de criar um "contexto de criação delta" no userclient usando o método externo AppleAPFSUserClient::methodDeltaCreatePrepare (seletor 36). Isto requer um volume não montado para funcionar, pelo que um fluxo de exploração normal exige que o atacante crie também um volume de destino usando o método externo AppleAPFSUserClient::methodVolumeCreate, o que requer privilégios de superutilizador. É por esta razão que a Apple descreveu o impacto da vulnerabilidade como:
Uma aplicação com privilégios de root pode ser capaz de executar código arbitrário com privilégios de kernel
Este repositório inclui uma prova de conceito de exploração para este problema que provoca um kernel panic em versões vulneráveis do macOS ao causar um underflow na contagem de referências de um objeto do kernel. Esta exploração deve ser executada como root pelas razões mencionadas acima.
O CVE-2022-32832 foi corrigido adicionando chamadas IOLockLock e IOLockUnlock a AppleAPFSUserClient::methodDeltaCreateFinalize para proteger o código vulnerável.