
CVE-2026-65343の概念実証。AppleKeyStoreにおける領域外読み取りにより、iOS 26.6のKASLRを無効化するカーネルポインタを漏洩させます。DYLD_INTERPOSEによるACMハンドル取得と、AKSセレクタにわたるプローブを含みます。
コンポーネント: AppleKeyStore カーネル拡張 — _LibSer_SEPControl_Deserialize
影響を受けるバージョン: iOS / iPadOS 26.6 (23G71) 以前
修正バージョン: iOS / iPadOS 26.6.1 (23G83)
タイプ: SEP 制御メッセージの逆シリアル化における領域外読み取り
影響: カーネルポインタの漏洩 → サンドボックス化された、entitlement を持たないプロセスからの KASLR 無効化(DYLD_INTERPOSE ACM ハンドル取得経由)
発見者: Drinor Selmanaj (Sentry)、Surya Narayan Kushwaha
(Apple セキュリティアップデート — iOS 26.6.1 による)
AppleKeyStore カーネル拡張内の _LibSer_SEPControl_Deserialize は、ACM(Credential Manager)メッセージバッファから (payload_ptr, declared_length) のペアを copyout() 経由でユーザースペースに公開しますが、declared_length ≤ remaining の検証を行いません。
declared_length = 0x800 を指定することで、ドライバはカーネル ACM メッセージバッファの末尾を約 0x7E8 バイト超えてコピーし、隣接するカーネルヒープ割り当て領域を読み取ります。これらの隣接領域にはカーネルポインタ(0xfffffff0xxxxxxxx)が含まれており、KASLR スライドの計算に使用できます。
; _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 フック(dyld ロード時に、__DATA_CONST が読み取り専用になる前に実行されます — fishhook は iOS 26 では DATA_CONST 保護によりブロックされます)を使用します:
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 は、カーネルが __DATA_CONST 保護を適用する前に、dyld がイメージロード時に interpose テーブルを処理するため機能します。
kSecAttrTokenIDSecureEnclave)— entitlement なしで任意のサイドロードアプリが利用可能# 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
最小限の entitlements(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 がセキュリティアドバイザリでクレジットを公開 |