
Exploit de preuve de concept et analyse technique pour CVE-2022-32832, une condition de course du noyau APFS d'Apple sur macOS permettant l'élévation de privilèges.
CVE-2022-32832 est une vulnérabilité dans la méthode externe AppleAPFSUserClient::methodDeltaCreateFinalize (selecteur 49). Voici la décompilation avant le correctif :
__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'utilise aucune technique de synchronisation pour sérialiser les appels de méthodes externes. Cela signifie qu'un attaquant peut libérer deux fois le delta_create_ctx_t et les propriétés associées, en faisant la course entre deux appels à sur le même userclient, car les deux pourront appeler (la méthode responsable de la libération du ) avant que ne soit mis à .
AppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLPour déclencher cela, un attaquant doit d'abord créer un « contexte de création delta » sur le userclient en utilisant la méthode externe AppleAPFSUserClient::methodDeltaCreatePrepare (selecteur 36). Cela nécessite un volume non monté pour fonctionner, donc un flux d'exploitation normal exige que l'attaquant crée également un volume cible en utilisant la méthode externe AppleAPFSUserClient::methodVolumeCreate, qui nécessite des privilèges superutilisateur. C'est pour cette raison qu'Apple a décrit l'impact de la vulnérabilité comme suit :
Une application disposant de privilèges root peut être en mesure d'exécuter du code arbitraire avec des privilèges noyau
Ce dépôt contient une preuve de concept d'exploitation pour ce problème qui provoque un panique noyau sur les versions vulnérables de macOS en faisant un underflow du compteur de référence d'un objet noyau. Cette exploitation doit être exécutée en tant que root pour les raisons mentionnées ci-dessus.
CVE-2022-32832 a été corrigée en ajoutant des appels IOLockLock et IOLockUnlock à AppleAPFSUserClient::methodDeltaCreateFinalize pour protéger le code vulnérable.