Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
F9360-CVE43499 — SM-F9360 (Galaxy Z Fold4, q4q) 잠긴 부트로더 KernelSU root — CVE-2026-43499 임시 root → LD_PRELOAD DEFEX 우회 → LTO 미적용 clang-12 kernelsu.ko. 기기 검증 완료 2026-08-12. | Kitploit
도구/GitHubGitHub/e-r-butch/f9360-cve43499
Android SecurityPrivilege EscalationExploitationReverse EngineeringMobile SecurityLearning & EducationFirmware AnalysisBinary Exploitation
GitHube-r-butch/f9360-cve43499

F9360-CVE43499

SM-F9360 (Galaxy Z Fold4, q4q) 잠긴 부트로더 KernelSU root — CVE-2026-43499 임시 root → LD_PRELOAD DEFEX 우회 → LTO 미적용 clang-12 kernelsu.ko. 기기 검증 완료 2026-08-12.

저장소 보기
43528일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

SM-F9360 (Galaxy Z Fold4 / q4q) 부트로더 언락 없이 KernelSU Root

CVE-2026-43499 임시 root → LD_PRELOAD 채널로 DEFEX 우회 → LTO 없는 clang-12 버전 kernelsu.ko → su + KernelSU Manager 전체 기능

상태: ✅ 2026-08-12 실기기 검증 달성 (펌웨어 F9360ZCSAIZF1, 커널 5.10.236-android12-9-2755199-abF9360ZCSAIZF1)

본 프로젝트는 Bootloader 잠금 상태의 삼성 기기에서 KernelSU root를 달성하는 완전한 재현 가능 절차를 기록합니다: BL 언락 불필요, boot.img 플래싱 불필요, Odin 불필요.


TL;DR (English): This repo documents a fully device-verified jailbreak path for a locked-bootloader Samsung Galaxy Z Fold4 (SM-F9360, SM8450, kernel 5.10.236, firmware F9360ZCSAIZF1): a CVE-2026-43499 (rtmutex UAF, fixed in July-2026 firmware) exploit chain grants temporary kernel-domain root; a custom LD_PRELOAD constructor .so bypasses Samsung's DEFEX execve interceptor to init_module() a KernelSU LKM built with the exact device toolchain (AOSP clang 12.0.5 r416183b) and with LTO disabled — the two factors that make the module loadable and its init executable on this CFI/LTO hardened kernel. Result: su works (uid=0, context=u:r:ksu:s0) and KernelSU Manager v3.2.5 recognizes the kernel. Root is in-memory only: every reboot requires re-running the exploit (~3 min, scripted). All pitfalls and dead ends (fake exports, CRC patching, ksud late-load, LTO function-sections layout) are documented below.


목차

  • 1. 성과와 본질적 한계
  • 2. 배경: 왜 어렵고, 왜 가능한가
  • 3. 공격 체인 개요 (3계층)
  • 4. 환경 요구사항
  • 5. Step 1 — exploit 빌드 (임시 root)
  • 6. Step 2 — kernelsu.ko 빌드 (LTO 없는 clang-12 레시피)
  • 7. Step 3 — ksu-load.so 빌드 (DEFEX 우회 로더)
  • 8. Step 4 — 기기 측 실행과 검증
  • 9. 재부팅 후 복구 절차
  • 10. 핵심 발견과 함정 목록
  • 11. 펌웨어/커널 호환성
  • 12. 감사의 글과 업스트림 프로젝트
  • 13. 면책 조항

1. 성과와 본질적 한계

항목상태
임시 root (커널 도메인 kernel:s0)✅ 안정적 달성 (연속 9회 성공)
KernelSU 모듈 로드 (init_module)✅ kernelsu ... Live (O)
KSU init 완전 실행✅ 15개 마커 mark 전부 통과
su 명령✅ uid=0(root) gid=0(root) context=u:r:ksu:s0
KernelSU Manager v3.2.5✅ 커널 버전 인식 (supercall 검사 통과), SELinux 강제 모드에서 동작
Bootloader 언락❌ 불필요
플래싱/파티션 수정❌ 불필요

본질적 한계: BL 잠금 → root는 순수 메모리 상태. 매 재부팅 후 exploit 재실행 + 모듈 재로드 필요 (전체 절차 약 3분, 스크립트화 완료). ksud 유저스페이스 daemon은 배포 불가 (DEFEX가 execve 차단, §10-4 참조), 그러나 su / supercall / Manager는 모두 커널 sucompat이 직접 처리하므로 ksud에 의존하지 않음.

