
GhostLock (CVE-2026-43499) for Galaxy S25 FE (작업 중)
CVE-2026-43499를 Samsung Galaxy S26 시리즈 — Android 16 / GKI 6.12용으로 포팅했습니다. 단일 바이너리, 세 개의 커널 라인, 런타임 동적 파라미터 매칭: 빌드별 컴파일 없이 이론적으로 전체 S26 시리즈를 커버합니다.
대부분의 GhostLock 포팅 작업은 단일 기기 또는 단일 펌웨어를 대상으로 합니다. 이 저장소는 S26 타깃을 위해 모든 메커니즘을 다시 작성한 새로운 포팅으로, 전체 제품군을 커버할 것으로 예상됩니다.
snothin/CyberMeowfia를 유지 관리하면서 원래 pipe physrw 채널이 불안정하다는 것을 발견했습니다(네트워크를 끊어버림). 그래서 해당 경로를 포기하고 대안을 탐색했습니다. 이후 monovibe가 제가 탐색하던 경로를 더 발전시켰다는 것을 알게 되어 해당 접근 방식을 채택했고, 반복적인 디버깅 끝에 이 저장소가 완성되었습니다.
uid=0(root) context=u:r:kernel:s0로 실행됨; 추상 유닉스
소켓의 su_daemon을 통한 영구 루트 셸.system_unbound_wq에
work_struct를 위조하며, 해당 함수는 call_usermodehelper_exec_work이므로 커널이
init 자격 증명으로 우리 데몬을 실행합니다. 자격 증명 페이지에 대한 KDP의 EL2 가드는
절대 트리거되지 않습니다.pselect + futex PI 레이스
→ 라운드당 정렬된 qword 쓰기 1회
→ attr 캐리어 (가짜 misc fd 2개)
controller fd가 데이터 포인터를 재타겟팅
data fd가 임의 커널 주소 읽기/쓰기
→ slide oracle (tracefs)
→ UMH 루트 (workqueue 인젝션)
system_unbound_wq
ptmx open/close 스톰이 워커를 깨움
커널이 init 자격 증명으로 데몬 실행
→ DEFEX 우회 (bind-mount)
→ su_daemon이 /data/local/tmp/temp_su.sock에서 대기
파라미터는 개별 빌드가 아닌 커널 라인(세 개의 라인: cn, intl, exynos)으로
매칭됩니다. 알 수 없는 OTA 빌드는 모델과 CSC를 기준으로 가장 가까운 알려진 라인으로
폴백합니다. 완전히 알 수 없는 모델은 거부됩니다(fail-closed). 포함된 빌드
목록은 exploit/src/params_table.c에 권위적으로 정의되어 있습니다.
새 기기 또는 펌웨어로 포팅할 때 필요한 파라미터는 PORTING.md를 참조하세요.
Android NDK(r26+) 필요. 그냥 실행:
cd exploit
make preload
# build/bin/preload.so(익스플로잇) 및 build/embed/su_daemon_aarch64_pie(임베디드 데몬) 생성
preload.so, su_daemon_aarch64_pie 및 ksud를 기기에 푸시(adb
셸 세션, uid 2000에서 실행):
adb push exploit/build/bin/preload.so /data/local/tmp/
adb push exploit/build/embed/su_daemon_aarch64_pie /data/local/tmp/cve-2026-43499-root
adb push <ksud> /data/local/tmp/ksud
adb shell chmod 755 /data/local/tmp/cve-2026-43499-root /data/local/tmp/ksud
# 단일 시도:
adb shell "env LD_PRELOAD=/data/local/tmp/preload.so sh"
익스플로잇은 확률적(레이스)이며 일반적으로 반복적인 시도가 필요합니다.
성공적인 실행 시 su_daemon이 /data/local/tmp/temp_su.sock에서 대기하며, 모든
로컬 프로세스가 연결할 수 있습니다.
부팅 클레임 가드(/data/local/tmp/ghostlock-boot.log)는 각 부팅 실행의 결과를
기록합니다. 동일 부팅에서 두 번째 전체 체인 실행은 거부됩니다(기기가
충돌할 수 있음). 파일을 지우거나 BOOT_FORCE=1을 설정하여 재정의하세요.
exploit/src/kernelsnitch/에 벤더링됨)이 저장소는 Apache-2.0 라이선스로 배포됩니다. 전체 텍스트는 LICENSE를, 코드 출처는 NOTICE를 참조하세요.
| 모델 | 기기 코드네임 | 테스트된 빌드 |
|---|
| SM-S942x (S26 Snapdragon) | m1q | S9420ZCS4AZG1, S942QOPU1AZDE, S942U1UES4AZG3, S942USQS4AZG3 |
| SM-S947x (S26+ Snapdragon) | m2q | S9470ZCS4AZG1, S947USQS4AZG3 |
| SM-S9480 (S26 Ultra CN) | m3q | S9480ZCS3AZF1, S9480ZCS4AZG1 (테스트된 빌드) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |