
PoC para CVE-2026-65343, una lectura fuera de límites (OOB) en el kernel de AppleKeyStore en iOS 26.6 que filtra punteros del kernel para eludir KASLR desde una app en sandbox mediante la captura de handles ACM con DYLD_INTERPOSE.
Componente: Extensión del kernel AppleKeyStore — _LibSer_SEPControl_Deserialize
Afecta a: iOS / iPadOS 26.6 (23G71) y anteriores
Corregido en: iOS / iPadOS 26.6.1 (23G83)
Tipo: Lectura fuera de límites en la deserialización de mensajes de control del SEP
Impacto: Fuga de punteros del kernel → derrota de KASLR desde un proceso en sandbox y sin entitlements (mediante la captura de handle ACM con DYLD_INTERPOSE)
Descubierto por: Drinor Selmanaj (Sentry), Surya Narayan Kushwaha
(según el Aviso de Seguridad de Apple — iOS 26.6.1)
_LibSer_SEPControl_Deserialize en la extensión del kernel AppleKeyStore publica un par desde un búfer de mensaje ACM (Credential Manager) hacia el espacio de usuario mediante , .
(payload_ptr, declared_length)copyout()declared_length ≤ remainingAl proporcionar declared_length = 0x800, el controlador copia aproximadamente 0x7E8 bytes más allá del final del búfer de mensaje ACM del kernel — leyendo en asignaciones adyacentes del heap del kernel. Esas regiones adyacentes contienen punteros del kernel (0xfffffff0xxxxxxxx) que pueden usarse para calcular el desplazamiento de KASLR.
; _LibSer_SEPControl_Deserialize (ruta afectada, 26.6 / 23G71)
ldr w2, [acm_msg + declared_length_offset] ; controlado por el usuario 0x800
; SIN comprobación: w2 <= (acm_msg_end - payload_ptr) ← FALTA
bl copyout ; copia w2 bytes al espacio de usuario
La llamada directa a IOServiceOpen("AppleKeyStore") está bloqueada por el sandbox en aplicaciones sideloaded. Sin embargo, la ruta de firma de claves del Secure Enclave de Security.framework llama a IOConnectCallMethod en proceso con un handle de sesión ACM real.
El PoC utiliza un hook __DATA,__interpose (que se ejecuta en tiempo de carga de dyld, antes de que __DATA_CONST se vuelva de solo lectura — fishhook está bloqueado en iOS 26 por la protección DATA_CONST):
SecKeyCreateRandomKey(kSecAttrTokenIDSecureEnclave) → SecKeyCreateSignature() → se dispara IOConnectCallMethod en proceso con un handle ACM real(conn, handle[16])declared_length = 0x800 a través de 163 selectores de AKS0xfffffff0xxxxxxxx → calcular el desplazamiento de KASLRpoc_aks_oob.m implementa la cadena completa de captura de handle ACM y sonda OOB:
kSecAttrAccessibleAfterFirstUnlock, sin biometría)declared_length = 0x800 a través de los 163 selectores de AKSKPTR @+XXXX = 0xfffffff0YYYYYYYYSi la firma de la clave SE se enruta a través de XPC de secd en lugar de en proceso, la sonda de respaldo utiliza un handle cero (confirma la alcanzabilidad de la ruta OOB; todos los selectores fallarán la validación ACM, pero la ruta VNOP queda confirmada).
En iOS 26, __DATA_CONST (que contiene la GOT) se mapea como solo lectura antes de que se ejecute cualquier código en proceso. Las escrituras en tiempo de ejecución en la GOT (como las que usa fishhook) provocan KERN_PROTECTION_FAILURE → SIGBUS. DYLD_INTERPOSE mediante __DATA,__interpose funciona porque dyld procesa la tabla de interpose en el momento de carga de la imagen, antes de que el kernel aplique la protección de __DATA_CONST.
kSecAttrTokenIDSecureEnclave) — disponible para cualquier aplicación sideloaded sin entitlements# Proyecto Xcode — enlazar Security.framework y 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 mínimos (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>
| Fecha | Evento |
|---|---|
| 2026-08-17 | iOS 26.6.1 publicado con la corrección |
| 2026-08-17 | Créditos de Apple publicados en el aviso de seguridad |