
Prova di concetto per un bypass del diversificatore PAC corretto nel gestore setxattr di tmpfs su iOS 26.6, che dimostra la raggiungibilità del percorso di firma vulnerabile dallo spazio utente.
Componente: XNU VFS — default_setxattr_doubleagent (VNOP tmpfs)
Interessati: iOS / iPadOS 26.6 (23G71) e versioni precedenti
Corretto in: iOS / iPadOS 26.6.1 (23G83)
Tipo: Diversificatore PAC fisso nella firma del puntatore del gestore xattr
Impatto: Controllo del PC dal contesto del kernel; escalation completa dei privilegi se combinato con una primitiva di scrittura nel kernel
Scoperto da: Bhaswanth Chigurupati, Billy Jheng Bing Jhong, Pan Zhenpeng (@Peterpan0927) di STAR Labs SG Pte. Ltd.
(secondo Apple Security Advisory — iOS 26.6.1)
default_setxattr_doubleagent, il gestore VNOP xattr per il filesystem tmpfs, firma il puntatore a funzione del gestore xattr utilizzando un diversificatore PAC fisso, costante in fase di compilazione: #0x307a.
; kernel XNU — default_setxattr_doubleagent (decompilato)
handler_ptr = vnode_operations[VNOP_SETXATTR_SLOT]; // letto dalla tabella vnop
signed_ptr = PACDA(handler_ptr, 0x307a); // firma con diversificatore FISSO
... call AUTDA(signed_ptr, 0x307a) → BLR // autentica e salta
Poiché il diversificatore è fisso e pubblicamente noto, un attaccante con una primitiva di scrittura nel kernel può:
forged = PACIA(shellcode_addr, 0x307a)forged nello slot appropriato della tabella vnode_operations del vnode di destinazione.setxattr() su qualsiasi file nel mount tmpfs → il kernel esegue shellcode_addr.Nella catena di escalation dei privilegi del kernel iOS 26.6:
CVE-2026-64788 (IOGPUFamily UAF) → primitiva r/w nel kernel
CVE-2026-65330 (questo bug) → controllo del PC → root (uid=0)
La primitiva sign_ptr (PACIA con diversificatore #0x307a) è implementata nel POC del jailbreak utilizzando assembly ARM64e inline. La primitiva di lettura/scrittura nel kernel viene utilizzata per:
v_op del vnode di destinazione.vnode_operations[VNOP_SETXATTR_SLOT].setxattr("/tmp/trigger", ...).Il PoC autonomo (poc_pac_bypass.c) esercita il percorso VNOP vulnerabile:
/var/root/poc65330_testsetxattr() con XATTR_NAME="com.apple.poc.cve65330.test" → raggiunge default_setxattr_doubleagentremovexattr() per raggiungere il percorso di puliziaIl PoC non crea un puntatore PAC contraffatto né sovrascrive dati del kernel — dimostra solo che il percorso di firma vulnerabile #0x307a è raggiungibile dallo spazio utente tramite una normale chiamata di sistema setxattr().
/var/root/ (la chiamata setxattr stessa è raggiungibile da qualsiasi processo — il percorso del file può essere modificato in una posizione scrivibile dalla sandbox)# Binario C autonomo (nessun framework richiesto)
clang -arch arm64 -o poc poc/poc_pac_bypass.c
# Per dispositivo (con firma):
clang -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-o poc poc/poc_pac_bypass.c
codesign -s "Apple Development" poc
Il diversificatore fisso 0x307a è stato verificato dal disassemblaggio del kernelcache 26.6 (23G71):
; default_setxattr_doubleagent + 0x?? (approssimativo)
MOVZ x1, #0x307a ; costante diversificatore
PACDA x0, x1 ; firma puntatore gestore
Il corrispondente AUTDA x0, x1 nel punto di chiamata utilizza la stessa costante, confermando che qualsiasi puntatore contraffatto PACIA con diversificatore 0x307a viene autenticato correttamente.
| Data | Evento |
|---|---|
| 2026-08-17 | iOS 26.6.1 rilasciato con la correzione |
| 2026-08-17 | Crediti Apple pubblicati nell'advisory di sicurezza |