
CVE-2026-64747 AGXG14P count-bitmask OOB триггерный зонд (A15/iOS 26.5.2)
Цель: iPhone 13 (A15) на iOS 26.5.2. Это приложение «долбит» пути командной очереди GPU AGXG14P, которые, предположительно, питают битовую маску счётчика на очередь
(count >= 0x400 → внеграничная запись 0x40-байтного слота → повреждение кучи ядра).
0xfffffff008003a8c (26.5.2): x1 = 32-битная маска счётчика.
Для каждого установленного бита n она копирует фиксированный шаблон размером 0x40 байт
(00 00 00 00 + FF×60) в obj+0x1040+n*0x40 и obj+0x1540+n*0x40.
Исправление в 26.6: отклонять count >= 0x400 (т.е. любой бит ≥ 10). Легальные слоты 0..9.[cmd+0x14]
каждой команды (обёртка 0xfffffff00800c9d0). Массивы слотов партии
(10 слотов × 0x40) находятся по смещениям объекта 0x1040 / 0x1540.count недостижим ни через один статический вызов/литерал — функция
достигается через диспетчерскую таблицу, построенную во время выполнения (косвенный PAC-вызов).[cmd+0x14] (или маску). Именно это
данный зонд и пытается выяснить эмпирически.Отправленная партия, в которой поле 0x14 какой-либо команды (или OR по всей
партии) устанавливает бит ≥ 10. Поэтому данный зонд заваливает все правдоподобные поверхности
значениями со старшими битами: значения сигналов shared-event 1<<k (k=0..31),
плотные маски (0x3FF|0x400..0xFFFFFFFF), одиночные партии из 256 буферов, fence'ы,
render + compute + blit, 32 очереди.
Если зонд вызывает баг, ожидаемые симптомы по возрастанию серьёзности:
Готовый ipa автоматически собирается GitHub Actions при каждом пуше и
попадает в build artifacts последнего запуска
(AGXProbe.ipa). Он без подписи, так что устанавливайте его любым сайдлоадером с бесплатным Apple ID:
Текущий ipa: bundle id com.agxprobe.test, arm64, MinOS 17.0.
Если сайдлоадер отклоняет bundle id, переподпишите с уникальным id.
AGXProbe.xcodeproj в Xcode (16.x).PRODUCT_BUNDLE_IDENTIFIER (например, com.you.agxprobe1) на
что-нибудь уникальное, чтобы подпись прошла.eventStorm → inFlight → fenceStorm → multiQueue → computeHeavy → chainedEvents → mixed → (repeat).agxprobe.log в Documents приложения,
доступен через приложение Файлы, так как UIFileSharingEnabled включён) и отправьте его.Если была паника:
Settings → Privacy & Security → Analytics & Improvements →
Analytics Data → найдите самый свежий panic-full-<date> (или JetsamEvent /
ipa-log-<timestamp> для убитого приложения) → Share / AirDrop / скопируйте хвост.
Первые строки после "panic(cpu ...)" показывают функцию ядра, в которой произошёл крах —
отправьте их.