
Honor 80 GT (MagicOS 8.0.0.128, kernel 5.10.168) 권한 상승 PoC: GhostLock (CVE-2026-43499) + 커스텀 KernelSU 모듈 로딩
English | 中文
**Honor 80 GT (AGT-AN00)**용 로컬 권한 상승 익스플로잇입니다.
CVE-2026-43499 — 커널 rtmutex remove_waiter 경로의 use-after-free — 및
함께 제공되는 KernelSU 커널 모듈 로딩 솔루션입니다.
원칙적으로 이 버그와 여기의 기술은 MagicOS 9.0.0.220까지의 모든 빌드에 적용됩니다. 적용 버전:
| MagicOS | Kernel | 상태 |
|---|---|---|
| 8.0.0.128 | 5.10.168 | verified |
| 8.0.0.160 | 5.10.209 | verified |
| 9.0.0.157 | 5.10.209 | verified |
| 9.0.0.200SP1 | 5.10.236 | verified |
| 9.0.0.220SP2 / SP4 | 5.10.236 | 기기에서 확인됨 (SP4는 SP2와 동일한 부트 이미지를 사용함) |
9.0 라인의 다른 버전들도 오프셋 테이블(src/targets/)을 다시 생성하고
kstack 캐리어 슬롯을 다시 확인하면 동작할 것으로 예상됩니다.
⚠️ 경고
- 본인 소유 기기에 대한 보안 연구용으로만 사용하세요.
- 사용에 따른 모든 책임은 본인에게 있습니다. 이 소프트웨어는 어떠한 종류의 보증도 제공하지 않습니다 (LICENSE 참조). 이론상 단순히 실행하는 것만으로 기기가 벽돌이 되거나 데이터가 손실되지는 않지만, 그래도 먼저 백업하세요. 이 코드를 실행하거나 이 코드가 부여하는 루트 접근 권한으로 수행하는 모든 작업으로 인해 발생하는 모든 결과는 작성자가 아닌 사용자의 책임입니다.
- 이 익스플로잇은 UAF를 통해 커널 메모리를 수정합니다. 실패한 시도는 기기를 재부팅하며, 재부팅하면 모든 것이 복원됩니다. 실행당 성공률은 100%가 아니므로 다시 실행하면 됩니다.
- 루트는 기기에 대한 완전한 제어를 의미합니다 — 주의해서 사용하세요. 이 프로젝트는 단지 루트 권한을 얻을 뿐입니다. 이후 이미지 플래싱, 파티션 쓰기, 보호 기능 비활성화, 테스트되지 않은 모듈 설치는 기기를 영구적으로 벽돌화할 수 있으며, 이는 사용자의 책임입니다.
exploit/ GhostLock PoC 소스 (Android arm64) + 빌드 시스템
src/ 익스플로잇 코어: futex UAF, KASLR 슬라이드, sysctl boot_id 하이재킹,
임의 R/W, cred/SELinux/sig_enforce 쓰기, KSU 로드
src/targets/ 펌웨어별 오프셋 테이블 (target.h)
ksu/ 커스텀 kernelsu.ko 빌드 (MagicOS 커널 + 기기 구성) 및
PC 측 adb 로드 드라이버
tools/ 기기 내 로드 헬퍼: load_ko.c / kmsg_dumper.c (소스에서 빌드),
정책 규칙, 로더 템플릿 (+ 바이너리 획득 방법)
요구 사항: Docker, Android Platform Tools.
펌웨어별 사전 빌드 번들: Releases에서 자신의 MagicOS 버전과 일치하는 것을 내려받아 호스트에서 압축을 풀고 실행하세요.
./setup.sh # PC + adb 사용: 커널 버전 확인, 모든 파일 푸시,
# 체인 실행, 가끔 실패 시 재시도
PC가 없나요? 번들을 휴대폰에서 압축을 풀고 Shizuku 셸(rish)에서 동일한 스크립트를 실행하세요. 스크립트가 자신의 위치를 감지하여 나머지를 로컬에서 처리합니다:
sh /sdcard/ghostlock-<version>/setup.sh
대신 소스에서 빌드하려면:
# 1. 기기 익스플로잇 바이너리 빌드
cd exploit && ./docker-build.sh bin # exploit_static (8.0.0.128)
# 8.0.0.160: ./docker-build.sh PROJECT=annap-AGT-AN00_8.0.0.160 bin
# (./docker-build.sh ondevice는 기본 env 구성이 포함된 정적 바이너리를
# 빌드합니다. 첫 실행 시 NDK를 내려받으며, 약 1.2GB입니다.)
# 2. KSU 번들 바이너리를 ksu/tools/에 획득/빌드 —
# ksu/tools/README.md 참조 (kernelsu_h80gt.ko: ksu/README.md — 펌웨어의
# 커널 서브레벨과 일치하는 opensource 트리로 빌드;
# ksud: 저장소에 포함됨; magiskpolicy: 저장소에 포함됨; load_ko/kmsg_dumper:
# ./docker-build.sh tools)
# 3. 휴대폰에서 ADB 디버깅을 활성화한 다음
bash ../ksu/ksu_load_ko.sh
# 8.0.0.160: PROJECT=annap-AGT-AN00_8.0.0.160 bash ../ksu/ksu_load_ko.sh
이 스크립트는 adb를 통해 전체 체인을 구동합니다: GhostLock (루트 + permissive +
sig_enforce 플립), magiskpolicy를 통한 SELinux 정책 주입, 가짜 kallsyms
bind-mount, load_ko (init_module), 그 다음 ksud 기동 단계들, 그리고 마지막
단계로 SELinux enforcing 복원. /proc/modules에서 kernelsu를 기다린 후
KernelSU 관리자를 엽니다 ("Working <LKM> [Jailbreak mode]" 표시됨).
CONFIG_MODULE_SIG_FORCE=y — 런타임 sig_enforce 플래그가 서명되지 않은
모듈 로드를 차단합니다. 익스플로잇이 이 값을 일시적으로 0으로 플립합니다
(로더 스크립트는 모듈이 적재된 후 1로 복원합니다)./proc/kallsyms에서 commit_creds 및 관련
심볼을 제거하므로 커널 로더가 .ko의 미정의 심볼을 해석할 수 없습니다. 이
흐름은 스트리핑된 심볼을 실제 런타임 주소(링크 주소 + KASLR 슬라이드)에
앞에 추가한 가짜 kallsyms를 bind-mount합니다.android12-5.10_kernelsu.ko는 직접 사용할 수 없습니다. ksu/는 펌웨어의
서브레벨과 기기의 자체 커널 구성에 맞는 MagicOS 커널 소스를 대상으로
KernelSU v3.2.5를 다시 빌드합니다. ksu/README.md를 참조하세요.전체 체인 (UAF → KASLR → 임의 R/W → cred → SELinux permissive → sig_enforce → KernelSU 실행, enforcing 복원, boot_id 복원)은 위 표의 모든 버전에서 실제 기기로 검증되었습니다. 실행이 초기에 실패하여 휴대폰이 재부팅될 수 있으며(대략 4회 중 1회), 설정 스크립트가 자동으로 재시도하거나 직접 다시 실행하면 됩니다.
exploit/, 최상위 문서)는
Apache License 2.0 ( LICENSE 참조) 하에 있으며, 이 포트가
파생된 업스트림 IonStack PoC와 동일합니다.ksu/ 아래의 파일들은 GPL-2.0 ( ksu/LICENSE
참조)입니다: init-h80gt.patch와 ksu_rules.annotated 정책 세트는
GPL-2.0인 KernelSU의 kernel/ 디렉토리에서 파생되었습니다.