
이 패키지는 완전한 루트 권한을 제공하지 않습니다. SELinux를 Permissive 모드로 전환하고 후속 작업을 위해 reclaim을 충분히 오래 유지합니다. 여기서 호스트 `uid=0`은 달성되지 않습니다.
삼성 Galaxy S26 Ultra(SM-S948U1, 코드명 m3q)의 펌웨어 S948U1UES3AZF1(GKI 6.12.30-android16-5)에서 동작하는 SELinux 전용 park에 대한 연구 스냅샷입니다.
이 패키지는 완전한 루트가 아닙니다. SELinux를 Permissive로 전환하고 후속 작업에 필요한 만큼 reclaim을 유지합니다. 호스트 uid=0은 여기서 달성되지 않습니다.
GhostLock / CVE-2026-43499 작업 계열을 기반으로 제작되었습니다: Xiaomi popsicle preload 프레임워크, Samsung Root-My-Galaxy(emerald 기기 타깃과 m3q 재타깃 포함)를 AZF1 park 전용으로 개조했습니다. Attribution 참조.
kptr_restrict / 동일 스택 후속 쓰기). 이런 작업은 커널 패닉을 일으키며, 이 기기에서는 안전 모드(RescueParty급 복구)로만 부팅되는 상태를 남긴 사례가 있습니다. 언락/복구를 잘못 반복하면 공장 초기화 위험이 있습니다.bin/preload-4-s1.so는 AZF1 전용입니다. 다른 펌웨어에서는 target.h를 다시 생성해야 합니다.sched_blocked_reason 호출자 → 이미지 베이스).rt_mutex 웨이터 페이지 스프레이(linear-map VA).selinux_state.enforcing에 저장(enforce 1→0).WAIT_REQUEUE_PI settle로, 원시 I4 지연 KP보다 park이 더 오래 유지되도록 합니다.LD_PRELOAD(/system/bin/true) 하에서 유지되고 reclaim이 보유되며 S1_READY를 로깅합니다.성공 시 확인:
adb shell getenforce # Permissive
adb shell pidof true # non-empty (parked preload)
헬퍼 스크립트는 같은 부팅에서 확보한 VA를 finish_va.txt에 기록합니다(KASLR, 스프레이, 정적 DATA 심볼).
이 펌웨어의 GhostLock은 제약된 임의 쓰기(쓰기 가능한 .data에 NULL 및 linear-map/스프레이 값 — STORE 값으로서는 커널 text/rodata가 아님)와 Permissive SELinux를 제공합니다. 소프트 루트는 여전히 빠져 있습니다:
| 필요 항목 | 이유 |
|---|---|
| 정보 유출 / AR | 힙 task_struct* 또는 /dev/uhid inode VA (shape-0 GhostLock 읽기와 여러 oracle은 AZF1에서 동작하지 않음) |
| Cred / 마무리 | task를 알게 되면: init_cred(또는 uid 필드) 쓰기 — 삼성 KDP/RKP는 단순한 포인터 교체를 차단할 수 있음; 작동하는 Knox 루트는 일반적으로 호스트 uid=0 이후 KDP 인식 KernelSU(ksud)가 필요 |
| I4 이후 안정적 쓰기 | I4+R1e 이후 추가 GhostLock punch는 안전하지 않음(KP 진입). “그냥 다시 STORE”를 마무리로 취급하지 마세요 |
별도의 보완 CVE(특히 6월 AZF1에 여전히 존재하는 읽기 프리미티브)가 현재 가장 효율적인 경로입니다. GhostLock만으로 W2 punch를 더 다듬는 것은 그렇지 않습니다.
target.h 재빌드)adb, python3, Android NDK r29+ (재빌드용)/system/bin/true에 LD_PRELOAD할 수 있는 셸# from a Linux/WSL host with the device attached
export SHARE="$PWD" # or path where this repo lives
bash park_cal_one.sh
adb shell getenforce # expect Permissive
park_cal_one.sh는 SHARE를 이 저장소 디렉터리로 기본 설정합니다. 필요하면 재정의하세요:
SHARE=/path/to/this/repo PRELOAD=/path/to/this/repo/bin/preload-4-s1.so bash park_cal_one.sh
park된 true 프로세스는 그대로 두세요. 다른 트리의 실험적 두 번째 punch를 연쇄 실행하지 마세요.
powershell -ExecutionPolicy Bypass -File .\build-park.ps1
NDK 경로가 다르면 스크립트 내부에서 $ndkBin을 설정하세요.
make -C source clean preload
# output: source/build/bin/preload.so (same I4+R1e park flags as preload-4-s1)
cp source/build/bin/preload.so bin/preload-4-s1.so
기본 target.h는 Candidate I4 + R1e + S1 park(AZF1_R1_SECOND_WAIT, AZF1_R1_THEN_S1)을 활성화합니다. 이 패키지에서는 K3/K4/소프트 두 번째 punch 플래그를 활성화하지 마세요.
bin/preload-4-s1.so prebuilt park payload (AZF1)
park_cal_one.sh push + run + VA parse
build-park.ps1 Windows NDK build (park only)
source/ preload sources + AZF1 target.h
generate_target.py optional retarget helper (needs your boot.img)
| 단계 | 상태 |
|---|---|
SELinux enforce→0 + park (I4+R1e) | AZF1 연구실 기기에서 작동 |
| 추가 GhostLock “W2” punch | 금지 — KP 발생, 안전 모드 전용 부팅을 강제할 수 있음 |
호스트 uid=0 / KernelSU 설치 | 이 패키지에 없음 — 정보 유출 + Knox 인식 마무리 필요 |
이 스냅샷은 기존의 공개 및 연구 작업을 기반으로 합니다. 공은 그곳에 있습니다:
| 프로젝트 | 이 park에서의 역할 |
|---|---|
| CVE-2026-43499-popsicle (Xiaomi popsicle) | GhostLock 익스플로잇 프레임워크: LD_PRELOAD 하네스, KernelSnitch reclaim/스프레이, fdset 인코딩 웨이터, pselect 잔여 쓰기 코어, generate_target.py / Makefile 레이아웃 |
| Root-My-Galaxy + Root-My-Galaxy-Payloads | 삼성 소프트 루트 프레임(W1 park / W2 후속), Knox/KDP 인식 마무리 방향, m3q / AZF1 타깃 자료, 그리고 popsicle의 P0 boot_id 슬라이드 대신 여기서 사용한 tracefs 우선 KASLR 접근법 |
| emerald (RMG 기기 타깃) | RMG의 Samsung 지오메트리, 슬라이드 전략, W1 SELinux-park 출시 패턴에 영향을 준 emerald 기기 계열의 이전 GhostLock 포트. 이 m3q/AZF1 park은 그 계열에 속하며 처음부터 새로 쓴 것이 아닙니다. |
취약점: CVE-2026-43499 (GhostLock — rt_mutex 우선순위 상속 잔여 쓰기).
이 트리: RMG/emerald급 삼성 개조가 적용된 popsicle preload 소스의 AZF1 / m3q(SM-S948U1 / S948U1UES3AZF1) 포트로, 연구자 소유 하드웨어용 SELinux 전용 park 하네스로 축소되었습니다. Root-My-Galaxy emerald 제품 타깃으로의 병합본이 아닙니다.