경고: rmmod kernelsu는 기기를 즉시 panic 재부팅시킴 (RKP가 보호 메모리상의 syscall-table 복원 경로) — 절대 언로드하지 말 것.

2. 배경: 왜 어렵고, 왜 가능한가

왜 어려운가 (삼성의 심층 방어)

  • BL 잠금: OEM 잠금 해제 불가, fastboot oem unlock 부재; 모든 영구적 root (magisk/kernel patch)는 boot.img 플래싱이 필요하나 locked BL은 모든 자체 서명 이미지를 거부.
  • KDP / RKP / DEFEX: 커널 데이터 보호 (rodata 물리 쓰기는 KDP monitor 하드 리부트 유발), RKP hypervisor가 syscall table 보호, DEFEX가 root 도메인의 새 ELF 실행 차단.
  • CFI + LTO 커널: CONFIG_CFI_CLANG=y + Full LTO. mod->init의 유일한 출처는 CFI jump-table 슬롯 __cfi_jt_init_module; 간접 호출은 반드시 .cfi_jt 테이블 엔트리를 거쳐야 하며, 그렇지 않으면 CFI 검사가 즉시 panic.
  • TRIM_UNUSED_KSYMS: KSU가 필요로 하는 약 40개 심볼이 __ksymtab 익스포트 테이블에서 잘려나가 일반 insmod로는 해석 불가 (Unknown symbol).
  • MODULE_FORCE_LOAD=n + modversions: vermagic은 문자 단위로 정확히 일치해야 함; IGNORE_MODVERSIONS/IGNORE_VERMAGIC 플래그는 모두 try_to_force_load() 막다른 길로 감.

왜 가능한가

  1. CVE-2026-43499 (rtmutex proxy-lock 롤백 UAF, 메인라인 업스트림 2026-07 수정)는 2026-06 및 그 이전 펌웨어에서 안정적으로 커널 도메인 권한 상승 가능 — 커뮤니티에 동일 SoC (SM8450) + 동일 커널 브랜치 (5.10)의 실기기 검증 포팅이 이미 존재: sarabpal-dev/IonStack-S22U (b0q / S22U, exp32 라우트).
  2. DEFEX는 execve만 차단하고 동적 로딩은 차단하지 않음: LD_PRELOAD constructor .so가 root 도메인에서 임의 코드를 실행하는 유일한 면제 채널.
  3. KernelSU v3.2+의 jailbreak 모드 (ksud late-load)는 바로 locked BL 기기를 위해 설계됨: boot 플래싱 없이 런타임에 init_module 직접 실행.
  4. 툴체인 매칭 원칙: CFI type-id는 LLVM 내부 hash이므로, 모듈은 기기 커널과 완전히 동일한 컴파일러로 빌드해야 함 (q4q 기기 = AOSP clang 12.0.5 r416183b).
  5. LTO 분할 레이아웃이 모듈 크래시의 궁극적 근본 원인: function-sections가 생성한 447개의 ALLOC 소형 섹션은 삼성 커널 로더에서 반드시 크래시; LTO 비활성화 재빌드 → 전통적 22섹션 레이아웃 → 한 번에 성공 (§10-1 상세).

3. 공격 체인 개요 (3계층)

┌─ Layer 1: CVE-2026-43499 임시 root
│   ionstack-q4q exploit (KASLR 유출 → mm reclaim → exp32 32-bit 스택 stamp
│   → CFI r/w → pipe physrw → UMH root daemon)
│   → /data/local/tmp/cve-2026-43499-root -c '<cmd>' = kernel:s0 도메인 root 명령 채널
│
├─ Layer 2: LD_PRELOAD .so 로딩 채널 (DEFEX 우회)
│   DEFEX는 kernel 도메인의 새 ELF execve를 차단 (Killed); LD_PRELOAD의 constructor
│   실행은 면제 → ksu-load.so가 /system/bin/true 프로세스 내에서:
│   ko 읽기 → /proc/kallsyms로 201개 UND 심볼 수동 재배치 (SHN_ABS + st_value=절대주소)
│   → vermagic patch (구버전 필요) → init_module() → 성공
│
└─ Layer 3: KernelSU 커널 모듈 (LTO 없는 clang-12 버전)
    init 완전 실행 15 mark 전부 통과 → sucompat (allow_shell=1) + supercall 사용 가능

