
CVE-2026-65343 PoC — AppleKeyStore OOB読み取り → KASLR回避(iOS 26.6 / 23G71)
コンポーネント: AppleKeyStore カーネル拡張 — _LibSer_SEPControl_Deserialize
影響を受けるバージョン: iOS / iPadOS 26.6 (23G71) 以前
修正バージョン: iOS / iPadOS 26.6.1 (23G83)
種別: SEP 制御メッセージ逆シリアル化における領域外読み取り
影響: カーネルポインタ漏洩 → サンドボックス化された権限不要プロセスからの 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 は、dyld がイメージロード時に interpose テーブルを処理するため機能します。これはカーネルが __DATA_CONST 保護を適用する前です。
kSecAttrTokenIDSecureEnclave)— 権限不要のサイドロードアプリでも利用可能Security.framework による SE 鍵署名は AKS IOKit 呼び出しを
プロセス内で呼び出す場合があります(デバイスと iOS ビルドに依存)。一部の構成では呼び出しが secd XPC
経由でルーティングされます — その場合、ゼロハンドルのフォールバックは OOB パスの到達可能性を確認しますが、
完全な KASLR 無効化は確認できません。# 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 がセキュリティアドバイザリでクレジットを公開 |