Пять дней - от двух багов до root shell на самом укреплённом десктопном ядре в индустрии. Не месяцы, не недели. Пять дней.
В мае 2026 года команда Calif (Bruce Dang, Dion Blazakis, Josh Maine) собрала первый публичный macOS kernel exploit на Apple M5 - memory corruption LPE, стартующий с непривилегированного локального аккаунта и заканчивающийся root shell через стандартные системные вызовы. Memory Integrity Enforcement - аппаратная митигация, на которую Apple потратила годы - была включена. И не сработала: data-only атака живёт в архитектурной слепой зоне MTE, которую synchronous enforcement не покрывает by design. Разберём, как устроена эта слепая зона на уровне железа, почему 4-битный тег - потолок MTE, и что из этого следует для тех, кто исследует macOS kernel или работает с Apple-инфраструктурой на пентесте.
Статус раскрытия. Полный 55-страничный технический отчёт не опубликован - Calif передали его Apple в Apple Park и ожидают выхода патча. CVE-идентификаторы не присвоены. Публичный PoC отсутствует. Всё описанное ниже основано на публикациях Calif, материалах Anthropic (Project Glasswing), репортажах The Wall Street Journal и архитектурном анализе MTE/MIE. Деталей, которых нет в открытых источниках, в тексте нет.
Memory Integrity Enforcement: пять лет инженерии на один аппаратный примитив
По данным Apple Security Research, MIE объединяет аппаратные возможности Apple Silicon и системную поддержку macOS/iOS для always-on memory safety. В основе - спецификация Arm Memory Tagging Extension (2019) и её расширение Enhanced Memory Tagging Extension. Apple, впрочем, ушла значительно дальше стандартной реализации.MTE на уровне железа: tag, granule, fault
MTE - система тегирования памяти. Каждой аллокации присваивается 4-битный тег. Каждые 16 байт физической памяти (granule) хранят ассоциированный тег в отдельном регионе tag-памяти. При каждом обращении процессор сравнивает тег в указателе с тегом granule. Указатель несёт тег через механизм Top Byte Ignore (TBI) - верхние биты на arm64 не используются для адресации и отданы под метаданные. Несовпадение тегов - MTE fault: процесс убивается, событие пишется в лог.Три режима работы:
| Режим | Проверка | Overhead | Точность детекции |
|---|---|---|---|
| Synchronous | Каждый load/store | 5-20% | Точная инструкция |
| Asymmetric | Sync для store, async для load | Средний | Частичная |
| Asynchronous | Отложенная, batch | Минимальный | Низкая |
Android в продакшне обычно использует asynchronous MTE - ради производительности. Apple приняла другое решение.
Что MIE добавляет поверх стандартного MTE
Как описывают исследователи Calif, ссылаясь на публикации Apple Security Research:Always-on synchronous enforcement. На ключевых attack surface - ядро, критические системные сервисы - проверка тега идёт при каждой операции с памятью. Не async, не asymmetric - полный synchronous mode. Overhead максимальный, зато и точность максимальная.
Интеграция с PAC. Pointer Authentication Codes на arm64e подписывают указатели криптографическим ключом. PAC и MTE работают как двойной барьер: подменить указатель нельзя (PAC не даст верифицировать подпись), выйти за boundary аллокации нельзя (MTE поймает tag mismatch).
Покрытие линейки устройств. MIE встроен во все модели iPhone 17, iPhone Air и MacBook с чипами M5/A19. По заявлению Apple, MIE «disrupts every public exploit chain against modern iOS, including the recently leaked Coruna and Darksword exploit kits».
Для kernel exploitation это формирует такую модель: классический path overflow → перезапись function pointer → redirect control flow - на бумаге мёртв. PAC не даст подписать подменённый указатель, MTE не пропустит запись за boundary с другим тегом. Именно поэтому Calif пошли другим путём.
Apple M5 уязвимость ядра: почему data-only exploitation обходит тегирование
Exploit описан Calif как data-only. Это ключевое слово, и оно определяет весь архитектурный класс атаки.Классическая memory corruption vs data-only подход
Классическая цепочка kernel memory corruption exploitation:- Trigger bug (overflow, UAF, type confusion) - запись за границы объекта
- Перезаписать указатель на код (function pointer, vtable entry, return address)
- Перенаправить control flow на payload атакующего
- Выполнить payload в ring-0
Data-only exploitation выкидывает перенаправление control flow из цепочки полностью:
- Trigger bug - запись, которая не нарушает tag boundary
- Модифицировать данные (не указатели на код), от которых зависят решения ядра
- Ядро само выполняет привилегированную операцию, опираясь на испорченные данные
4-битный тег: архитектурный предел MTE
4 бита дают 16 возможных значений тега. Один зарезервирован, остаётся 15 рабочих. Вероятность совпадения тега при случайной аллокации - 1/15 (около 6.7%). Для data-only атаки с контролируемым heap layout это уже практическая вероятность, а не теоретическая.
C:
// Концептуальный пример data-only примитива
// (не специфика Calif - детали exploit закрыты)
//
// Kernel zone allocator размещает два объекта
// в соседних granules. Оба получили одинаковый тег:
struct task_cred {
uid_t uid; // offset +0, значение 501
gid_t gid; // offset +4
};
// Атакующий через OOB write в соседний объект
// с ТЕМ ЖЕ тегом перезаписывает uid: 501 → 0
// MTE видит корректный тег → нет fault
// Ядро читает uid = 0 → root-привилегии
Synchronous enforcement тут не спасает: проверка срабатывает при каждом load/store, но проверяет только совпадение тега. Тег совпал - аппаратура считает обращение легитимным. Нет tag mismatch - нет исключения. Это не баг, это фундаментальное ограничение 4-битного тегирования: пространство тегов слишком мало для полной изоляции при произвольном heap layout.
Data-Oriented Programming (DOP) как концепция известен с 2015 года (Hu et al.), но его применение к MTE-protected kernel - принципиально новый рубеж. До Calif публичных exploit chain такого класса на Apple Silicon не было.
[Применимо: локальный доступ на bare-metal M5, macOS 26.4.1 (25E253). Не применимо: удалённая эксплуатация, виртуализированные среды без bare-metal M5.]
macOS LPE через Mythos Preview: хронология и роль AI в разработке exploit
Позиция в MITRE ATT&CK: Exploitation for Privilege Escalation (T1068, Privilege Escalation). Метод выполнения: Native API (T1106, Execution) - только стандартные системные вызовы. Ресурсная подготовка: Exploits (T1587.004, Resource Development) - разработка exploit chain с AI-ассистентом.От двух багов до root shell за пять дней
Хронология по данным Calif:| Дата | Событие | Участник |
|---|---|---|
| 25 апреля | Обнаружение двух уязвимостей | Bruce Dang |
| 27 апреля | Присоединение к команде | Dion Blazakis |
| 28–30 апреля | Создание тулинга, разработка exploit | Josh Maine + команда |
| 1 мая | Рабочий exploit: unprivileged user → root shell | Команда |
| Начало мая | Визит в Apple Park, передача отчёта | Calif |
| 14 мая | Публичное раскрытие (без техн. деталей) | Calif blog + WSJ |
Для контекста: kernel exploitation на предыдущих поколениях Apple Silicon без MIE (M1–M4) занимал у опытных исследователей недели или месяцы. Apple инвестировала в MIE специально чтобы увеличить этот срок. Получилось наоборот - и тут ключевую роль сыграла AI-ассистенция.
Что сделала модель, а что - человек
По заявлению Calif, Anthropic Mythos Preview (закрытая модель из Project Glasswing, недоступная за пределами ограниченного круга партнёров):Обнаружила уязвимости. Баги относились к известным классам (known bug classes). Модель обобщила паттерны из обучающих данных - как формулирует Calif: «once it has learned how to attack a class of problems, it generalizes to nearly any problem in that class». По сути, сканирование по known-good templates, не изобретение нового.
Ассистировала в разработке exploit. Итерация кода, генерация гипотез, кластеризация подозрительных code paths, предложение candidate primitives, написание harness.
Не обошла MIE автономно. Обход аппаратной митигации потребовал человеческой экспертизы - архитектурного решения, как превратить memory corruption в data-only attack без tag mismatch. Модель - помощник, не автор.
Anthropic подтверждает dual-use характер технологии: Mythos Preview используется партнёрами для поиска и устранения уязвимостей, планируется расширение на black-box binary testing и penetration testing. Модель не станет общедоступной (по данным материалов Project Glasswing).
Параллельные данные: по данным CyberUnit, Mozilla выпустила 423 security-фикса для Firefox в апреле 2026, из которых 271 найден с помощью Mythos Preview - двадцатикратный рост месячного объёма патчей по сравнению с baseline 2025. По данным Google Cloud M-Trends 2026, mean time to exploit снизился до оценочных минус семи дней - эксплуатация фиксируется до выхода патча.
Эксплойт ядра macOS: контекст для исследователя и пентестера
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
На момент публикации ни один из перечисленных продуктов не имеет правил для детекции конкретно этого exploit chain. Все зависят от post-escalation behavioral detection - а значит, между получением root и срабатыванием алерта есть окно.
Практические шаги
Для vulnerability researcher на macOS / Apple Silicon:- Изучить data-only exploitation как класс. DOP исследуется с 2015 года, но на MTE-protected kernel это новый рубеж. Публикации Hu et al. (2016) по DOP дают фундамент
- Анализировать heap layout XNU. Как
kalloc_type/zallocразмещает объекты, какие kernel structures оказываются в соседних granules. Утилитаzprintчерез двухмашинную отладку (lldb + Kernel Debug Kit) показывает распределение по зонам и помогает идентифицировать same-zone co-locations - Исследовать предсказуемость MTE-тегов в XNU. Детерминированный vs рандомизированный tag assignment. Каждый предсказуемый паттерн увеличивает вероятность same-tag corruption
- Картографировать границы PAC-защиты. PAC подписывает code pointers и часть data pointers на arm64e. Но не все поля в kernel structures защищены PAC - именно незащищённые data fields становятся целью data-only attack
Публичного PoC нет - exploit не воспроизводим. Но он меняет threat model:
- Не закладывайте «M5 + MIE = kernel LPE невозможен» в модель угроз
- Отслеживайте выход патча Apple - обновляйте тест-среды немедленно после релиза
- Для privilege escalation на текущих проектах: логические уязвимости (TCC bypass, XPC service abuse, LaunchAgent misconfigurations) остаются доступнее kernel memory corruption и не требуют bare-metal M5
Правильный вывод из инцидента Calif - не «Apple облажалась», а «стоимость kernel exploitation перестала расти так, как прогнозировали». Synchronous MTE поверх PAC, SMAP, KTRR и PPL - это самый укреплённый десктопный kernel на рынке. Calif не нашли дыру в MIE - они нашли класс атак, который MIE by design не покрывает. MIE делает ровно то, что заявлено: ловит tag mismatch при обращении к памяти. Она никогда не обещала, что остановит data-only corruption между объектами с одинаковым 4-битным тегом.
Пока MTE использует 4 бита - вероятность same-tag collision 1/15 будет существовать. Это не баг, который можно пропатчить, - это архитектурный потолок спецификации Arm. Чтобы его поднять, нужно расширять tag space в железе, а это другой chip design cycle. Apple наверняка это понимает, и патч, скорее всего, закроет конкретные баги, но не устранит класс.
Второй момент - экономика exploitation. Модель «человек + AI за пять дней» - это принципиально другая арифметика по сравнению с «три senior researchers за три месяца». Google Cloud M-Trends 2026 фиксирует mean time to exploit на уровне минус семи дней - эксплуатация раньше патча. Defensive strategy на основе 90-дневного disclosure window оперирует мёртвой моделью угроз. Те, кто строит защиту macOS-флота, исходя из «Apple выпустит патч, мы раскатаем через MDM» - работают в предположении, которое инцидент Calif ставит под прямой вопрос. Если хочется отработать сборку exploit chain из data corruption в privilege escalation - pwn-категория на HackerLab.pro тренирует именно это.