Группа исследователей из Сеульского университета и компании Samsung выявила уязвимость в процессорах ARM, получившую кодовое имя TikTag, которую можно использовать для обхода аппаратного механизма защиты MemTag (MTE, Memory Tagging Extension), присутствующего в чипах на базе архитектуры ARMv8.5-A. Уязвимость позволяет определить содержимое тегов TikTag для произвольных адресов памяти из-за утечек данных, возникающих в результате спекулятивного выполнения инструкций CPU.
Технология MemTag позволяет привязать теги к памяти и организовать проверку корректности использования указателей для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнениями буфера, обращениями до инициализации и использованием вне текущего контекста. При использовании MemTag для каждых 16 байт физической памяти создаётся 4-битовый тег, который выступает подобием ключа для доступа к этой памяти. Тег может быть сгенерирован приложением для выделяемой области памяти при помощи специальных инструкций CPU, и затем прикрепляется к указателю на эту область и хранится в верхних неиспользуемых битах указателя. При обращении к памяти с использованием теггированного указателя, процессор проверяет соответствие тега, привязанного к указателю, с тегами, привязанными к блокам памяти, и разрешает доступ только если теги совпадают.
Предложенный метод атаки позволяет определить привязанные к блокам памяти теги и обойти защиту MemTag. Исследователями продемонстрирована возможность осуществления атаки при эксплуатации уязвимостей в ядре Linux и браузере Chrome, используя существующие в данных продуктах последовательности инструкций (гаджеты), приводящие к спекулятивному выполнению кода. Подобные гаджеты при выполнении в спекулятивном режиме кода, работающего с указателями, вызывают чтение метаданных MemTag в зависимости от внешних условий, на которые может влиять атакующий. После определения ошибочного прогноза результат спекулятивного выполнения отбрасывается, но полученные данные остаются в кэше и могут затем быть извлечены при помощи анализа по сторонним каналам. Вероятность успешного обхода защиты MemTag в проведённых тестах оценена в 95% при проведении атаки в течение примерно 4 секунд.
Выявлено два вида гаджетов, приводящих к утечке сведения о тегах MemTag. В первом случае спекулятивное выполнение возникает при неверном предсказании перехода, а условия для выполнения гаджета могут быть созданы через манипуляции с системными вызовами. Во втором случае
спекулятивное выполнение возникает из-за ошибки предсказания взаимосвязи между операциями чтения и записи при использовании оптимизации STLF (Store-To-Load-Forwarding), что позволяет подобрать тег, оценивая состояние кэша (если тег совпадает, значение будет напрямую перенаправлено из прошлой команды “store” в операцию “load” и изменит состояние кэша). Первый вид гаджетов подходит для атаки на ядро Linux, а второй на JavaScript-движок V8, используемые в браузерах на базе Chromium. Прототип инструментария для проведения атаки опубликован на GitHub.
Компания ARM подтвердила возможность совершения атаки на процессорах Cortex-X2, Cortex-X3, Cortex-A510, Cortex-A520, Cortex-A710, Cortex-A715 и Cortex-A720, но не намерена вносить изменения в CPU для блокирования проблемы, так как архитектура MemTag подразумевает, что теги не являются секретными данными для приложений. В кодовой базе Chromium проблема также остаётся неисправленной, так как в браузере Chrome защита на основе MemTag пока не применяется по умолчанию. Команда, отвечающая за безопасность платформы Android, признала возможность совершения атаки на устройства Pixel 8, в которых применяется защита MemTag, добавила исправления для блокирования утечек и выразила готовность выплатить вознаграждение за найденную уязвимость.
В качестве обходных методов для блокирования атаки исследователи предлагают использовать инструкции sb или isb для запрета спекулятивного выполнения во время совершения критических операций с памятью или отделять инструкции ветвления от инструкций доступа к памяти другими инструкциями.