4. 환경 요구사항

기기

항목값
모델SM-F9360 (Galaxy Z Fold4, q4q)
SoCSM8450 (Snapdragon 8+ Gen 1)
펌웨어F9360ZCSAIZF1 (≤ 2026-06 빌드, CVE 포함)
커널5.10.236-android12-9-2755199-abF9360ZCSAIZF1
기기 컴파일러AOSP clang 12.0.5 (r416183b, c935d99d7cf) (/proc/version 확인)
정확한 vermagic5.10.236-android12-9-2755199-abF9360ZCSAIZF1 SMP preempt mod_unload modversions aarch64

펌웨어가 다르면 = kallsyms / 레이아웃 / vermagic이 다르므로 target.h 재적응 및 재빌드 필요. §11 참조.

빌드 머신

  • macOS 호스트 + colima/docker, Ubuntu 24.04 aarch64 컨테이너 (x86_64 clang 바이너리는 arm64 컨테이너에서 실행 불가; macOS 호스트 빌드는 툴 지옥이므로 전부 컨테이너화)
  • 컨테이너 내: clang-14/15 + focal 소스 clang-12 / lld-12 (/usr/bin/clang-12, /usr/bin/ld.lld-12)
  • 컨테이너에 gcc 없음 → make는 반드시 CC=clang HOSTCC=clang LD=ld.lld-12
  • NDK r29 (exploit 및 ksu-load.so 빌드)
  • 삼성 커널 소스: GitHub 미러 FryUpDoe/android_kernel_samsung_q4q (opensource.samsung.com은 Cloudflare 안티봇 존재)

5. Step 1 — exploit 빌드 (임시 root)

exploit은 sarabpal-dev/IonStack-S22U (SM8450 5.10 실기기 GREEN 기반, exp32 라우트) 기반. q4q 적응 = 저장소 내 patches/ionstack-q4q-adapt.patch (249줄, target.h 파라미터, kernelsnitch, root.c 등 포함).

export ANDROID_NDK_HOME=$HOME/Projects/f9360-root/tools/android-ndk-r29
cd work/ionstack-q4q          # IonStack-S22U clone + 본 patch
make PROJECT=q4q-F9360ZCSAIZF1   # 주의: 변수명은 PROJECT= 이지 TARGET= 아님

q4q 핵심 파라미터 (튜닝 완료, 변경 금지):

파라미터값이유
P0_KERNEL_PHYS_LOAD0xa8000000b0q/S22U 실기기 값 (SM8450 전 계열 관례; 0x80080000은 오정렬 오탐)
APP_KERNEL_PAGE_KSNITCH_IDENTITY_END0xffffff8b00000000 (44GB)기기 메모리가 phys 33.8–39.5GB에 분산, 2GB 윈도우 (e2s에서 복사한) 는 절대 못 찾음
KERNELSNITCH_FUTEX_HASH_SIZE2048커널 roundup_pow2(256*8)=2048, 기본값 4096은 mm leak 전부 실패 유발
KERNELSNITCH_MTE_ENABLED0프로덕션 커널 kasan=off, MTE 미활성
EXP32_STAMP_OFF0x58디스어셈블리 도출 (b0q/q4q의 futex_wait_requeue_pi와 compat do_ipv6_setsockopt 프레임 일치)
fork 32→16 그룹 / APPENDED_FUTEXES 4096→1024—시스템 부하 감소, LMKD SIGKILL 방지
KSU_LOAD_ONLY=1 (root.c)—fake_exports 건너뜀 (ksu-load.so 수동 재배치로 대체)

3개 바이너리 산출 (build/q4q-F9360ZCSAIZF1/): preload .so, app .so, root helper PIE. 기기 측 실측은 반드시 저부하에서 실행 (loadavg < 2.5, 부팅 후 1–2분 대기), 고부하에서는 exploit의 fork 폭풍 (~544 스레드 + 1024 futex park 스레드)이 LMKD에 의해 조용히 SIGKILL됨.

6. Step 2 — kernelsu.ko 빌드 (LTO 없는 clang-12 레시피)

이것이 본 프로젝트의 가장 핵심적인 재현 가능 레시피. 먼저 원리를 설명하고, 그다음 명령을 제시.

왜 필수인가: 세 가지 철칙

도구 다운로드