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