
Концепт-эксплойт и разбор уязвимости CVE-2022-32832, исправленной в iOS 15.6
CVE-2022-32832 — это уязвимость во внешнем методе AppleAPFSUserClient::methodDeltaCreateFinalize (селектор 49). Вот декомпиляция до исправления:
__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 не использует никаких методов синхронизации для сериализации вызовов внешних методов. Это означает, что атакующий может вызвать двойное освобождение delta_create_ctx_t и связанных с ним свойств, создав гонку между двумя вызовами на одном и том же userclient, поскольку оба вызова смогут войти в (метод, отвечающий за освобождение ) до того, как будет установлен в .
AppleAPFSUserClient::methodDeltaCreateFinalizeAppleAPFSContainer::deltaCreateTeardowndelta_create_ctx_tthis->deltaCreateCtxNULLЧтобы вызвать это, атакующему сначала необходимо создать «контекст delta create» на userclient с помощью внешнего метода AppleAPFSUserClient::methodDeltaCreatePrepare (селектор 36). Для работы этого метода требуется размонтированный том, поэтому обычный сценарий эксплуатации требует, чтобы атакующий также создал целевой том с помощью внешнего метода AppleAPFSUserClient::methodVolumeCreate, что требует привилегий суперпользователя. Именно по этой причине Apple описала воздействие уязвимости следующим образом:
Приложение с привилегиями root может иметь возможность выполнять произвольный код с привилегиями ядра
Этот репозиторий содержит доказательство концепции эксплуатации данной проблемы, которое вызывает панику ядра на уязвимых версиях macOS за счёт понижения счётчика ссылок объекта ядра (underflow). Этот эксплойт должен выполняться с правами root по причинам, указанным выше.
CVE-2022-32832 была исправлена путём добавления вызовов IOLockLock и IOLockUnlock в AppleAPFSUserClient::methodDeltaCreateFinalize для защиты уязвимого кода.