
Bad Spin: Android Binder 권한 상승 익스플로잇 (CVE-2022-20421)
Author: Moshe Kol
권한 상승 익스플로잇으로, unstrusted_app에서 Android Binder 취약점(CVE-2022-20421)을 대상으로 합니다. 이 취약점은 2022년 10월 Android 보안 게시판에서 패치되었습니다. 이 익스플로잇은 커널 버전 5.4.x 및 5.10.x를 실행하는 기기에서 작동하며, 완전한 커널 R/W 프리미티브를 달성합니다. Google Pixel 6의 경우 완전한 루트 권한 및 SELinux 우회도 획득합니다.
전체 작성 글은 여기에서 확인할 수 있습니다.
src/ 디렉토리에서 make push를 입력하여 libbadspin.so 라이브러리를 컴파일합니다. 그러면 라이브러리가 /data/local/tmp로 푸시됩니다.adb shell을 실행합니다.LD_PRELOAD=/data/local/tmp/libbadspin.so sleep 1을 실행합니다. 그러면 라이브러리가 로드되고 익스플로잇이 시작됩니다.src/ 디렉토리에서 make push를 입력하여 libbadspin.so를 컴파일합니다. 이렇게 하면 데모 Android 앱의 assets 디렉토리로 라이브러리가 복사됩니다.app/ 디렉토리에서 데모 Android 앱을 컴파일합니다. (이 작업에는 Android Studio가 필요할 수 있습니다.)adb logcat -s BADSPIN다음 변수를 make에 전달할 수 있습니다:
VERBOSE=1 자세한 출력을 위해TEST_VULN=1 취약점만 테스트하고 익스플로잇을 진행하지 않으려면$ make list
0: Samsung Galaxy S22, Android 12 (6/2022), kernel 5.10.81
1: Samsung Galaxy S21 Ultra, Android 12 (3/2022), kernel 5.4.129
2: Google Pixel 6, Android 12 (5/2022), kernel 5.10.66
3: Google Pixel 6, Android 13 (9/2022), kernel 5.10.107
익스플로잇을 새 기기에 맞게 적용하는 것은 어렵지 않습니다.
새 기기가 커널 버전 5.4.x 또는 5.10.x에서 실행 중이고, Android 보안 패치 수준이 2022년 10월 이전인지 확인하세요.
기기 속성을 dev_config.h에 추가하세요.
두 개의 함수 포인터를 지정하세요:
kimg_to_lm(): 커널 이미지 가상 포인터를 선형 매핑으로 변환합니다.find_kbase(): 유출된 anon_pipe_buf_ops 포인터에서 커널 베이스 주소를 찾습니다.이 목적으로 이미 제공된 함수를 사용할 수 있습니다. (제조사가 삼성이 아니고 확실하지 않은 경우 Pixel 6에 사용된 것과 동일한 함수를 사용하세요.)
컴파일하고 실행하세요.
작동한다면 풀 리퀘스트를 제출해 주세요.