Чем надёжнее защита, тем опаснее в ней ошибка...
Защитный механизм Samsung KNOX почти восемь лет содержал ошибку, через которую обычное приложение могло повредить память ядра Android. Уязвимость CVE-2026-20971 затронула широкий круг смартфонов Galaxy, от S9 до S25, включая устройства серии A и модели на процессорах Exynos и Qualcomm. Samsung закрыла проблему в январском обновлении безопасности 2026 года, однако исследователи опубликовали подробности только сейчас.
Ошибка находилась не в браузере, мессенджере или отдельном приложении, а в PROCA, фирменной подсистеме Samsung для контроля целостности процессов. PROCA входит в платформу KNOX и должна мешать запуску неподтверждённых программ. Внутри PROCA работает компонент FIVE, который отслеживает, каким файлам и процессам система доверяет.
Для каждого процесса FIVE хранит отдельный объект с данными о целостности: текущем уровне доверия, метках, файлах и других служебных параметрах. Состояние меняется во время обычной работы Android, например при запуске программы, создании нового процесса или загрузке исполняемого файла в память. Чем больше подобных переходов, тем сложнее правильно освободить старые данные и не позволить другому участку ядра обратиться к уже удалённому объекту.
Именно здесь возникла классическая ошибка use-after-free , или обращение к памяти после освобождения. Android предоставляет программам сведения о целостности процессов через виртуальную файловую систему procfs. Обработчик запроса брал указатель на объект целостности, но не удерживал объект в памяти на время чтения.
В нормальном коде доступ к объекту с ограниченным сроком жизни должен выглядеть примерно так:
<pre><code class="language-c">/** Безопасная схема: пока функция читает объект,* счётчик ссылок не даёт ядру освободить память.*/ state = integrity_get(task); if (state == NULL)return; read_integrity(state); integrity_put(state); </code></pre> В уязвимом участке ядро брало «сырой» указатель, а затем могло переключиться на другую задачу. За время паузы целевой процесс успевал запустить другую программу. Android создавал для процесса новый объект целостности, а прежний освобождал. Когда первая операция продолжалась, код обращался к старому адресу в памяти, который уже мог принадлежать совсем другому объекту.
<pre><code class="language-c">/** Упрощённая схема ошибки: указатель получен,* но объект не защищён от освобождения.*/ state = task->integrity; switch_to_another_task(); /* Память по адресу state могла уже освободиться. */ read_integrity(state); </code></pre> Для злоумышленника подобная ошибка ценна потому, что освобождённую область памяти можно попытаться занять другими данными. Исследователи получили несколько примитивов повреждения памяти: ограниченную утечку данных, возможность влиять на отдельные операции записи и путь к вызову функции через устаревший указатель. Полноценную цепочку захвата устройства LucidBit Labs не публиковала, но отметила, что набор примитивов в теории может привести к выполнению кода в ядре и полному контролю над смартфоном.
Эксплуатация CVE-2026-20971 не так уж проста. Окно между получением указателя и освобождением памяти занимает всего несколько инструкций процессора. Атакующему нужно попасть в редкий момент переключения задач, дождаться освобождения объекта и заставить ядро повторно использовать нужную область памяти. Дополнительную сложность создаёт отдельный кэш памяти для объектов целостности: злоумышленнику недостаточно просто заполнить память произвольными данными.
В одном из исследованных путей устаревший указатель мог привести к вызову функции через повреждённый адрес. Современные ядра Android защищает механизм контроля целостности потока управления, CFI. Перед косвенным вызовом CFI проверяет, соответствует ли функция ожидаемому типу. Подмена указателя на произвольный адрес в таком случае вызывает остановку ядра, а не передачу управления атакующему. Исследователи назвали CFI эффективным барьером, который закрыл самый очевидный путь к захвату устройства.
Защита всё же не устранила саму ошибку. Другие варианты обращения к уже освобождённой памяти позволяли получить полезные для дальнейшей атаки результаты. Главный вывод исследования состоит в другом: сложные механизмы безопасности сами расширяют поверхность атаки, если добавляют в ядро большое количество нестандартного кода с трудной логикой управления памятью .
Уязвимость доступна локально, поэтому для атаки злоумышленнику нужно заставить владельца установить вредоносное приложение. Удалённый взлом через сайт или сообщение исследование не описывает. Пользователям Galaxy стоит проверить уровень исправлений безопасности Android и установить январское обновление Samsung 2026 года или более свежий пакет, если модель продолжает получать обновления. Владельцам устройств без поддержки обновлений остаётся особенно внимательно относиться к установке программ из неизвестных источников.
Полный технический разбор, включая устройство FIVE и причины ошибки управления памятью, опубликовала LucidBit Labs. Компания подтвердила проблему на Galaxy S21, S22, S24 и A54, а также указала, что ошибка затрагивала все проверенные версии Android и оба основных семейства мобильных процессоров Samsung.
Защитный механизм Samsung KNOX почти восемь лет содержал ошибку, через которую обычное приложение могло повредить память ядра Android. Уязвимость CVE-2026-20971 затронула широкий круг смартфонов Galaxy, от S9 до S25, включая устройства серии A и модели на процессорах Exynos и Qualcomm. Samsung закрыла проблему в январском обновлении безопасности 2026 года, однако исследователи опубликовали подробности только сейчас.
Ошибка находилась не в браузере, мессенджере или отдельном приложении, а в PROCA, фирменной подсистеме Samsung для контроля целостности процессов. PROCA входит в платформу KNOX и должна мешать запуску неподтверждённых программ. Внутри PROCA работает компонент FIVE, который отслеживает, каким файлам и процессам система доверяет.
Для каждого процесса FIVE хранит отдельный объект с данными о целостности: текущем уровне доверия, метках, файлах и других служебных параметрах. Состояние меняется во время обычной работы Android, например при запуске программы, создании нового процесса или загрузке исполняемого файла в память. Чем больше подобных переходов, тем сложнее правильно освободить старые данные и не позволить другому участку ядра обратиться к уже удалённому объекту.
Именно здесь возникла классическая ошибка use-after-free , или обращение к памяти после освобождения. Android предоставляет программам сведения о целостности процессов через виртуальную файловую систему procfs. Обработчик запроса брал указатель на объект целостности, но не удерживал объект в памяти на время чтения.
В нормальном коде доступ к объекту с ограниченным сроком жизни должен выглядеть примерно так:
<pre><code class="language-c">/** Безопасная схема: пока функция читает объект,* счётчик ссылок не даёт ядру освободить память.*/ state = integrity_get(task); if (state == NULL)return; read_integrity(state); integrity_put(state); </code></pre> В уязвимом участке ядро брало «сырой» указатель, а затем могло переключиться на другую задачу. За время паузы целевой процесс успевал запустить другую программу. Android создавал для процесса новый объект целостности, а прежний освобождал. Когда первая операция продолжалась, код обращался к старому адресу в памяти, который уже мог принадлежать совсем другому объекту.
<pre><code class="language-c">/** Упрощённая схема ошибки: указатель получен,* но объект не защищён от освобождения.*/ state = task->integrity; switch_to_another_task(); /* Память по адресу state могла уже освободиться. */ read_integrity(state); </code></pre> Для злоумышленника подобная ошибка ценна потому, что освобождённую область памяти можно попытаться занять другими данными. Исследователи получили несколько примитивов повреждения памяти: ограниченную утечку данных, возможность влиять на отдельные операции записи и путь к вызову функции через устаревший указатель. Полноценную цепочку захвата устройства LucidBit Labs не публиковала, но отметила, что набор примитивов в теории может привести к выполнению кода в ядре и полному контролю над смартфоном.
Эксплуатация CVE-2026-20971 не так уж проста. Окно между получением указателя и освобождением памяти занимает всего несколько инструкций процессора. Атакующему нужно попасть в редкий момент переключения задач, дождаться освобождения объекта и заставить ядро повторно использовать нужную область памяти. Дополнительную сложность создаёт отдельный кэш памяти для объектов целостности: злоумышленнику недостаточно просто заполнить память произвольными данными.
В одном из исследованных путей устаревший указатель мог привести к вызову функции через повреждённый адрес. Современные ядра Android защищает механизм контроля целостности потока управления, CFI. Перед косвенным вызовом CFI проверяет, соответствует ли функция ожидаемому типу. Подмена указателя на произвольный адрес в таком случае вызывает остановку ядра, а не передачу управления атакующему. Исследователи назвали CFI эффективным барьером, который закрыл самый очевидный путь к захвату устройства.
Защита всё же не устранила саму ошибку. Другие варианты обращения к уже освобождённой памяти позволяли получить полезные для дальнейшей атаки результаты. Главный вывод исследования состоит в другом: сложные механизмы безопасности сами расширяют поверхность атаки, если добавляют в ядро большое количество нестандартного кода с трудной логикой управления памятью .
Уязвимость доступна локально, поэтому для атаки злоумышленнику нужно заставить владельца установить вредоносное приложение. Удалённый взлом через сайт или сообщение исследование не описывает. Пользователям Galaxy стоит проверить уровень исправлений безопасности Android и установить январское обновление Samsung 2026 года или более свежий пакет, если модель продолжает получать обновления. Владельцам устройств без поддержки обновлений остаётся особенно внимательно относиться к установке программ из неизвестных источников.
Полный технический разбор, включая устройство FIVE и причины ошибки управления памятью, опубликовала LucidBit Labs. Компания подтвердила проблему на Galaxy S21, S22, S24 и A54, а также указала, что ошибка затрагивала все проверенные версии Android и оба основных семейства мобильных процессоров Samsung.
- Источник новости
- www.securitylab.ru