
Воспроизводимая лабораторная среда Android, демонстрирующая CVE-2026-0023 — обход доверия к праву собственности на обновления в PackageInstaller. Включает три приложения для наблюдения за уязвимым поведением и понимания исправления.
Полная лабораторная среда Android для воспроизведения и изучения CVE-2026-0023.
Этот репозиторий демонстрирует, как CVE-2026-0023 позволяет обычному установщику влиять на внутренний флаг установки Android, который должен управляться только системой, что приводит к подавлению предупреждения Android о владельце обновления при обновлении приложений.
Проект содержит три Android-приложения, которые моделируют реалистичный рабочий процесс владения обновлениями и предоставляют воспроизводимую среду для наблюдения уязвимого поведения.
Android представил владение обновлениями, чтобы помочь приложениям, магазинам приложений и корпоративным средам поддерживать доверенную цепочку обновлений.
Когда у приложения зарегистрирован владелец обновления, Android предупреждает пользователя, если другой установщик пытается обновить это приложение.
В нормальных условиях это предупреждение сообщает пользователю, что приложение обычно получает обновления из другого источника.
CVE-2026-0023 затрагивает процесс установки пакетов Android внутри PackageInstallerService#createSessionInternal.
Проблема связана с обработкой внутреннего флага установки INSTALL_FROM_MANAGED_USER_OR_PROFILE.
В уязвимых сборках этот флаг не очищался явно перед тем, как Android проверял, действительно ли установка связана с управляемым пользователем или управляемым профилем.
В результате обычный установщик мог повлиять на поведение владельца обновлений и вызвать подавление ожидаемого предупреждения о владельце обновления.
Этот репозиторий демонстрирует разницу между ожидаемым поведением и уязвимым поведением с помощью контролируемой среды доказательства концепции.
| Ожидаемое поведение | Уязвимое поведение |
|---|---|
| Android отображает предупреждение о владельце обновления. | Android отображает только диалог общего обновления. |
![]() | ![]() |
CVE-2026-0023 указан в бюллетене безопасности Android за март 2026 года в разделе сведений об уязвимостях уровня исправлений безопасности 2026-03-01.
Уровни исправлений безопасности Android 2026-03-01 или более поздние устраняют все проблемы, связанные с уровнем исправлений безопасности 2026-03-01.
Уровни исправлений безопасности Android 2026-03-05 или более поздние устраняют все проблемы, связанные с уровнем исправлений безопасности 2026-03-05 и всеми предыдущими уровнями.
Уязвимое поведение связано с обработкой внутреннего флага INSTALL_FROM_MANAGED_USER_OR_PROFILE.
Этот флаг предназначен для представления поведения установки, связанного с управляемым пользователем или управляемым профилем.
Официальный патч AOSP явно сбрасывает этот флаг перед тем, как Android проверяет, действительно ли установка принадлежит управляемому организацией пользователю.
Исправленная логика гарантирует, что только система может устанавливать этот флаг на основе результата DevicePolicyManagerInternal#isUserOrganizationManaged(userId).
Упрощенная логика патча:
final var dpmi = LocalServices.getService(DevicePolicyManagerInternal.class);
+ // Only the system should be able to set this flag - so ensure it is unset when not needed.
+ params.installFlags &= ~PackageManager.INSTALL_FROM_MANAGED_USER_OR_PROFILE;
if (dpmi != null && dpmi.isUserOrganizationManaged(userId)) {
params.installFlags |= PackageManager.INSTALL_FROM_MANAGED_USER_OR_PROFILE;
}
До патча флаг не очищался явно перед этой проверкой управляемого профиля.
После патча Android сначала удаляет флаг и устанавливает его снова только в том случае, если система определяет, что пользователь действительно управляется организацией.
Это предотвращает влияние обычного установщика на это внутреннее состояние сеанса установки.
Этот репозиторий содержит три Android-приложения:
CVE-2026-0023-Update-Ownership-PoC
├── Safe Mart
├── Unsafe Mart
└── Ownership Inspector
Safe Mart — это эталонное приложение-установщик.
Оно устанавливает целевое приложение и запрашивает владение обновлением во время первоначальной установки.
Его цель — имитировать легитимный магазин приложений, который становится зарегистрированным владельцем обновления целевого приложения.
Unsafe Mart — это второе приложение-установщик, используемое для воспроизведения CVE-2026-0023.
Оно поддерживает два пути установки:
Обычный путь вызывает ожидаемое предупреждение Android о владельце обновления.
Путь CVE подавляет предупреждение о владельце и заставляет Android отображать вместо него диалог общего подтверждения обновления.
Ownership Inspector — это целевое приложение, используемое в демонстрации.
Приложение объявляет поддержку владения обновлением и отображает метаданные, связанные с установщиком, сообщаемые PackageManager Android.
Его цель — упростить наблюдение за тем, как было установлено или обновлено целевое приложение на каждом этапе доказательства концепции.
| До CVE-2026-0023 | После CVE-2026-0023 |
![]() | ![]() |
Доказательство концепции демонстрирует два различных процесса обновления:
flowchart LR
A["Safe Mart<br/>Reference installer"] -->|"Installs target app<br/>+ requests update ownership"| B["Ownership Inspector<br/>Target app"]
C["Unsafe Mart<br/>Alternative installer"] --> D{"Update path"}
D -->|"Normal update path"| E["Android displays<br/>Update Ownership warning"]
D -->|"CVE-2026-0023 path"| F["Android displays only<br/>generic update dialog"]
E --> G["User is warned:<br/>Safe Mart is the update owner"]
F --> H["Ownership warning<br/>is suppressed"]
Установите оба приложения-установщика на тестовое устройство.
Разрешите обоим приложениям устанавливать неизвестные приложения, когда Android запрашивает это разрешение.
Откройте Safe Mart и выберите APK Ownership Inspector.
Safe Mart устанавливает целевое приложение и запрашивает владение обновлением во время первоначального сеанса установки.
На этом этапе Safe Mart выступает в качестве эталонного установщика и становится ожидаемым источником обновления для целевого приложения.
Откройте Ownership Inspector.
Приложение отображает метаданные, связанные с установщиком, сообщаемые PackageManager Android.
Этот шаг помогает подтвердить начальное состояние установки перед попыткой обновления из Unsafe Mart.
Откройте Unsafe Mart и выберите APK Ownership Inspector.
Выберите обычный путь обновления.
Поскольку Ownership Inspector был изначально установлен через Safe Mart с включенным владением обновлением, Android отображает предупреждение о владельце обновления.
Это ожидаемое поведение Android.
Предупреждение сообщает пользователю, что приложение обычно получает обновления от Safe Mart, в то время как текущая попытка обновления исходит от Unsafe Mart.
Вернитесь в Unsafe Mart и снова выберите APK Ownership Inspector.
Выберите путь воспроизведения CVE-2026-0023.
В этом процессе Android больше не отображает предупреждение о владельце обновления.
Вместо этого система показывает только диалог общего подтверждения обновления.
Это уязвимое поведение, демонстрируемое доказательством концепции.
Важное отличие заключается не только в визуальном изменении диалога.
Сигнал безопасности о зарегистрированном владельце обновления удаляется из процесса обновления.
После завершения обновления снова откройте Ownership Inspector.
Приложение можно использовать для наблюдения метаданных, связанных с установщиком, после завершения пути воспроизведения CVE-2026-0023.
Это доказательство концепции демонстрирует обход модели доверия владельца обновления.
Более конкретно, оно показывает, что:
PoC не пытается предоставить root-доступ, произвольное выполнение кода, постоянство, скрытность или поведение, подобное вредоносному.
Уязвимость была воспроизведена на Android 15.
Доказательство концепции не требует:
Вся демонстрация выполняется через обычные приложения Android, работающие в стандартной песочнице приложений Android.
Информацию о безопасности тестируемого устройства можно наблюдать в журналах приложения.
Примеры значений, собранных PoC, включают:
Build.VERSION.SECURITY_PATCH
Build.VERSION.SDK_INT
Build.VERSION.RELEASE
Build.VERSION.INCREMENTAL
Build.FINGERPRINT
Для сборки и запуска проекта вам потребуется:
Специальная модификация устройства не требуется.
Откройте каждый проект приложения в Android Studio и соберите отладочные APK:
Затем установите Safe Mart и Unsafe Mart на тестовое устройство.
Ownership Inspector должен быть установлен через Safe Mart во время процесса воспроизведения.
PoC взаимодействует с API PackageInstaller Android и изменяет параметры сеанса установки для воспроизведения уязвимого поведения.
Во время пути воспроизведения CVE, PoC использует системный флаг, связанный с установкой управляемого пользователя или профиля:
INSTALL_FROM_MANAGED_USER_OR_PROFILE
Сама уязвимость не вызвана доступом к скрытым API.
Доступ к скрытым API используется только как деталь реализации для достижения необходимых интерфейсов фреймворка из контекста обычного приложения.
Важная граница безопасности заключается в том, что этому флагу установки следует доверять только тогда, когда он устанавливается системой после проверки состояния управляемого пользователя или управляемого профиля.
В этом проекте используется библиотека RestrictionBypass от ChickenHook для доступа к не-SDK интерфейсам фреймворка Android, необходимым для доказательства концепции.
Механизм доступа к скрытым API не связан с первопричиной CVE-2026-0023 и используется только для взаимодействия с необходимыми API PackageInstaller.
RestrictionBypass: https://github.com/ChickenHook/RestrictionBypass
Благодарность оригинальным авторам за их работу.
Google классифицировал CVE-2026-0023 как уязвимость повышения привилегий высокой степени серьезности.
Проблема не предоставляет root-доступ или произвольное выполнение кода.
Однако она позволяет непривилегированному установщику выполнять операцию, которая обычно должна быть защищена моделью безопасности установки пакетов Android.
Наиболее актуальное влияние, вероятно, в сценариях корпоративного развертывания и управляемых устройств.
Организации могут полагаться на владение обновлениями, чтобы гарантировать, что приложения обновляются через одобренный магазин приложений или корпоративный установщик.
Подавляя предупреждение о владельце, CVE-2026-0023 ослабляет сигнал доверия, который Android обычно предоставляет перед разрешением обновления из другого источника.
Для обычных потребительских устройств практическое влияние сильно зависит от поведения пользователя при установке, уровня исправлений устройства и того, полагается ли целевое приложение на семантику владения обновлением.
Этот репозиторий предназначен для демонстрации уязвимости в контролируемой исследовательской среде.
Он не пытается:
Доказательство концепции сосредоточено конкретно на поведении обхода предупреждения о владельце обновления, связанном с CVE-2026-0023.
Бюллетень безопасности Android - Март 2026 https://source.android.com/docs/security/bulletin/2026/2026-03-01
CVE-2026-0023 - Запись CVE https://www.cve.org/CVERecord?id=CVE-2026-0023
CVE-2026-0023 - NVD https://nvd.nist.gov/vuln/detail/CVE-2026-0023
Патч AOSP - Явный сброс флага INSTALL_FROM_MANAGED_USER_OR_PROFILE
https://android.googlesource.com/platform/frameworks/base/+/09055276288a68cf35b0f84ba32e28822f74ecf9
RestrictionBypass от ChickenHook https://github.com/ChickenHook/RestrictionBypass
Этот репозиторий предоставляется для исследований в области безопасности, образовательных целей и анализа уязвимостей.
Код предназначен исключительно для воспроизведения и изучения CVE-2026-0023 в контролируемых средах и на устройствах, где тестирование разрешено.
Автор не поощряет и не одобряет несанкционированное тестирование устройств, приложений, пользователей, организаций или систем без разрешения.
Пользователи несут ответственность за соблюдение всех применимых законов, политик и организационных требований при тестировании или модификации устройств Android.
Используйте этот репозиторий ответственно.
| Поле | Значение |
|---|
| CVE | CVE-2026-0023 |
| Компонент | Фреймворк / PackageInstaller |
| Затронутый файл | PackageInstallerService.java |
| Затронутый метод | createSessionInternal |
| Тип уязвимости | Повышение привилегий |
| Серьезность | Высокий |
| CVSS v3.1 | 7.8 |
| Вектор CVSS | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Вектор атаки | Локальный |
| Сложность атаки | Низкая |
| Требуемые привилегии | Низкие |
| Взаимодействие с пользователем | Отсутствует |
| Область | Не изменяется |
| Воздействие | Повышение привилегий через несанкционированное поведение владельца обновлений |
| Бюллетень безопасности Android | Март 2026 |
| Ссылка на ошибку Android | A-459461121 |
| Затронутые версии AOSP, указанные Google | Android 14, 15, 16, 16-qpr2 |
| Событие | Значение |
|---|
| Бюллетень безопасности Android | Март 2026 |
| Дата публикации бюллетеня | 2 марта 2026 |
| Раздел уровня исправлений безопасности | 2026-03-01 |
| Полностью исправленный уровень патча во всем бюллетене | 2026-03-05 или позже |
| Ссылка на ошибку Android | A-459461121 |
| Патч AOSP | 09055276288a68cf35b0f84ba32e28822f74ecf9 |
| Название патча | Explicitly unset INSTALL_FROM_MANAGED_USER_OR_PROFILE flag |