
Preuve de concept et analyse de la vulnérabilité CVE-2022-32832 corrigée dans iOS 15.6
CVE-2022-32832 est une vulnérabilité dans la méthode externe AppleAPFSUserClient::methodDeltaCreateFinalize (sélecteur 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 provoquer un double-free du delta_create_ctx_t, ainsi que des propriétés associées, en faisant s'exécuter en concurrence 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 défini sur .
AppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLAfin de déclencher cela, un attaquant doit d'abord créer un « delta create context » sur le userclient en utilisant la méthode externe AppleAPFSUserClient::methodDeltaCreatePrepare (sélecteur 36). Cela nécessite un volume non monté pour fonctionner, de sorte qu'un scénario d'exploitation classique exige que l'attaquant crée également un volume cible à l'aide de la méthode externe AppleAPFSUserClient::methodVolumeCreate, ce qui requiert des privilèges de 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 les privilèges du noyau
Ce dépôt contient un exploit de preuve de concept pour ce problème qui provoque une panique du noyau sur les versions macOS vulnérables en causant un underflow du compteur de référence d'un objet du noyau. Cet exploit doit être exécuté 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.