꿈을꾸는 파랑새

오늘은 애플에서 제공하는 운영체제인 Mac OS에서 CVE-2024-44175 취약점에 대해 알아보겠습니다.
해당 취약점인 CVE-2024-44175은 macOS의 diskarbitrationd에서 발생한 TOCTOU(Time of Check to Time of Use) 취약점이며 symbolic link를 이용한 sandbox escape 및 privilege escalation 공격을 가능하게 만드는 취약점 입니다.
해당 취약점은 UserFS(사용자 모드 파일 시스템) 처리 과정에서 발생하게 돼 있으며 검증이 제대로 이루어지지 않아서 발생합니다.
DAFileSystemMountWithArguments 함수
diskarbitrationd는 UserFS 파일 시스템을 마운트 하기 전에 먼저 UserFS 지원 여부를 확인합니다.

void DAFileSystemMountWithArguments( DAFileSystemRef filesystem,
                                     CFURLRef device,
                                     CFStringRef volumeName,
                                     CFURLRef mountpoint,
                                     uid_t userUID,
                                     gid_t userGID,
                                     CFStringRef preferredMountMethod,
                                     DAFileSystemCallback callback,
                                     void * callbackContext,
                                     ... )
{
    ...
    if ( fsImplementation != NULL )
    {
        ...
        if ( preferredMountMethod != NULL )
        {
            if ( useUserFS == FALSE )
            {
                if ( ( CFStringCompare( CFSTR("UserFS"), preferredMountMethod, kCFCompareCaseInsensitive ) == 0) &&
                     ( ___CFArrayContainsString( fsImplementation, CFSTR("UserFS") ) == TRUE ) )
                {
                    **useUserFS = TRUE;**
                }
            }
        }
    }
}
useUserFS가 TRUE로 설정되면, diskarbitrationd는 UserFS API를 사용하여 파일 시스템을 마운트 하게 돼 있음
if ( useUserFS )
{
    CFArrayRef argumentList;
    argumentList = CFStringCreateArrayBySeparatingStrings( kCFAllocatorDefault, devicePath, CFSTR( "/" ) );
    if ( argumentList )
    {
       
        DAThreadExecute(__DAMountUserFSVolume, context, __DAMountUserFSVolumeCallback, context);
        CFRelease( argumentList );
    }
    else
    {
        status = EINVAL;
    }
    goto DAFileSystemMountErr;

Mac OS
Mac OS

문제점

nofollow옵션 누락:
mount 명령에 nofollow 옵션 또는 -k 옵션이 설정되지 않음
공격자로서 심볼릭 링크를 악용하여 의도하지 않은 경로를 마운트 하도록 유도할 수 있음
mount_lifs의 동작:  
mount 또는 mount_lifs 프로세스는 root 권한으로 실행
심볼릭 링크가 악용되면 시스템 전체에서 권한 상승(Privilege Escalation) 공격이 가능
루트 권한의 마운트 작업
mount_lifs가 호출될 때 해당 코드가 실행되는 스레드나 프로세스는 루트 권한으로 동작
심볼릭 링크를 따르는 행위는 공격자가 심볼릭 링크를 조작하여 다른 경로(중요 시스템 파일이나 다른 디렉터리)를 마운트할 수 있도록 할 수가 있음
nofollow/-k 옵션 적용
mount_lifs를 루트 권한으로 실행
뭐~전문가가 아니라서 오류가 있을 수가 있으며 해당 부분은 공개된 코드를 가지고 진행을 했습니다.

728x90
반응형
그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band