Samsung Knox. 8 лет. Дыра, через которую можно было взломать любой смартфон Galaxy изнутри

leer en español

11878
Samsung Knox. 8 лет. Дыра, через которую можно было взломать любой смартфон Galaxy изнутри

Чем надёжнее защита, тем опаснее в ней ошибка...

image

Защитный механизм 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. Обработчик запроса брал указатель на объект целостности, но не удерживал объект в памяти на время чтения.

В нормальном коде доступ к объекту с ограниченным сроком жизни должен выглядеть примерно так:

/*
   * Безопасная схема: пока функция читает объект,
   * счётчик ссылок не даёт ядру освободить память.
   */
  state = integrity_get(task);
  
  if (state == NULL)
      return;
  
  read_integrity(state);
  integrity_put(state);
  

В уязвимом участке ядро брало «сырой» указатель, а затем могло переключиться на другую задачу. За время паузы целевой процесс успевал запустить другую программу. Android создавал для процесса новый объект целостности, а прежний освобождал. Когда первая операция продолжалась, код обращался к старому адресу в памяти, который уже мог принадлежать совсем другому объекту.

/*
   * Упрощённая схема ошибки: указатель получен,
   * но объект не защищён от освобождения.
   */
  state = task->integrity;
  switch_to_another_task();
  
  /* Память по адресу state могла уже освободиться. */
  read_integrity(state);
  

Для злоумышленника подобная ошибка ценна потому, что освобождённую область памяти можно попытаться занять другими данными. Исследователи получили несколько примитивов повреждения памяти: ограниченную утечку данных, возможность влиять на отдельные операции записи и путь к вызову функции через устаревший указатель. Полноценную цепочку захвата устройства LucidBit Labs не публиковала, но отметила, что набор примитивов в теории может привести к выполнению кода в ядре и полному контролю над смартфоном.

Эксплуатация CVE-2026-20971 не так уж проста. Окно между получением указателя и освобождением памяти занимает всего несколько инструкций процессора. Атакующему нужно попасть в редкий момент переключения задач, дождаться освобождения объекта и заставить ядро повторно использовать нужную область памяти. Дополнительную сложность создаёт отдельный кэш памяти для объектов целостности: злоумышленнику недостаточно просто заполнить память произвольными данными.

В одном из исследованных путей устаревший указатель мог привести к вызову функции через повреждённый адрес. Современные ядра Android защищает механизм контроля целостности потока управления, CFI. Перед косвенным вызовом CFI проверяет, соответствует ли функция ожидаемому типу. Подмена указателя на произвольный адрес в таком случае вызывает остановку ядра, а не передачу управления атакующему. Исследователи назвали CFI эффективным барьером, который закрыл самый очевидный путь к захвату устройства.

Защита всё же не устранила саму ошибку. Другие варианты обращения к уже освобождённой памяти позволяли получить полезные для дальнейшей атаки результаты. Главный вывод исследования состоит в другом: сложные механизмы безопасности сами расширяют поверхность атаки, если добавляют в ядро большое количество нестандартного кода с трудной логикой управления памятью.

Уязвимость доступна локально, поэтому для атаки злоумышленнику нужно заставить владельца установить вредоносное приложение. Удалённый взлом через сайт или сообщение исследование не описывает. Пользователям Galaxy стоит проверить уровень исправлений безопасности Android и установить январское обновление Samsung 2026 года или более свежий пакет, если модель продолжает получать обновления. Владельцам устройств без поддержки обновлений остаётся особенно внимательно относиться к установке программ из неизвестных источников.

Полный технический разбор, включая устройство FIVE и причины ошибки управления памятью, опубликовала LucidBit Labs. Компания подтвердила проблему на Galaxy S21, S22, S24 и A54, а также указала, что ошибка затрагивала все проверенные версии Android и оба основных семейства мобильных процессоров Samsung.