
CVE-2026-43499 취약점을 대상으로 하는 OPPO MT6835 Android 기기용 개념 증명 익스플로잇 체인으로, preload payload, 빌드 시스템, 방어 연구를 위한 분석 노트를 포함합니다.
GhostLock: Linux 커널 futex PI Use-After-Free 취약점, CVE-2026-43499. 공격자는 PI-futex 의존성 루프를 악용하여 경쟁 조건(race condition)을 유발하고,
CONFIG_FUTEX_PI=y가 설정된 커널에서 로컬 권한 상승을 달성합니다.대상: OPPO PLS120 (OP5E1C) — Android 17, 커널
5.15.180-android13-8-o-g7b9cfca06464분석 환경: Ubuntu 24.04 x86_64 + Android NDK r29 (clang 21.0.0, API 35)
본 프로젝트는 OPPO PLS120 (OP5E1C) 기기에서 GhostLock (CVE-2026-43499)을 이용해 root 권한을 획득하는 것의 실행 가능성을 연구합니다. 모든 알려진 KASLR 유출 경로를 체계적으로 검증한 결과, 해당 기기의 보안 강화 조합이 우회 불가능한 방어 체인을 구성함을 확인했습니다.
| 단계 | 상태 | 설명 |
|---|---|---|
| 1단계: boot.img 분석 & 심볼 추출 | ✅ 완료 | OTA 패키지에서 boot.img 추출 → vmlinux-to-elf로 심볼 테이블 재구성 (159,668개 심볼) |
| 2단계: preload.so 컴파일 | ✅ 완료 | Android NDK r29 크로스 컴파일, 실시간 디스크 쓰기 로그 메커니즘 강제 적용 |
| 3단계: 장애 진단 및 반복 수정 | 🔄 진행 중 | MM_STRUCT_SZ, MTE 지원, SLIDE 건너뛰기 로직 수정 완료 |
OPPO PLS120의 보안 강화는 exploit 체인을 전면적으로 차단합니다:
| 강화 항목 | 영향 |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | KernelSnitch slab 충돌 차단 |
CONFIG_KASAN_HW_TAGS=y (MTE) | 주소 태그로 bruteforce 복잡도 증가 |
CONFIG_CFI_CLANG=y | 제어 흐름 무결성 |
| SELinux shell 도메인 정책 | perf_event_open + /proc/kallsyms 차단 |
CONFIG_CHECKPOINT_RESTORE=n | PR_SET_MM_MAP 경로 차단 |
| wchan 수정 backport | /proc/<pid>/stat 커널 VA 유출 차단 |
| 방안 | 상태 | 원인 |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (SELinux shell 도메인 차단) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (/proc/<pid>/stat field 35) | ❌ | 커널에 v5.16 수정 적용됨 (커널 VA 대신 1 반환) |
| SLIDE 사이드 채널 (boot_id 덮어쓰기) | ❌ | nfulnl 모듈 로드 불가 |
| PR_SET_MM_MAP 스택 회수 | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (futex hash timing) | ⚠️ 간헐적 성공 | big.LITTLE 타이밍 노이즈로 안정성 저하 |
SLIDE_MAX_ATTEMPTS=1로 SLIDE 무한 루프 건너뜀!route_signal 즉시 break 제거, 24회 재시도 허용본 프로젝트는 OPPO PLS120 (OP5E1C) 기기에서 **GhostLock (CVE-2026-43499)**을 이용한 root 권한 상승의 실행 가능성을 연구합니다. 모든 알려진 KASLR 유출 경로를 체계적으로 테스트한 결과, 해당 기기의 보안 강화 구성이 이 exploit에 대해 우회 불가능한 방어 체인을 형성합니다.
| 단계 | 상태 | 설명 |
|---|---|---|
| 1단계: boot.img 분석 | ✅ 완료 | OTA에서 boot.img 추출 → vmlinux-to-elf 심볼 재구성 (159,668개 심볼) |
| 2단계: preload.so 빌드 | ✅ 완료 | Android NDK r29로 크로스 컴파일, 실시간 디스크 로깅 강제 |
| 3단계: 진단 및 반복 | 🔄 진행 중 | MM_STRUCT_SZ, MTE 지원, SLIDE 우회 로직 수정 |
OPPO PLS120은 여러 계층에서 exploit 체인을 차단합니다:
| 하드닝 기능 | 영향 |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | KernelSnitch slab 충돌 차단 |
CONFIG_KASAN_HW_TAGS=y (MTE) | 주소 태그가 무차별 대입 복잡도 증가 |
CONFIG_CFI_CLANG=y | 제어 흐름 무결성 |
| SELinux shell 도메인 정책 | perf_event_open + /proc/kallsyms 차단 |
CONFIG_CHECKPOINT_RESTORE=n | PR_SET_MM_MAP 경로 차단 |
| wchan 수정 백포트 | /proc/<pid>/stat 커널 VA 유출 차단 |
| 방법 | 상태 | 이유 |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (SELinux shell 도메인) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (/proc/<pid>/stat 필드 35) | ❌ | 커널에 v5.16 수정 백포트 적용됨 (커널 VA 대신 1 반환) |
| SLIDE 사이드채널 (boot_id 덮어쓰기) | ❌ | nfulnl 모듈 로드 불가 |
| PR_SET_MM_MAP 스택 재점유 | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (futex 해시 타이밍) | ⚠️ 간헐적 | big.LITTLE 타이밍 노이즈가 안정성에 영향 |
SLIDE_MAX_ATTEMPTS=1로 SLIDE 교착 상태 우회!route_signal 조기 중단 제거, 24회 재시도 허용/home/ubuntu/CyberMeowfia/
├── devices/ # Target device artifacts (OTA zip, config.gz, etc.)
├── work_bootimg/ # boot.img analysis output
│ └── oppo/ # OPPO-specific kernel data
│ ├── kernel.dec # Decompressed ARM64 Image (47MB)
│ ├── vmlinux_extracted.elf # Reconstructed vmlinux with symbols (159,668)
│ ├── kallsyms_oppo.txt # Full symbol table
│ └── kernel_config_oppo # Kernel .config (189KB)
├── IonStack/CVE-2026-43499/exploit/ # Exploit source code
│ ├── src/ # Source files (slide.c, fops.c, main.c, etc.)
│ │ ├── kernelsnitch/ # KernelSnitch futex hash timing module
│ │ └── targets/
│ │ └── oppo-pls120-BP2A.250605.015/ # OPPO-specific target configuration
│ └── build/ # Compiled binaries
├── unpack_bootimg.py # Python boot.img unpacker (v3/v4)
├── report.md # Phase 1 analysis report (Chinese)
├── GhostLock_CVE202643499_OPPO_PLS120_研究报告.md # Full research report (Chinese, 620 lines)
└── CVE202643499.txt # Research plan document
| 파일 | 설명 |
|---|---|
report.md | 1단계 분석: boot.img 언패킹, vmlinux 추출, 오프셋 검증 |
GhostLock_CVE202643499_OPPO_PLS120_研究报告.md | 전체 연구 보고서: 전체 과정, 모든 반복, 실패 분석, 결론 (620줄) |
위치: IonStack/CVE-2026-43499/exploit/src/targets/oppo-pls120-BP2A.250605.015/target.h:
| 매개변수 | 값 |
|---|---|
KIMAGE_TEXT_BASE | 0xffffffc008000000 |
MM_STRUCT_SZ | 0x3e8 (1000바이트, mm_cache_init에서 검증됨) |
KERNELSNITCH_MTE_ENABLED | 1 (MTE 주소 태그 검색 활성화) |
KSNITCH_COLLISIONS | 2 (big.LITTLE 허용 오차) |
KERNELSNITCH_MAX_MISMATCH | 1 (타이밍 노이즈 허용 오차) |
SLIDE_MAX_ATTEMPTS | 1 (nfulnl 사용 불가, FOPS 경로로 건너뜀) |
KERNEL_PAGE_SETUP_ATTEMPTS | 6 |
SLIDE_KERNEL_PAGE_SETUP_ATTEMPTS | 12 |
FOPS_KERNEL_PAGE_SETUP_ATTEMPTS | 72 |
# Cross-compilation for ARM64 Android
# Requires Android NDK r29 installed at /home/ubuntu/android-ndk-cache/android-ndk-r29/
# Build preload.so for OPPO PLS120
cd IonStack/CVE-2026-43499/exploit
export ANDROID_NDK_HOME=/home/ubuntu/android-ndk-cache/android-ndk-r29
make PROJECT=oppo-pls120-BP2A.250605.015 preload
# Build for default Pixel target
make PROJECT=blazer-CP2A.260605.012 preload
| 리소스 | 링크 |
|---|---|
| GhostLock 취약점 상세 | Mallory AI |
| IonStack Part II 분석 글 | NebuSec AI |
| KernelSnitch 힙 KASLR 유출 | Lukas Maar |
| CVE-2026-43499 소스 | GitHub NebuSec |
상태: ❌ OPPO PLS120은 다층 보안 강화로 인해 GhostLock(CVE-2026-43499)을 통한 익스플로잇이 불가능합니다. 연구 산출물은 보안 강화가 덜 된 기기에서 사용할 수 있도록 보존되어 있습니다.