
CVE-2026-65343에 대한 개념 증명(PoC)으로, iOS 26.6에서 KASLR을 무력화하기 위해 커널 포인터를 유출하는 AppleKeyStore의 경계를 벗어난 읽기(out-of-bounds read) 취약점입니다. DYLD_INTERPOSE를 통한 ACM 핸들 캡처와 AKS 셀렉터 전반에 걸친 프로브를 포함합니다.
구성 요소: AppleKeyStore 커널 확장 — _LibSer_SEPControl_Deserialize
영향: iOS / iPadOS 26.6 (23G71) 및 이전 버전
수정 버전: iOS / iPadOS 26.6.1 (23G83)
유형: SEP 제어 메시지 역직렬화 과정의 경계를 벗어난 읽기(Out-of-Bounds read)
영향: 커널 포인터 유출 → 샌드박스 및 자격(entitlement)이 없는 프로세스에서 KASLR 무력화 (DYLD_INTERPOSE ACM 핸들 캡처 경유)
발견자: Drinor Selmanaj (Sentry), Surya Narayan Kushwaha
(Apple 보안 권고 — iOS 26.6.1 참조)
AppleKeyStore 커널 확장의 _LibSer_SEPControl_Deserialize는 ACM(자격 증명 관리자) 메시지 버퍼의 (payload_ptr, declared_length) 쌍을 copyout()을 통해 사용자 공간에 게시하지만, declared_length ≤ remaining 검증을 수행하지 않습니다.
declared_length = 0x800을 지정하면 드라이버는 커널 ACM 메시지 버퍼의 끝을 넘어 약 0x7E8 바이트를 복사하여 인접한 커널 힙 할당 영역을 읽습니다. 해당 인접 영역에는 KASLR 슬라이드를 계산하는 데 사용할 수 있는 커널 포인터(0xfffffff0xxxxxxxx)가 포함되어 있습니다.
; _LibSer_SEPControl_Deserialize (영향 경로, 26.6 / 23G71)
ldr w2, [acm_msg + declared_length_offset] ; 사용자 제어 0x800
; 검증 없음: w2 <= (acm_msg_end - payload_ptr) ← 누락
bl copyout ; w2 바이트를 사용자 공간으로 복사
사이드로드된 앱에서는 샌드박스에 의해 직접적인 IOServiceOpen("AppleKeyStore") 호출이 차단됩니다. 그러나 Security.framework의 Secure Enclave 키 서명 경로는 실제 ACM 세션 핸들을 사용하여 프로세스 내에서 IOConnectCallMethod를 호출합니다.
PoC는 __DATA,__interpose 훅(__DATA_CONST가 읽기 전용으로 설정되기 전인 dyld 로드 시점에 실행됨 — iOS 26에서는 DATA_CONST 보호로 인해 fishhook이 차단됨)을 사용합니다:
SecKeyCreateRandomKey(kSecAttrTokenIDSecureEnclave) → SecKeyCreateSignature() → 실제 ACM 핸들로 프로세스 내 IOConnectCallMethod 호출 발생(conn, handle[16]) 캡처declared_length = 0x800으로 재생0xfffffff0xxxxxxxx 커널 포인터 스캔 → KASLR 슬라이드 계산poc_aks_oob.m은 전체 ACM 핸들 캡처 및 OOB 프로브 체인을 구현합니다:
kSecAttrAccessibleAfterFirstUnlock, 생체 인증 없음)declared_length = 0x800으로 재생KPTR @+XXXX = 0xfffffff0YYYYYYYY 형식으로 발견된 커널 포인터 출력SE 키 서명이 프로세스 내 대신 secd XPC를 통해 라우팅되는 경우, 폴백 프로브는 제로 핸들을 사용합니다(OOB 경로 도달 가능성 확인; 모든 셀렉터는 ACM 검증에 실패하지만 VNOP 경로는 확인됨).
iOS 26에서는 __DATA_CONST(GOT 포함)가 프로세스 내 코드가 실행되기 전에 읽기 전용으로 매핑됩니다. 런타임 GOT 쓰기(fishhook에서 사용하는 방식)는 KERN_PROTECTION_FAILURE → SIGBUS를 트리거합니다. __DATA,__interpose를 통한 DYLD_INTERPOSE는 dyld가 커널이 __DATA_CONST 보호를 적용하기 전인 이미지 로드 시점에 인터포즈 테이블을 처리하므로 작동합니다.
kSecAttrTokenIDSecureEnclave) — 자격 없이도 모든 사이드로드 앱에서 사용 가능# Xcode 프로젝트 — Security.framework 및 Foundation.framework 링크
clang -arch arm64 \
-isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-framework Security -framework Foundation \
-o poc poc/poc_aks_oob.m
codesign -s "Apple Development" --entitlements ent.plist poc
최소 자격 (ent.plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>keychain-access-groups</key>
<array><string>$(AppIdentifierPrefix)com.research.poc65343</string></array>
</dict></plist>
| 날짜 | 이벤트 |
|---|---|
| 2026-08-17 | 수정 사항이 포함된 iOS 26.6.1 출시 |
| 2026-08-17 | Apple 보안 권고에 크레딧 게시 |