
Proof-of-concept, демонстрирующий CVE-2026-0023, обход доверия при обновлении Android, который подавляет предупреждение о владельце во время обновления приложений. Включает три приложения Android для воспроизведения и изучения уязвимости.
Полная лабораторная среда 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 | 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 |
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-приложения: