
Proof-of-Concept-Exploit und technische Dokumentation für CVE-2022-32832, eine Kernel-Double-Free-Schwachstelle in AppleAPFSUserClient unter iOS/macOS, die die Ausnutzung einer Race Condition demonstriert und zu einem Kernel Panic führt.
CVE-2022-32832 ist eine Schwachstelle in der externen Methode AppleAPFSUserClient::methodDeltaCreateFinalize (Selector 49). Nachfolgend die Decompilierung vor dem 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 verwendet keinerlei Synchronisationstechniken, um externe Methodenaufrufe zu serialisieren. Dies bedeutet, dass ein Angreifer durch ein Race-Condition zwischen zwei Aufrufen von AppleAPFSUserClient::methodDeltaCreateFinalize auf demselben Userclient einen Double-Free von delta_create_ctx_t und zugehörigen Eigenschaften auslösen kann, da beide in der Lage sind, AppleAPFSContainer::deltaCreateTeardown (die Methode, die für das Freigeben von delta_create_ctx_t zuständig ist) aufzurufen, bevor this->deltaCreateCtx auf NULL gesetzt wird.
Um dies auszulösen, muss ein Angreifer zunächst einen "Delta Create Context" auf dem Userclient erstellen, indem er die externe Methode AppleAPFSUserClient::methodDeltaCreatePrepare (Selector 36) verwendet. Dies erfordert ein ungemountetes Volume, damit es funktioniert. Daher erfordert ein normaler Exploit-Ablauf, dass der Angreifer auch ein Ziel-Volume mit der externen Methode AppleAPFSUserClient::methodVolumeCreate erstellt, was Superuser-Rechte voraussetzt. Aus diesem Grund beschrieb Apple die Auswirkung der Schwachstelle wie folgt:
Eine App mit Root-Rechten kann möglicherweise beliebigen Code mit Kernel-Rechten ausführen
Dieses Repository enthält einen Proof-of-Concept-Exploit für dieses Problem, der auf verwundbaren macOS-Versionen einen Kernel-Panic durch einen Unterlauf des Referenzzählers eines Kernel-Objekts verursacht. Dieser Exploit muss aus den oben genannten Gründen als Root ausgeführt werden.
CVE-2022-32832 wurde durch das Hinzufügen von IOLockLock- und IOLockUnlock-Aufrufen in AppleAPFSUserClient::methodDeltaCreateFinalize gepatcht, um den verwundbaren Code zu schützen.