
CVE-2022-46689(일명 MacDirtyCow)의 예시.
CVE-2022-46689, 일명 MacDirtyCow의 예시입니다.
MacDirtyCow는 Linux의 Dirty COW 취약점과 유사한 macOS의 권한 상승 취약점입니다. 이 취약점은 macOS의 XNU 커널이 사용하는 copy-on-write(COW) 메커니즘에 존재합니다. 이 취약점으로 인해 공격자는 읽기 전용 루트 소유 파일을 수정할 수 있으며, 이로 인해 영향을 받는 시스템에서 루트 권한을 획득할 수 있습니다.
이 취약점은 macOS의 XNU 커널이 메모리 페이지에서 copy-on-write(COW) 작업을 처리하는 방식의 경쟁 조건(race condition)으로 인해 발생합니다. 메모리 페이지가 읽기 전용으로 표시되고 동시에 copy-on-write로도 표시된 경우, 커널은 해당 페이지에 쓰기 작업이 수행될 때 페이지의 새 복사본을 생성합니다. 그러나 읽기 전용 페이지가 검사되는 시점과 새 복사본이 생성되는 시점 사이에는 공격자가 메모리 내의 페이지를 수정할 수 있는 작은 시간 창이 존재하며, 이를 통해 읽기 전용 제한을 사실상 우회할 수 있습니다.
이 코드(poc.c)는 명령줄 인수로 지정된 파일을 열고 mmap()을 사용하여 메모리에 매핑합니다. 그런 다음 파일의 복사본을 만들고 문자 'A'로 채워 메모리 매핑된 파일 복사본을 수정합니다. 마지막으로 수정된 파일 복사본으로 원본 파일을 덮어씁니다.