QM4RS/CVE-2026-0023-Update-Ownership-PoC

GitHub: QM4RS/CVE-2026-0023-Update-Ownership-PoC

CVE-2026-0023 的完整概念验证项目,演示 Android 更新所有权警告被绕过的权限提升漏洞。

Stars: 6 | Forks: 3

# CVE-2026-0023 - Android 更新所有权信任绕过 PoC 一个完整的 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 显示更新所有权警告。 | Android 仅显示通用的更新对话框。 | | ![显示所有权警告](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/19b992ad15045355.png) | ![所有权警告被抑制](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4b178f4c63045401.png) | ## 漏洞信息 | 字段 | 值 | | --------------------------------------- | --------------------------------------------------------------------- | | 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 标志` | CVE-2026-0023 在 `2026-03-01` 安全补丁级别的漏洞详情下被列于 2026 年 3 月的 Android 安全公告中。 `2026-03-01` 或更高版本的 Android 安全补丁级别解决了与 `2026-03-01` 安全补丁级别相关的所有问题。 `2026-03-05` 或更高版本的 Android 安全补丁级别解决了与 `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 ``` ### 安全 Mart Safe Mart 是一个参考安装器应用。 它安装目标应用,并在初始安装期间请求更新所有权。 其目的是模拟一个合法的应用商店,成为目标应用的注册更新所有者。

### 不安全 Mart Unsafe Mart 是用于复现 CVE-2026-0023 的第二个安装器应用。 它支持两条安装路径: * 正常更新路径 * CVE-2026-0023 复现路径 正常路径触发 Android 预期的更新所有权警告。 CVE 路径抑制所有权警告,并导致 Android 改为显示通用的更新确认对话框。

### Ownership 检查器 Ownership Inspector 是演示中使用的目标应用。 该应用声明了对更新所有权的支持,并显示由 Android `PackageManager` 报告的与安装器相关的元数据。 其目的是为了更容易地观察在概念验证的每个阶段目标应用是如何被安装或更新的。
Before CVE-2026-0023 After CVE-2026-0023
--- ## 复现步骤 概念验证演示了两种不同的更新流程: * 正常更新流程,Android 显示预期的更新所有权警告。 * CVE-2026-0023 复现流程,所有权警告被抑制并替换为通用的更新确认对话框。 ``` flowchart LR A["Safe Mart
Reference installer"] -->|"Installs target app
+ requests update ownership"| B["Ownership Inspector
Target app"] C["Unsafe Mart
Alternative installer"] --> D{"Update path"} D -->|"Normal update path"| E["Android displays
Update Ownership warning"] D -->|"CVE-2026-0023 path"| F["Android displays only
generic update dialog"] E --> G["User is warned:
Safe Mart is the update owner"] F --> H["Ownership warning
is suppressed"] ``` ### 1. 安装 Safe Mart 和 Unsafe Mart 在测试设备上安装这两个安装器应用。 当 Android 请求此权限时,允许这两个应用安装未知应用。 ### 2. 通过 Safe Mart 安装 Ownership Inspector 打开 Safe Mart 并选择 Ownership Inspector 的 APK。 Safe Mart 安装目标应用,并在初始安装会话期间请求更新所有权。 此时,Safe Mart 充当参考安装器,并成为该目标应用的预期更新来源。

### 3. 验证初始安装状态 打开 Ownership Inspector。 该应用显示由 Android `PackageManager` 报告的与安装器相关的元数据。 此步骤有助于确认从 Unsafe Mart 尝试更新之前的初始安装状态。

### 4. 从 Unsafe Mart 触发正常更新路径 打开 Unsafe Mart 并选择 Ownership Inspector 的 APK。 选择正常更新路径。 由于 Ownership Inspector 最初是通过启用了更新所有权的 Safe Mart 安装的,因此 Android 会显示更新所有权警告。 这是预期的 Android 行为。

该警告告知用户该应用通常从 Safe Mart 接收更新,而当前的更新尝试来自 Unsafe Mart。 ### 5. 触发 CVE-2026-0023 复现路径 返回 Unsafe Mart 并再次选择 Ownership Inspector 的 APK。 选择 CVE-2026-0023 复现路径。 在此流程中,Android 不再显示更新所有权警告。 相反,系统仅显示通用的更新确认对话框。

