
CVE-2019-2215에 대한 개념 증명 익스플로잇, 취약한 기기에서 로컬 권한 상승을 가능하게 하는 Android 바인더 드라이버의 use-after-free 취약점입니다.
다음 문제는 https://android.googlesource.com/kernel/msm의 android-msm-wahoo-4.4-pie 브랜치(및 다른 브랜치에도 있을 수 있음)에 존재합니다:
binder 드라이버의 /drivers/android/binder.c에 있는 binder_thread 구조체의 wait 멤버에 대한 use-after-free가 있습니다.
업스트림 커밋에 설명된 바와 같이:
“binder_poll()는 작업을 위해 sleep할 수 있는 thread->wait waitqueue를 전달합니다. epoll을 사용하는 스레드가 BINDER_THREAD_EXIT을 사용하여 명시적으로 종료되면 waitqueue가 해제되지만, 해당 epoll 데이터 구조에서 제거되지는 않습니다. 이후 프로세스가 종료되면 epoll 정리 코드가 waitlist에 접근을 시도하고, 이로 인해 use-after-free가 발생합니다.”
다음 개념 증명 코드는 KASAN이 포함된 커널 빌드에서 UAF 크래시를 보여줍니다 (초기 업스트림 버그 리포트 https://lore.kernel.org/lkml/[email protected]/에서 발췌): #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
이 문제는 2017년 12월 4.14 LTS 커널 [1], AOSP 안드로이드 3.18 커널 [2], AOSP 안드로이드 4.4 커널 [3], AOSP 안드로이드 4.9 커널 [4]에서 패치되었지만, 소스 코드 검토에 따르면 최신 보안 게시판이 적용된 Pixel 2는 여전히 취약합니다.
소스 코드 검토에 기반하여 취약한 것으로 보이는 다른 기기들은 (별도로 명시되지 않는 한 8.x 릴리즈 기준):
우리는 이 버그가 실제 환경에서 사용되고 있다는 증거를 가지고 있습니다. 따라서 이 버그는 7일 공개 기한 규정이 적용됩니다. 7일이 경과하거나 패치가 광범위하게 제공되면(둘 중 먼저 발생하는 시점), 버그 보고서는 공개됩니다.
이 개념 증명이 빌드 walleye_kasan-userdebug 10 QP1A.191105.0035899767을 사용하는 Pixel 2에서 작동하여 KASAN 크래시를 유발함을 확인했습니다. 개념 증명 C 코드와 new.out이 첨부되었습니다. KASAN 콘솔 출력이 첨부되었습니다.
TAG 및 외부 당사자로부터 NSO 그룹에 귀속되는 Android 익스플로잇에 대한 기술 정보를 받았습니다. 이 세부 정보에는 버그 및 익스플로잇 방법론에 대한 사실이 포함되어 있으며, 이에 국한되지 않습니다:
이러한 세부 정보를 사용하여, 나는 패치를 비교하여 다른 잠재적 후보를 배제함으로써 사용된 버그가 거의 확실히 이 보고서의 버그라고 판단했습니다. 이 버그에 대한 더 자세한 설명과 식별 방법론은 시간이 나는 대로 추후 블로그 게시물에 작성될 예정입니다.
현재 익스플로잇 샘플은 없습니다. 샘플이 없으면 타임라인과 페이로드를 확인할 수 없습니다.
이 버그는 로컬 권한 상승 취약점으로, 취약한 기기의 완전한 손상을 허용합니다. 웹을 통해 익스플로잇이 전달되는 경우, 이 취약점은 샌드박스를 통해 접근 가능하므로 렌더러 익스플로잇과 페어링만 하면 됩니다.
로컬로 실행 시 이 버그를 사용하여 임의 커널 읽기/쓰기를 획득할 수 있는 방법을 보여주는 로컬 익스플로잇 개념 증명을 첨부했습니다. CVE-2019-2215를 익스플로잇하려면 신뢰할 수 없는 앱 코드 실행만 필요합니다. 또한 Pixel 2에서 실행 중인 POC의 스크린샷(success.png)을 첨부했습니다. 해당 Pixel 2는 보안 패치 레벨 2019년 9월의 Android 10 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys)을 실행 중입니다.
Android의 공급업체 성명:
이 문제는 Android에서 높은 심각도로 평가되며, 자체적으로는 잠재적 익스플로잇을 위해 악성 애플리케이션 설치가 필요합니다. 웹 브라우저를 통한 다른 벡터는 추가 익스플로잇과의 연쇄가 필요합니다. Android 파트너에게 통보했으며 패치는 Android Common Kernel에서 사용할 수 있습니다. Pixel 3 및 3a 기기는 취약하지 않으며 Pixel 1 및 2 기기는 10월 업데이트의 일부로 이 문제에 대한 업데이트를 받을 예정입니다.