
CVE-2026-28992 IOHIDFamily FastPathUserClient condición de carrera PoC — investigación de seguridad
Repositorio de investigación de seguridad. Dos aplicaciones PoC que demuestran las condiciones de carrera en IOHIDFamily's FastPathUserClient en iOS 18.7.1 y anteriores.
⚠️ Ambos PoCs provocarán un kernel panic y reiniciarán tu dispositivo. Guarda tu trabajo primero.
| Campo | Detalle |
|---|
| CVE | CVE-2026-28992 |
| Componente | IOHIDFamily — IOHIDEventServiceFastPathUserClient |
| Tipo | Corrupción de memoria (condición de carrera / UAF) |
| Alcanzable desde | Sandbox de aplicación normal, no se requieren entitlements |
| Corregido en | iOS 18.7.9 / iOS 26.5 |
| Investigador | Johnny Franks (@zeroxjf) |
sel0 (puerta de entrada) verifica FastPathHasEntitlement y FastPathMotionEventEntitlement en el OSDictionary proporcionado por el llamante en lugar de los flags de entitlement almacenados durante initWithTask. Una aplicación en sandbox pasa la puerta incluyendo esas claves en su diccionario de entrada.
A partir de ahí, surgen dos vectores:
UAFPoc/UAFPoc.xcodeproj
Carrera: close (sel1) elimina el estado del proveedor y limpia el offset +0x109 sin un bloqueo. copyEvent (sel2) verifica el offset +0x108 bajo un bloqueo por conexión, luego llama al proveedor. Múltiples conexiones al mismo proveedor significan que close y copyEvent se ejecutan en dominios de bloqueo diferentes sobre los mismos objetos compartidos del lado del proveedor.
Tipo de fallo:
AOPPanicPoc/AOPPanicPoc.xcodeproj
Carrera: mach_port_destroy desencadena didTerminate → teardown asíncrono, sin sincronización con rutas de apertura sel0 concurrentes en otras conexiones. El teardown libera el estado del proveedor mientras los hilos de apertura lo recorren. También satura el buzón de los proveedores respaldados por SPU → timeout del watchdog de AOP.
git clone https://github.com/clogan9019-dotcom/IOHIDFamily-PoC-Research.git
cd IOHIDFamily-PoC-Research
Variante UAF:
UAFPoc/UAFPoc.xcodeproj en XcodeVariante AOP:
AOPPanicPoc/AOPPanicPoc.xcodeproj en XcodeDespués de que el dispositivo se reinicie:
Panic más reciente (archivo .ips)panic-logs/ y haz commit para su análisisAlternativamente, desde Terminal:
# Después del reinicio, obtén el registro
idevicecrashreport -u <UDID> ./panic-logs/
En un A18 (iPhone 16e) deberías ver uno de:
MTE tag check fault — la variante UAF liberando y reasignando un objeto de heap etiquetadoAOP watchdog timeout — la variante AOP saturando el buzón SPUCampos clave a anotar:
Kernel version: Darwin Kernel Version ...
Hardware Model: iPhone17,5
panic(cpu N ...): <la cadena de pánico real>
Backtrace:
... IOHIDEventServiceFastPathUserClient ...
Los nombres de función en el backtrace indican exactamente qué ruta de código se activó.
| Fecha | Evento |
|---|---|
| Desconocida | Error descubierto por Johnny Franks (@zeroxjf) |
| 11 de mayo de 2026 | Corregido en iOS 18.7.9 / iOS 26.5 |
| 21 de junio de 2026 | Código PoC público liberado |
Las variantes sin parche o errores relacionados se pueden reportar en: https://security.apple.com/submit
Para errores del kernel: describe el componente, los pasos de reproducción, el tipo de fallo y adjunta el archivo de registro de pánico .ips.
| CVE | Componente | Estado en 18.7.1 |
|---|---|---|
| CVE-2025-43510 | AppleM2ScalerCSCDriver (DarkSword Stage 5) | Sin parche (corregido en 18.7.2) |
| CVE-2026-28992 | IOHIDFamily FastPathUserClient | Sin parche (corregido en 18.7.9) |
| CVE-2026-43655 | AppleM2ScalerCSCDriver lectura fuera de límites | Sin parche y nunca retroportado a 18.x |
| CVE-2026-20687 | UAF del kernel → escritura en memoria del kernel | Sin parche (corregido en 18.7.7) |
Solo con fines educativos y de divulgación responsable.