
Proof-of-concept e write-up per la vulnerabilità CVE-2022-32832 corretta in iOS 15.6
CVE-2022-32832 è una vulnerabilità nel metodo esterno AppleAPFSUserClient::methodDeltaCreateFinalize (selettore 49). Ecco la decompilazione pre-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 non utilizza alcuna tecnica di sincronizzazione per serializzare le chiamate ai metodi esterni. Ciò significa che un attaccante può causare un double-free di delta_create_ctx_t e delle proprietà correlate, facendo gareggiare due chiamate a sullo stesso userclient, poiché entrambe potranno invocare (il metodo responsabile del rilascio di ) prima che venga impostato a .
AppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLPer innescare questo, un attaccante deve prima creare un "contesto di creazione delta" sullo userclient utilizzando il metodo esterno AppleAPFSUserClient::methodDeltaCreatePrepare (selettore 36). Ciò richiede un volume non montato per funzionare, quindi un normale flusso di exploit richiede che l'attaccante crei anche un volume di destinazione utilizzando il metodo esterno AppleAPFSUserClient::methodVolumeCreate, che richiede privilegi di superutente. È per questo motivo che Apple ha descritto l'impatto della vulnerabilità come:
Un'app con privilegi di root potrebbe essere in grado di eseguire codice arbitrario con privilegi di kernel
Questo repository include un exploit proof-of-concept per questo problema che causa un kernel panic sulle versioni vulnerabili di macOS facendo underflow del reference count di un oggetto del kernel. Questo exploit deve essere eseguito come root per i motivi sopra menzionati.
CVE-2022-32832 è stata corretta aggiungendo chiamate IOLockLock e IOLockUnlock a AppleAPFSUserClient::methodDeltaCreateFinalize per proteggere il codice vulnerabile.