Статья macOS kernel exploit на Apple M5: data-only LPE через слепую зону Memory Integrity Enforcement

Экран монитора с зелёным текстом на чёрном фоне отображает отладчик ядра XNU с дизассемблером и аннотированными инструкциями. Свечение фосфора и горизонтальные полосы сканирования создают атмосферу...


Пять дней - от двух багов до 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/store5-20%Точная инструкция
AsymmetricSync для 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»«Нарушает все общедоступные цепочки эксплойтов для современных iOS, включая недавно просочившиеся в сеть эксплойт-комплекты Coruna и Darksword».

Для kernel exploitation это формирует такую модель: классический path overflow -> перезапись function pointer -> redirect control flow - на бумаге мёртв. PAC не даст подписать подменённый указатель, MTE не пропустит запись за boundary с другим тегом. Именно поэтому Calif пошли другим путём.

Apple M5 уязвимость ядра: почему data-only exploitation обходит тегирование​

1780932989291.webp

Exploit описан Calif как data-only. Это ключевое слово, и оно определяет весь архитектурный класс атаки.

Классическая memory corruption vs data-only подход​

Классическая цепочка kernel memory corruption exploitation:
  1. Trigger bug (overflow, UAF, type confusion) - запись за границы объекта
  2. Перезаписать указатель на код (function pointer, vtable entry, return address)
  3. Перенаправить control flow на payload атакующего
  4. Выполнить payload в ring-0
MTE нацелен на шаг 1–2: запись за boundary аллокации порождает tag mismatch - fault. PAC ловит шаг 2–3: перезаписанный указатель не пройдёт проверку подписи.

Data-only exploitation выкидывает перенаправление control flow из цепочки полностью:
  1. Trigger bug - запись, которая не нарушает tag boundary
  2. Модифицировать данные (не указатели на код), от которых зависят решения ядра
  3. Ядро само выполняет привилегированную операцию, опираясь на испорченные данные
Никакого redirect control flow - PAC не при чём. Никакого выхода за boundary аллокации с другим тегом - MTE не видит нарушения.

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-привилегии
Это упрощённая иллюстрация принципа. Реальный exploit Calif использует «two vulnerabilities and several techniques» - конкретика скрыта до выхода патча Apple. Но принадлежность к классу data-only подтверждена публикацией команды.

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​

1780933016063.webp

Позиция в 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 апреляСоздание тулинга, разработка exploitJosh 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:
  1. Изучить data-only exploitation как класс. DOP исследуется с 2015 года, но на MTE-protected kernel это новый рубеж. Публикации Hu et al. (2016) по DOP дают фундамент
  2. Анализировать heap layout XNU. Как kalloc_type / zalloc размещает объекты, какие kernel structures оказываются в соседних granules. Утилита zprint через двухмашинную отладку (lldb + Kernel Debug Kit) показывает распределение по зонам и помогает идентифицировать same-zone co-locations
  3. Исследовать предсказуемость MTE-тегов в XNU. Детерминированный vs рандомизированный tag assignment. Каждый предсказуемый паттерн увеличивает вероятность same-tag corruption
  4. Картографировать границы PAC-защиты. PAC подписывает code pointers и часть data pointers на arm64e. Но не все поля в kernel structures защищены PAC - именно незащищённые data fields становятся целью data-only attack
Для пентестера на macOS-эндпоинтах в корпоративной среде:

Публичного 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 (https://hackerlab.pro) тренирует именно это.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab