
OPPO Find X6 Pro GhostLock (CVE-2026-43499) 익스플로잇 변형
본 프로젝트는 CVE-2026-43499 (GhostLock) 취약점을 OPPO Find X6 Pro (PGEM10)에 적응시키기 위한 연구입니다.
NebuSec CyberMeowfia 원본 exploit 아키텍처를 기반으로 하며, oppo-ghostlock 적응 방식을 참고했습니다.
| 항목 | 값 |
|---|---|
| 장치 | OPPO Find X6 Pro (PGEM10) |
| 칩 | Snapdragon 8 Gen 2 (SM8550) |
| 커널 | Linux 5.15.149-android13 #1 SMP PREEMPT |
| 빌드 날짜 | Thu Feb 13 2025 |
| Android | 15 (ColorOS 15.0) |
| ROM 버전 | PGEM10_15.0.0.600(CN01) |
| PAC | CONFIG_ARM64_PTR_AUTH_KERNEL=y |
| BTI | CONFIG_ARM64_BTI_KERNEL=y |
| KASLR | CONFIG_RANDOMIZE_BASE=y |
| VA_BITS | 39 |
| VA 오프셋 | P0_PAGE_OFFSET = 0xffffff8000000000 |
| 모듈 | 상태 | 설명 |
|---|---|---|
| Perf KASLR 우회 | ✅ | 핵심 돌파 — perf_event_open + callchain 샘플링을 통해 <1초 안에 현재 KASLR 슬라이드 획득 |
| MM_STRUCT_SZ 수정 | ✅ | 0x500에서 0x400(1024B)로 수정하여 KernelSnitch 즉시 성공 |
| IDA 오프셋 전체 검증 | ✅ | 모든 중요 심볼/구조체/함수를 IDA 교차 검증 완료 |
| FUTEX_CMP_REQUEUE_PI | ✅ | GhostLock UAF 트리거 성공 |
| ashmem 검증 | ✅ | C ashmem 사용 가능, type confusion 경로 이론적으로 가능 |
| 호출 체인 분석 | ✅ | 커널 내 호출 체인 깊이가 0x800 이상인 경로 없음 확인 |
| 커널 구성 스캔 | ✅ | 전체 공격 표면 평가 완료 |
| 모듈 | 상태 | 근본 원인 |
|---|---|---|
| SLIDE 스택 오버레이 | ❌ | PAC으로 인해 futex 체인 스택 프레임이 0xA70으로 팽창, pselect는 0x620에 불과 |
| fops 오버레이 | ❌ | SLIDE 필요, PAC 차단 |
| type confusion | ❌ | fops 오버레이에 의존 |
| Pipe physrw | ❌ | type confusion에 의존 |
| Root | ❌ | 위 체인에 의존 |
oppo-pgem10-ghostlock/
├── README.md # 본 파일
├── 问题描述.md # 상세 문제 분석
├── docs/
│ ├── architecture.md # 아키텍처 설계 및 호출 체인
│ └── adaptation-guide.md # PAC 커널 적응 가이드
├── reports/
│ ├── offsets.md # IDA 오프셋 검증 보고서
│ ├── kaslr.md # KASLR 분석 보고서
│ └── summary.md # 최종 요약
├── src/
│ ├── kaslr_perf.h # Perf KASLR 재사용 가능 모듈
│ └── kaslr_perf.c # Perf KASLR 구현
└── analysis/
└── chains/ # 호출 체인 분석 스크립트
CONFIG_ARM64_PTR_AUTH_KERNEL=y # ← 핵심 차이: PAC가 직접 프레임 팽창 유발
CONFIG_ARM64_BTI_KERNEL=y # BTI가 오버헤드 추가 증가
CONFIG_SHADOW_CALL_STACK=y # SCS가 스택 프레임 증가
CONFIG_VMAP_STACK=y # 스택 재매핑 가능
CONFIG_KASAN_HW_TAGS=y # 컴파일 시 활성화
CONFIG_ARM64_VA_BITS=39 # 39비트 VA (48비트 아님)
함수 Pixel 10 (PAC 없음) PGEM10 (PAC 있음)
__arm64_sys_futex 0x90 0x4C0
do_futex 0x70 0x420
futex_wait_requeue_pi 0x1A0 0x1B0
─────────────────────────────────────────────────
futex 체인 총 깊이 0x300 0xA70 ← 3.5배
pselect 스택 깊이 0x620 0x620
오버레이 가능? ✅ YES ❌ NO (0xA70 > 0x620)
호출 체인 분석 결과: 커널 내 0개의 호출 체인 깊이가 0x800(2048B) 이상. 최대 단일 프레임: 0x1F0(496B).