Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-28664-PoC — CVE-2021-28664에 대한 PoC 골격으로, Mali kbase GPU 드라이버의 use-after-free 취약점을 이용해 ARM64 Android에서 커널 임의 물리 메모리 읽기/쓰기 프리미티브를 시연합니다. | Kitploit
도구/GitHubGitHub/woaphone/cve-2021-28664-poc
Android SecurityMemory ForensicsVulnerability AnalysisExploitationMobile SecurityHardware & IoT SecurityPapers & ResearchLearning & EducationBinary Exploitation
GitHubwoaphone/cve-2021-28664-poc

CVE-2021-28664-PoC

CVE-2021-28664에 대한 PoC 골격으로, Mali kbase GPU 드라이버의 use-after-free 취약점을 이용해 ARM64 Android에서 커널 임의 물리 메모리 읽기/쓰기 프리미티브를 시연합니다.

11시간 5분 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

CVE-2021-28664-PoC

Mali kbase GPU 드라이버 UAF(CVE-2021-28664) → 커널 임의 물리 메모리 읽기/쓰기 프리미티브 의 PoC 골격. 범용 ARM64 Android 플랫폼을 대상으로 하며, 특정 제조사나 기종과 무관하다.

연구 범위는 "커널 임의 물리 메모리 읽기/쓰기 프리미티브"까지만이다: GPU 드라이버의 use-after-free를 안정적이고, 제어 가능하며, 안전하게 실패할 수 있는 커널 메모리 읽기/쓰기 능력으로 바꾸는 방법.

이 저장소는 어떠한 공격도 제공하지 않는다. 완성된 exploit, 바로 실행 가능한 코드, 특정 기기의 오프셋/시리얼 번호/펌웨어를 포함하지 않는다; 어떠한 내용도 공격 행위에 사용하는 것을 금지한다(아래 참조).


면책 조항 / Disclaimer(필독)

  1. 이 저장소는 공격을 제공하지 않는다. 이 저장소는 취약점 원리와 메모리 손상 프리미티브에 대한 기술적 회고이며, 방법론 문서와 모든 기기 수치가 비워진 교육용 템플릿만을 포함한다. 이는 어떠한 기기에도 직접 사용할 수 없다.
  2. 공격 금지. 이 저장소의 내용을 무단 기기, 타인의 기기 또는 어떠한 불법 용도로 사용하는 것을 엄격히 금지한다; 이로 인해 발생하는 모든 결과는 사용자 본인이 부담하며, 저자와는 무관하다.
  3. 연구 실험은 저자 본인이 소유한 기기에서만 수행되었으며, 목적은 취약점 재현과 보안 연구이다.
  4. CVE-2021-28664는 2021년에 이미 업스트림(Arm/Mali)에서 수정되었다; 영향을 받는 것은 장기간 업데이트되지 않은 구형 드라이버/구형 펌웨어이다. 이 연구의 의의는 역사적 취약점의 악용 원리와 방어 관점의 탐지 방식을 이해하는 데 있다.
  5. 이 저장소의 내용은 "AS IS"로 제공되며, 명시적이든 묵시적이든 어떠한 보증도 없다.
  6. 제조사/보안 팀을 대표하여 더 자세한 내용이 필요하다면 GitHub를 통해 저자에게 연락하기 바란다.

적용 범위

기술적으로 적용됨(공격 체인의 각 단계가 성립하는 전제)

단계전제 조건
취약점 본체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), 페이지 테이블 형식은 반드시 실측해야 하며, 가정할 수 없음

기술적으로 적용되지 않음

  • CVE-2021-28664가 수정된 Mali 드라이버(r 버전 수정 후);
  • 비 Mali GPU 플랫폼(이 체인은 kbase의 alias/MMU-dump 동작에 깊이 의존함);
  • 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 메모리 자체에 있는 것이 아니라 다음에 있다:

  1. 해제된 물리 페이지가 커널 slab/buddy에 의해 커널 객체(본 연구에서는 pipe_buffer)로 재할당됨;
  2. GPU alias 뷰가 여전히 이 페이지들을 볼 수 있음 → 커널이 사용 중인 객체 필드를 읽고 쓸 수 있음;
  3. GPU WRITE_VALUE job을 이용해 alias로 보이는 페이지를 지정 위치에서改写.

본 연구가 도달한 단계

root@kitploit:~
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로 사용하여 읽기/쓰기가 빈 공간/미매핑 영역에 빠지지 않도록 보장

여기까지.

핵심 기술 포인트(각 포인트는 docs/에 독립 절이 있음)

  • 다중 안전 게이트: 모든 물리 읽기 전에 overlap / 자기일관성 / contiguity / 내용 자증 등 여러 게이트를 반드시 통과해야 하며, 어느 하나라도 실패하면 즉시 현장을 복구하고 종료——전체 연구에서 가장 중요한 엔지니어링 규율.
  • 물리 주소 모델의 함정: GPU PTE 소프트웨어 플래그 오염, 물리 주소 32비트 절단, KASLR이 커널 이미지 물리 베이스 주소도 무작위화, 제조사 page_to_virt 구현 차이, no-map 예약 영역은 선형 매핑에 아예 존재하지 않음(읽으면 panic).
  • m 모호성 처리: 물리 주소 상위 비트 모호성은 절대 추측하지 않고, "알려진 내용 페이지 oracle"로 내용 자증을 수행.
  • 프리미티브 수명과 안전 실패: 읽기 프로브에는 횟수 예산이 있으며, 초과 시 해당 라운드를 포기해야 함; 매 실험의 모든 종료 경로에서 변조된 객체 필드를 복구해야 함.

저장소 구조

root@kitploit:~
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)로 표시되어 있으며, 바로 사용할 수 있는 수치는 없음;
  • 모든 위험한 작업 전에 명시적 검증 게이트와 복구 경로가 있어 "안전 실패"의 설계 방식을 보여줌.

이는 전체 체인이 어떻게 구성되는지 이해하기 위한 것이며, 어떠한 기기에도 유효한 도구로 직접 컴파일할 수 없다.

참고

  • ARM Mali kbase 드라이버(공개 커널 소스 트리)
  • CVE-2021-28664 업스트림 수정 기록 및 공개 분석
  • Linux fs/pipe.c / include/linux/pipe_fs_i.h(공개 소스)
  • arm64 메모리 모델: Documentation/arch/arm64/memory.rst(공개 문서)

License

  • 코드(exploit/): GPL-3.0, LICENSE 참조
  • 문서(README, docs/, scripts/): CC BY-NC-SA 4.0, LICENSE-DOCS 참조 (상업적 사용 금지; 파생물은 동일 방식으로 공유하고 본 선언을 유지해야 함)
도구 다운로드