一个完整的 Android 实验室环境,用于重现和研究 CVE-2026-0023。
此仓库演示了 CVE-2026-0023 如何允许普通安装程序影响仅应由系统控制的内部 Android 安装标志,从而导致应用程序更新期间 Android 的“更新所有权”警告被抑制。
该项目包含三个 Android 应用程序,它们模拟了一个真实的更新所有权工作流程,并提供了一个可重现的环境来观察有漏洞的行为。
Android 引入了更新所有权,以帮助应用程序、应用商店和企业环境维护可信的更新链。
当应用程序拥有已注册的更新所有者时,如果另一个安装程序尝试更新该应用程序,Android 会警告用户。
在正常情况下,此警告告知用户该应用程序通常从不同的来源接收更新。
CVE-2026-0023 影响 PackageInstallerService#createSessionInternal 内部的 Android 包安装流程。
该问题与内部 INSTALL_FROM_MANAGED_USER_OR_PROFILE 安装标志的处理有关。
在有漏洞的版本中,在 Android 检查安装是否实际上与托管用户或托管配置文件关联之前,此标志没有被显式清除。
结果,普通安装程序可以影响更新所有权行为,并导致 Android 抑制预期的更新所有权警告。
此仓库使用受控的概念验证环境,展示了预期行为和有漏洞行为之间的差异。
| 预期行为 | 有漏洞行为 |
|---|---|
| Android 显示更新所有权警告。 | Android 仅显示通用更新对话框。 |
![]() | ![]() |
CVE-2026-0023 列在 2026 年 3 月 Android 安全公告的 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);
+ // 只有系统才能设置此标志 - 因此确保在不必要时取消设置。
+ 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 是演示中使用的目标应用程序。
该应用程序声明支持更新所有权,并显示 Android 的 PackageManager 报告的与安装程序相关的元数据。
其目的是便于观察在概念验证的每个阶段,目标应用程序是如何安装或更新的。
| CVE-2026-0023 之前 | CVE-2026-0023 之后 |
![]() | ![]() |
概念验证演示了两种不同的更新流程:
flowchart LR
A["Safe Mart<br/>参考安装程序"] -->|"安装目标应用<br/>+ 请求更新所有权"| B["Ownership Inspector<br/>目标应用"]
C["Unsafe Mart<br/>替代安装程序"] --> D{"更新路径"}
D -->|"正常更新路径"| E["Android 显示<br/>更新所有权警告"]
D -->|"CVE-2026-0023 路径"| F["Android 仅显示<br/>通用更新对话框"]
E --> G["用户被警告:<br/>Safe Mart 是更新所有者"]
F --> H["所有权警告<br/>被抑制"]在测试设备上安装两个安装程序应用程序。
当 Android 请求时,允许这两个应用程序安装未知应用。
打开 Safe Mart 并选择 Ownership Inspector APK。
Safe Mart 安装目标应用程序,并在初始安装会话期间请求更新所有权。
此时,Safe Mart 作为参考安装程序,并成为目标应用的预期更新来源。
打开 Ownership Inspector。
应用程序显示 Android 的 PackageManager 报告的与安装程序相关的元数据。
此步骤有助于在尝试从 Unsafe Mart 更新之前确认初始安装状态。
打开 Unsafe Mart 并选择 Ownership Inspector APK。
选择正常更新路径。
由于 Ownership Inspector 最初是通过 Safe Mart 安装并启用了更新所有权,因此 Android 会显示更新所有权警告。
这是预期的 Android 行为。
警告告知用户该应用程序通常从 Safe Mart 接收更新,而当前的更新尝试来自 Unsafe Mart。
返回 Unsafe Mart 并再次选择 Ownership Inspector APK。
选择 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 与 Android 的 PackageInstaller API 交互,并修改安装会话参数以重现有漏洞的行为。
在 CVE 重现路径中,PoC 使用与托管用户或托管配置文件安装行为相关的系统标志:
INSTALL_FROM_MANAGED_USER_OR_PROFILE
该漏洞本身并非由隐藏 API 访问引起。
隐藏 API 访问仅作为从普通应用程序上下文到达所需框架接口的实现细节。
重要的是这个安全边界:此安装标志只有在系统验证托管用户或托管配置文件状态后设置时,才应被信任。
该项目使用了 ChickenHook 的 RestrictionBypass 库来访问概念验证所需的非 SDK Android 框架接口。
隐藏 API 访问机制与 CVE-2026-0023 的根本原因无关,仅用于与必要的 PackageInstaller API 交互。
RestrictionBypass: https://github.com/ChickenHook/RestrictionBypass
感谢原作者的工作。
Google 将 CVE-2026-0023 分类为高严重性权限提升漏洞。
该问题不提供 root 访问或任意代码执行。
但是,它允许无特权的安装程序执行通常受 Android 包安装安全模型保护的操作。
最相关的影响可能出现在企业和管理设备部署场景中。
组织可能依赖更新所有权来确保应用程序通过经过批准的应用商店或企业安装程序进行更新。
通过抑制所有权警告,CVE-2026-0023 削弱了 Android 通常在允许来自不同来源的更新之前提供的信任信号。
对于普通消费者设备,实际影响在很大程度上取决于用户的安装行为、设备补丁级别以及目标应用程序是否依赖更新所有权语义。
此仓库旨在在受控的研究环境中演示漏洞。
它不尝试:
概念验证专门专注于与 CVE-2026-0023 相关的更新所有权警告绕过行为。
Android 安全公告 - 2026 年 3 月 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
ChickenHook 的 RestrictionBypass https://github.com/ChickenHook/RestrictionBypass
此仓库提供用于安全研究、教育目的和漏洞分析。
代码仅旨在在受控环境中且仅在已授权测试的设备上重现和研究 CVE-2026-0023。
作者不鼓励或认可未经授权对设备、应用程序、用户、组织或系统进行测试。
用户有责任在测试或修改 Android 设备时遵守所有适用法律、政策和组织要求。
请负责任地使用此仓库。
| 字段 | 值 |
|---|
| CVE | CVE-2026-0023 |
| 组件 | Framework / 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 年 3 月 |
| Android 漏洞参考 | A-459461121 |
| Google 列出的受影响 AOSP 版本 | Android 14、15、16、16-qpr2 |
| 事件 | 值 |
|---|
| Android 安全公告 | 2026 年 3 月 |
| 公告发布日期 | 2026 年 3 月 2 日 |
| 安全补丁级别部分 | 2026-03-01 |
| 公告范围完全修复的补丁级别 | 2026-03-05 或更高 |
| Android 漏洞参考 | A-459461121 |
| AOSP 补丁 | 09055276288a68cf35b0f84ba32e28822f74ecf9 |
| 补丁标题 | 显式取消设置 INSTALL_FROM_MANAGED_USER_OR_PROFILE 标志 |