
Proof-of-concept exploit e descrizione tecnica per CVE-2022-32832, una vulnerabilità di doppia liberazione del kernel in AppleAPFSUserClient su iOS/macOS, che dimostra lo sfruttamento di una race condition che porta a kernel panic.
CVE-2022-32832 è una vulnerabilità nel metodo esterno AppleAPFSUserClient::methodDeltaCreateFinalize (selettore 49). Ecco la decompilazione prima della 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ò effettuare un double-free di delta_create_ctx_t e delle proprietà correlate, gareggiando due chiamate a sullo stesso userclient, poiché entrambe potranno chiamare (il metodo responsabile del rilascio di ) prima che venga impostato a .
AppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLPer attivare questa vulnerabilità, un attaccante deve prima creare un "delta create context" 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 Apple ha descritto l'impatto della vulnerabilità come:
Un'app con privilegi di root potrebbe essere in grado di eseguire codice arbitrario con privilegi del kernel
Questo repository include un proof-of-concept per questo problema che causa un kernel panic sulle versioni vulnerabili di macOS, facendo underflow del contatore di riferimenti di un oggetto del kernel. Questo exploit deve essere eseguito come root per i motivi sopra menzionati.
CVE-2022-32832 è stato corretto aggiungendo chiamate IOLockLock e IOLockUnlock a AppleAPFSUserClient::methodDeltaCreateFinalize per proteggere il codice vulnerabile.