
iOS 26.6のtmpfs setxattrハンドラーにおける、修正済みPACダイバーシファイアバイパスの概念実証。ユーザースペースから脆弱な署名パスへの到達可能性を示しています。
コンポーネント: XNU VFS — default_setxattr_doubleagent(tmpfs VNOP)
影響を受けるバージョン: iOS / iPadOS 26.6(23G71)以前
修正バージョン: iOS / iPadOS 26.6.1(23G83)
種別: xattrハンドラポインタ署名における固定PACダイバーシファイア
影響: カーネルコンテキストからのPC制御。カーネル書き込みプリミティブと組み合わせることで完全な権限昇格が可能
発見者: Bhaswanth Chigurupati、Billy Jheng Bing Jhong、Pan Zhenpeng(@Peterpan0927)(STAR Labs SG Pte. Ltd.)
(Appleセキュリティアドバイザリ — iOS 26.6.1 による)
tmpfsファイルシステムのVNOP xattrハンドラであるdefault_setxattr_doubleagentは、xattrハンドラ関数ポインタを**固定のコンパイル時定数PACダイバーシファイア#0x307a**を使用して署名します。
; XNUカーネル — default_setxattr_doubleagent(逆コンパイル結果)
handler_ptr = vnode_operations[VNOP_SETXATTR_SLOT]; // vnopテーブルから読み取り
signed_ptr = PACDA(handler_ptr, 0x307a); // 固定ダイバーシファイアで署名
... call AUTDA(signed_ptr, 0x307a) → BLR // 認証して分岐
ダイバーシファイアが固定かつ公開されているため、カーネル書き込みプリミティブを持つ攻撃者は以下を実行できます:
forged = PACIA(shellcode_addr, 0x307a)vnode_operationsテーブルの該当スロットにforgedを書き込む。setxattr()を呼び出す → カーネルがshellcode_addrを実行。iOS 26.6カーネル権限昇格チェーンにおいて:
CVE-2026-64788(IOGPUFamily UAF) → カーネル読み書きプリミティブ
CVE-2026-65330(本バグ) → PC制御 → root(uid=0)
sign_ptrプリミティブ(ダイバーシファイア#0x307aを使用したPACIA)は、ジェイルブレイクPOCでインラインARM64eアセンブリを使用して実装されています。カーネル読み書きプリミティブは以下に使用されます:
v_opポインタを特定する。vnode_operations[VNOP_SETXATTR_SLOT]に書き込む。setxattr("/tmp/trigger", ...)を介して実行をトリガーする。スタンドアロンPoC(poc_pac_bypass.c)は脆弱なVNOPパスを実行します:
/var/root/poc65330_testにテストファイルを作成XATTR_NAME="com.apple.poc.cve65330.test"を指定してsetxattr()を呼び出す → default_setxattr_doubleagentに到達removexattr()を呼び出してクリーンアップパスに到達このPoCはPACポインタの偽造やカーネルデータの上書きは行いません — 通常のsetxattr()システムコールを介して、脆弱な#0x307a署名パスがユーザースペースから到達可能であることを実証するのみです。
/var/root/でのファイル作成にはジェイルブレイクまたはサンドボックス外の権限が必要(setxattr呼び出し自体は任意のプロセスから到達可能 — ファイルパスはサンドボックス書き込み可能な場所に調整可能)# スタンドアロンCバイナリ(フレームワーク不要)
clang -arch arm64 -o poc poc/poc_pac_bypass.c
# デバイス上での実行用(署名付き):
clang -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-o poc poc/poc_pac_bypass.c
codesign -s "Apple Development" poc
固定ダイバーシファイア0x307aは、26.6(23G71)カーネルキャッシュの逆アセンブルから検証されました:
; default_setxattr_doubleagent + 0x??(おおよその位置)
MOVZ x1, #0x307a ; ダイバーシファイア定数
PACDA x0, x1 ; ハンドラポインタに署名
コールサイトの対応するAUTDA x0, x1は同じ定数を使用しており、ダイバーシファイア0x307aで偽造されたPACIAポインタが正常に認証されることを確認しています。
| 日付 | イベント |
|---|---|
| 2026-08-17 | 修正を含むiOS 26.6.1がリリース |
| 2026-08-17 | Appleがセキュリティアドバイザリでクレジットを公開 |