
CVE-2022-32832에 대한 개념 증명 익스플로잇 및 기술 분석으로, macOS의 Apple APFS 커널 레이스 컨디션으로 권한 상승을 가능하게 합니다.
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는 외부 메소드 호출을 직렬화하기 위해 동기화 기법을 사용하지 않습니다. 즉, 공격자가 동일한 유저클라이언트에서 AppleAPFSUserClient::methodDeltaCreateFinalize에 대한 두 번의 호출을 경쟁시켜 delta_create_ctx_t와 관련 속성을 이중 해제할 수 있습니다. 두 호출 모두 가 로 설정되기 전에 (delta_create_ctx_t를 해제하는 메소드)를 호출할 수 있기 때문입니다.
this->deltaCreateCtxNULLAppleAPFSContainer::deltaCreateTeardown이를 트리거하려면 공격자는 먼저 외부 메소드 AppleAPFSUserClient::methodDeltaCreatePrepare(셀렉터 36)를 사용하여 유저클라이언트에 "delta create context"를 생성해야 합니다. 이 메소드는 마운트되지 않은 볼륨이 있어야 작동하므로, 일반적인 익스플로잇 흐름에서는 공격자가 외부 메소드 AppleAPFSUserClient::methodVolumeCreate를 사용하여 대상 볼륨을 생성해야 하며, 이는 슈퍼유저 권한이 필요합니다. 이러한 이유로 Apple은 이 취약점의 영향을 다음과 같이 설명했습니다:
루트 권한이 있는 앱이 커널 권한으로 임의 코드를 실행할 수 있음
이 저장소에는 취약한 macOS 버전에서 커널 객체의 참조 카운트를 언더플로우시켜 커널 패닉을 유발하는 개념 증명 익스플로잇이 포함되어 있습니다. 위에서 언급한 이유로 이 익스플로잇은 root 권한으로 실행되어야 합니다.
CVE-2022-32832는 AppleAPFSUserClient::methodDeltaCreateFinalize에 IOLockLock 및 IOLockUnlock 호출을 추가하여 취약한 코드를 보호하는 방식으로 패치되었습니다.