
CVE-2021-28664에 대한 PoC 골격으로, Mali kbase GPU 드라이버의 use-after-free 취약점을 이용해 ARM64 Android에서 커널 임의 물리 메모리 읽기/쓰기 프리미티브를 시연합니다.
Mali kbase GPU 드라이버 UAF(CVE-2021-28664) → 커널 임의 물리 메모리 읽기/쓰기 프리미티브 의 PoC 골격. 범용 ARM64 Android 플랫폼을 대상으로 하며, 특정 제조사나 기종과 무관하다.
연구 범위는 "커널 임의 물리 메모리 읽기/쓰기 프리미티브"까지만이다: GPU 드라이버의 use-after-free를 안정적이고, 제어 가능하며, 안전하게 실패할 수 있는 커널 메모리 읽기/쓰기 능력으로 바꾸는 방법.
이 저장소는 어떠한 공격도 제공하지 않는다. 완성된 exploit, 바로 실행 가능한 코드, 특정 기기의 오프셋/시리얼 번호/펌웨어를 포함하지 않는다; 어떠한 내용도 공격 행위에 사용하는 것을 금지한다(아래 참조).
| 단계 | 전제 조건 |
|---|---|
| 취약점 본체 | Mali kbase 드라이버 버전이 CVE-2021-28664 영향 범위(업스트림 수정 전 r 시리즈)에 속함;커널 버전과는 무관하며, 드라이버만 봄 |
| GPU 리소스 | /dev/mali에 해당 애플리케이션이 접근 가능;MEM_ALLOC이 SAME_VA 대형 버퍼를 지원;MEM_ALIAS 동작이 취약점 설명과 부합 |
| 파이프 재사용 | Linux ≥ 4.5(pipe_buf_operations 도입), 4.9 ~ 4.14에서 실측 모두 성립;F_SETPIPE_SZ로 파이프를 단일 페이지로 조정 가능 |
| KASLR 누출 | 커널이 CONFIG_RANDOMIZE_BASE 활성화(arm64 ≥ 4.6);anon_pipe_buf_ops가 공개 심볼 테이블에 존재 |
| 물리 주소 모델 | arm64 + vmemmap 레이아웃;sizeof(struct page), 페이지 테이블 형식은 반드시 실측해야 하며, 가정할 수 없음 |
pipe_buffer 구조/copy_page_to_iter 검증 차이가 큰 신형 커널(5.x부터는
해당 소스에 맞춰 재확인해야 하며, 체인 구조는 참고할 수 있으나 세부는 범용적이지 않음);/dev/mali 접근 권한이 없는 환경(seLinux/제조사 정책 제한).TODO(DEVICE)로 비워져 있으며, 적응은 사용자
자신의 리버싱 작업이며 저장소가 대신하지 않는다.CVE-2021-28664: Mali kbase 드라이버의 MEM_ALIAS 경로가 GPU_WR 권한에 대한
검사를 누락하여, 공격자가 이미 해제된 GPU 메모리 페이지를 자신의 GPU 주소
공간에 alias할 수 있게 되어 "GPU 측에서 해제된 물리 페이지에 대한 지속적
가시성/쓰기 가능성"——GPU/커널 경계를 넘나드는 use-after-free가 형성된다.
악용 가치는 GPU 메모리 자체에 있는 것이 아니라 다음에 있다:
WRITE_VALUE job을 이용해 alias로 보이는 페이지를 지정 위치에서改写.victim GPU 버퍼 + MMU 페이지 테이블 dump → 물리 주소 지도 구축
→ trigger 버퍼 해제로 압박 생성 → pipe 스프레이(F_SETPIPE_SZ로 축소)
→ pipe_buffer 배열이 해제 영역에 안착(크로스 캐시 UAF 재사용)
→ alias 뷰로 ops 포인터 스캔 → anon_pipe_buf_ops 누출 → KASLR slide
→ GPU로 pipe_buffer의 page / offset / len改写
→ 합법적 pipe read/write 경로 이용
⇒ 임의 물리 페이지 읽기(위조 page 포인터)
⇒ 임의 물리 페이지 쓰기(pipe merge 쓰기 경로)
⇒ 알려진 내용 페이지를 자증 oracle로 사용하여 읽기/쓰기가 빈 공간/미매핑 영역에 빠지지 않도록 보장
여기까지.
page_to_virt
구현 차이, no-map 예약 영역은 선형 매핑에 아예 존재하지 않음(읽으면 panic).docs/
01-exploit-chain.md UAF에서 읽기/쓰기 프리미티브까지: 각 단계 원리와 구현 요점
02-physical-address-model.md 물리 주소 모델, 안전 게이트, m 모호성, 알려진 함정
exploit/
cve-2021-28664-poc.c PoC 템플릿: 읽기/쓰기 프리미티브의 전체 흐름 골격(기기 값 없음)
scripts/
README.md 실험 자동화 도구의 설계 설명(루프/검증/복구)
exploit/cve-2021-28664-poc.c는 읽기/쓰기 프리미티브의 PoC 골격 템플릿이다:
TODO(DEVICE)로 표시되어 있으며, 바로 사용할 수 있는
수치는 없음;이는 전체 체인이 어떻게 구성되는지 이해하기 위한 것이며, 어떠한 기기에도 유효한 도구로 직접 컴파일할 수 없다.
fs/pipe.c / include/linux/pipe_fs_i.h(공개 소스)Documentation/arch/arm64/memory.rst(공개 문서)exploit/): GPL-3.0, LICENSE 참조docs/, scripts/): CC BY-NC-SA 4.0, LICENSE-DOCS 참조
(상업적 사용 금지; 파생물은 동일 방식으로 공유하고 본 선언을 유지해야 함)