
QEMU 기반 실험 환경으로 Arm Mali r36p0 GPU 드라이버의 CVE-2022-46395 경합 조건을 재현합니다. PoC, 빌드 스크립트, initramfs 패키징을 포함하여 로컬 취약점 연구 및 회귀 테스트에 사용됩니다.
이 저장소는 Arm Mali r36p0 드라이버 계열에 대한 CVE-2022-46395의 휴대용 트리거 조건을 재현하기 위한 QEMU/no-Mali 실험 환경을 포함합니다.
이 실험 환경은 로컬 취약점 연구 및 회귀 테스트를 목적으로 합니다. 원본 익스플로잇의 Pixel 특화 권한 상승 페이로드는 포함하지 않습니다. LAB_QEMU 모드에서는 PoC가 소프트 이벤트/사용자 버퍼 레이스 윈도우에 도달했음을 입증한 후 중단됩니다.
poc/: QEMU에 맞게 조정된 CVE-2022-46395 PoC. Android 로깅 및 속성 호출이 대체되었으며, LAB_QEMU 모드에서는 Pixel 커널 텍스트 패치가 비활성화되어 있습니다.src/google-gpu-raviole-android13/: android.googlesource.com/kernel/google-modules/gpu의 Google Pixel GPU 모듈 소스, 브랜치 android-gs-raviole-5.10-android13. 포함된 mali_kbase/Kbuild는 드라이버를 r36p0-01eac0으로 식별합니다.scripts/: 빌드, initramfs 패키징, QEMU 부팅, 단발 재현 도우미 스크립트.docs/: 로컬 분석 노트 및 재현 보고서.logs/: 성공적인 로컬 실행에서 얻은 선택된 증거 로그.생성된 바이너리, initramfs 아카이브, 오브젝트 파일 및 대부분의 런타임 로그는 Git에서 무시됩니다. 아래 스크립트를 사용하여 로컬에서 다시 빌드하세요.
스크립트는 다음이 설치된 Linux VM에서 사용되었습니다:
bash, make, gcc, file, cpio, gzip, modinfo/bin/busybox에 busyboxqemu-system-x86_64기본적으로 스크립트는 커널 트리와 부트 이미지를 다음 경로에서 찾습니다:
../build/linux-5.10-kasan
../build/linux-5.10-kasan/arch/x86/boot/bzImage
해당 경로는 KDIR 및 KERNEL_IMAGE로 재정의할 수 있습니다.
저장소를 클론하고 디렉토리로 이동합니다:
git clone https://github.com/Gao-Zuin/cve-2022-46395-qemu.git
cd cve-2022-46395-qemu
전체 빌드/패키징/부팅 흐름을 실행합니다:
MAX_ATTEMPTS=2000 ./scripts/reproduce.sh
KASAN 커널이 기본 형제 디렉토리 ../build에 없는 경우:
KDIR=/path/to/linux-5.10-kasan \
KERNEL_IMAGE=/path/to/linux-5.10-kasan/arch/x86/boot/bzImage \
MAX_ATTEMPTS=2000 \
./scripts/reproduce.sh
성공적인 로컬 실행에서는 다음 타이밍을 사용했습니다:
MAX_ATTEMPTS=2000 UNMAP_OFFSET_NS=-800000 ./scripts/reproduce.sh
더 자세한 시도 로깅을 위해:
MAX_ATTEMPTS=2000 VERBOSE_ATTEMPTS=1 UNMAP_OFFSET_NS=-800000 \
./scripts/reproduce.sh
단발 스크립트는 다음 명령과 동일합니다:
./scripts/build_r36p0_no_mali.sh
./scripts/build_poc.sh
MAX_ATTEMPTS=2000 UNMAP_OFFSET_NS=-800000 ./scripts/package_initramfs.sh
./scripts/run_qemu.sh
유용한 환경 변수:
KDIR: mali_kbase.ko 컴파일에 사용되는 커널 빌드 트리KERNEL_IMAGE: QEMU에 전달되는 bzImageQEMU_LOG: 출력 로그 경로QEMU_MEM: QEMU 메모리 크기, 기본값 1536MQEMU_SMP: QEMU CPU 개수, 기본값 3MAX_ATTEMPTS: PoC 재시도 제한, 기본값 2000UNMAP_OFFSET_NS: 레이스 타이밍 오프셋, 기본값 -800000VERBOSE_ATTEMPTS=1: 시도별 세부 정보 출력KASAN_UAF_MODE=1: scripts/reproduce_kasan_uaf.sh에서 사용하는 KASAN UAF 프로브 옵션으로 모듈 로드성공적인 실행은 다음과 같은 줄을 출력합니다:
mali mali.0: Kernel DDK version r36p0-01eac0
r36p0-01eac0 (UK version 11.34)
/dev/mali0
finished reset: 703956220 fault: 682115150 68 err 0 read 3
qemu lab mode: CVE-2022-46395 soft-event/user-buffer race reproduced
qemu lab mode: reproduction completed after 17 attempts
[init] PoC status: 0
참조 증거 로그는 다음과 같습니다:
logs/qemu-cve-2022-46395-r36p0-unmap-minus800us.log
주요 성공 조건은 err=0, read=3, fault < reset입니다. 이는 no-Mali QEMU에서 r36p0-01eac0에 대해 레이스 윈도우에 도달했음을 나타냅니다.
MAX_ATTEMPTS를 높이거나 UNMAP_OFFSET_NS를 조정하여 다시 실행하십시오.