Разработчики проекта GrapheneOS, развивающего защищённое ответвление от кодовой базы AOSP (Android Open Source Project), выявили уязвимость в Bluetooth-стеке платформы Android 14, которая потенциально может привести к удалённому выполнению кода. Проблема вызвана обращением к уже освобождённой области памяти (use-after-free) в коде обработки звука, передаваемого через Bluetooth LE.
Уязвимость выявлена благодаря интеграции в вызов hardened_malloc дополнительной защиты, использующей расширение ARMv8.5 MTE (MemTag, Memory Tagging Extension), позволяющее привязать теги к каждой операции выделения памяти и организовать проверку корректности использования указателей для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнениями буфера, обращениями до инициализации и использованием вне текущего контекста.
Ошибка проявляется начиная с обновления Android 14 QPR2 (Quarterly Platform Release), опубликованного в начале марта. В основной кодовой базе платформы Android 14 механизм MTE доступен в качестве опции и пока не применяется по умолчанию, но в GrapheneOS его уже задействовали для дополнительной защиты, что дало возможность диагностировать ошибку после обновления до Android 14 QPR2. Ошибка приводила к аварийному завершению при использовании Bluetooth-наушиков Samsung Galaxy Buds2 Pro с прошивкой, в которой включена защита на базе MTE. Разбор инцидента показал, что проблема связана с наличием уязвимости, а не сбоем из-за интеграции MTE.
Уязвимость устранена в выпуске GrapheneOS 2024030900 и затрагивает сборки для смартфонов, в которых не включена дополнительная аппаратная защита на основе расширения MTE (MTE пока включён только для устройств Pixel 8 и Pixel 8 Pro). Уязвимость воспроизводится на смартфонах Google Pixel 8 с пошивкой на базе Android 14 QPR2. В Android для смартфонов серии Pixel 8 режим MTE можно включить в настройках для разработчиков (“Settings / System / Developer options /Memory Tagging Extensions”).