这是概念验证演示的易受攻击行为。 重要的区别不仅仅在于对话框的视觉变化。 在更新流程中,有关已注册更新所有者的安全信号被移除了。 ### 6. 验证最终状态 更新完成后,再次打开 Ownership Inspector。 该应用可用于在 CVE-2026-0023 复现路径完成后观察与安装器相关的元数据。

## 此 PoC 的演示内容 此概念验证演示了更新所有权信任模型绕过。 更具体地说,它表明: * 可以在安装目标应用时启用更新所有权。 * 当不同的安装器尝试更新该应用时,Android 通常会警告用户。 * CVE-2026-0023 允许更新流程绕过该所有权警告。 * 更新确认从感知所有权的警告降级为通用的更新提示。 * 无需 root 权限、ADB 命令或系统特权即可复现该行为。 该 PoC 不尝试提供 root 访问权限、任意代码执行、持久化、隐蔽性或类似恶意软件的行为。 ## 环境 该漏洞在 Android 15 上进行了复现。 概念验证不需要: * root 权限 * ADB 命令 * 系统特权 * 设备所有者权限 * 配置文件所有者权限 * LSPosed * Magisk 整个演示是通过在标准 Android 应用沙箱中运行的常规 Android 应用执行的。 可以在应用日志中观察到测试设备的安全信息。 PoC 收集的示例值包括: ``` Build.VERSION.SECURITY_PATCH Build.VERSION.SDK_INT Build.VERSION.RELEASE Build.VERSION.INCREMENTAL Build.FINGERPRINT ``` ## 要求 要构建和运行该项目,您需要: * Android Studio * Android SDK * 易受攻击的 Android 设备或模拟器 * Android 14 或更高版本,以支持与更新所有权相关的 API * 授予 Safe Mart 和 Unsafe Mart 安装未知应用的权限 无需特殊的设备修改。 ## 构建 在 Android Studio 中打开每个应用项目并构建 debug APK: * Safe Mart * Unsafe Mart * Ownership Inspector 然后在测试设备上安装 Safe Mart 和 Unsafe Mart。 Ownership Inspector 应在复现流程中通过 Safe Mart 进行安装。 ## 实现说明 该 PoC 与 Android 的 `PackageInstaller` API 交互,并修改安装会话参数以复现易受攻击的行为。 在 CVE 复现路径中,PoC 使用了与管理用户或配置文件安装行为相关的系统标志: ``` INSTALL_FROM_MANAGED_USER_OR_PROFILE ``` 该漏洞不是由隐藏 API 访问本身引起的。 隐藏 API 访问仅作为实现细节使用,以便从常规应用上下文中访问所需的 Framework 接口。 重要的安全边界在于,只有在系统验证了管理用户或托管配置文件状态后设置了该标志,才应信任此安装标志。 ## 致谢 本项目使用 ChickenHook 的 RestrictionBypass 库来访问概念验证所需的非 SDK Android Framework 接口。 隐藏 API 访问机制与 CVE-2026-0023 的根本原因无关,仅用于与必要的 PackageInstaller API 进行交互。 RestrictionBypass: https://github.com/ChickenHook/RestrictionBypass 感谢原作者的工作。 ## 影响 Google 将 CVE-2026-0023 归类为高危的权限提升漏洞。 该问题不提供 root 访问权限或任意代码执行。 然而,它允许无特权的安装器执行通常应受 Android 包安装安全模型保护的操作。 最相关的影响可能在于企业和托管设备部署场景。 组织可能依赖更新所有权来确保应用通过批准的应用商店或企业安装器进行更新。 通过抑制所有权警告,CVE-2026-0023 削弱了 Android 在允许从不同来源进行更新之前通常会提供的信任信号。 对于普通消费类设备,实际影响在很大程度上取决于用户的安装行为、设备补丁级别以及目标应用是否依赖更新所有权语义。 ## 局限性 本仓库旨在受控的研究环境中演示该漏洞。 它不尝试: * 利用不相关的 Android 漏洞 * 获取 root 访问权限 * 绕过应用签名验证 * 绕过 APK 签名要求 * 安装恶意软件 * 对用户隐藏 * 在安装后持久化 * 大规模自动化利用 概念验证专门针对与 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 设备时,有责任遵守所有适用的法律、政策和组织要求。 请负责任地使用本仓库。
标签:Android, DSL, JS文件枚举, PoC, 暴力破解, 权限绕过, 漏洞复现, 目录枚举, 移动安全