
CVE-2026-0091, использует проблему в управлении окнами Android для выполнения произвольного кода в процессе Launcher через adb
Эта проблема исправлена для Android 14+ в Бюллетене безопасности Android за июнь 2026. Нажмите здесь, чтобы увидеть патч
TODO
Закончу разбор, когда появится немного свободного времени
Но перед этим нужно бороться со школьными заданиями и экзаменами
Я решил закончить раздел до окончания экзаменов
Удачи мне 😇
IApplicationThread — это приватный колбэк, предоставляемый системе приложениями, чтобы система могла использовать его для отправки команд (загрузка указанного приложения, уведомление об изменениях жизненного цикла компонентов и т.д.) приложению
Он предназначен только для использования системой, поэтому проверки разрешений отсутствуют, и безопасность гарантируется исключительно тем фактом, что объект не получает вредоносный процесс. Это похоже на концепцию «куки» или «токенов» в вебе. Такая модель управления доступом называется Capability-based Security (безопасность на основе возможностей)
Если кому-то удастся получить IApplicationThread из других процессов, он сможет отправлять произвольные команды, и приложение-жертва будет обрабатывать поддельные команды так, как будто они были сгенерированы системой. В предыдущем эксплойте CVE-2022-20452 этот трюк использовался для выполнения произвольного кода
Хотя IApplicationThread должен передаваться только системному процессу, он может быть неожиданно отправлен за пределы system_server
Никто не стал бы реализовывать API getIApplicationThreadForApp(String packageName), доступный кому угодно — это очевидное нарушение безопасности
Но если IApplicationThread обёрнут в другой объект, и внешний объект-обёртка отправляется, это более вероятный сценарий
RemoteTransition — это такая обёртка, которая содержит IApplicationThread для повышения приоритета приложения, выполняющего анимацию
Одним из пользователей этого API является Launcher3 — стандартное домашнее приложение на AOSP и устройствах Pixel, которое создаёт ActivityOptions с помощью RemoteTransition и затем передаёт его в startActivity()
Хотя сам Launcher3 не предоставляет объект ненадёжным сторонам, system_server иногда это делает
CVE-2022-20419 произошёл, потому что system_server переслал переданные вызывающим ActivityOptions запущенному приложению, но забыл удалить RemoteTransition, что позволило запущенному приложению получить его и загрузить произвольный код внутри процесса лаунчера
Во время анимации перехода с общими элементами требуется много работы, и коммуникации должны происходить между WMCore и WMShell, где WM означает Window Manager
Вы можете прочитать эту статью, чтобы понять WMShell
Поскольку WMCore и WMShell работают в разных процессах (WMCore — в system_server, а WMShell — в SystemUI), они используют механизм Binder для общения
WMCore предоставляет Binder API регистрации registerTransitionPlayer, и WMShell использует его для регистрации своего собственного binder
Когда анимация запускается, WMCore вызывает requestStartTransition, и TransitionRequestInfo передаётся удалённому процессу, который включает начальный RemoteTransition
Итак, если мы сможем заменить проигрыватель переходов, мы сможем получить IApplicationThread лаунчера и выполнить произвольный код внутри привилегированного процесса
Однако, registerTransitionPlayer защищён разрешением MANAGE_ACTIVITY_TASKS, которое стороннее приложение не может получить
Но adb shell также может выполнять ненадёжный пользовательский код, и shell предоставлено разрешение MANAGE_ACTIVITY_TASKS, так что, к счастью, мы можем запускать атаку из adb shell
Это забавный вопрос: что могут сделать злоумышленники через эту уязвимость
Поскольку большинство разрешений, предоставленных лаунчеру, также есть у adb shell, злоумышленники, уже способные выполнять код под идентификатором оболочки, не нуждаются в эксплуатации этой уязвимости для компрометации устройства
Это скорее образовательный пример для изучения IApplicationThread, чем эксплойт, который может быть использован вредоносным приложением
Тем не менее, кто-то может быть заинтересован в этом
Например, это можно использовать для извлечения приватных файлов лаунчера, что может быть полезно при криминалистическом анализе вредоносных приложений-лаунчеров без рутирования устройства. Ранее это достигалось эксплуатацией CVE-2024-31317, и моя находка раскрывает другой метод после того, как предыдущий был исправлен
Это также позволяет пользователям использовать Fabricated Runtime Resources Overlay (FRRO) без предварительного рутирования устройства, так что rootless custom themes возвращаются после исправления CVE-2021-39630. Мой эксплойт продемонстрировал это, установив android:integer/config_multiuserMaximumUsers в 100