
CVE-2026-0023を実証する概念実証コード。Androidのアップデート所有権の信頼バイパスにより、アプリ更新時の所有権警告が抑制されます。この脆弱性の再現と調査のための3つのAndroidアプリが含まれています。
CVE-2026-0023 の再現と研究のための完全な Android ラボ環境。
このリポジトリは、CVE-2026-0023 が通常のインストーラーにシステムのみが制御すべき内部の Android インストールフラグに影響を与え、アプリケーション更新時に Android のアップデート所有権警告が抑制される仕組みを示しています。
このプロジェクトには 3 つの Android アプリケーションが含まれており、現実的なアップデート所有権ワークフローをモデル化し、脆弱な動作を観察するための再現可能な環境を提供します。
Android は、アプリケーション、アプリストア、エンタープライズ環境が信頼できる更新チェーンを維持できるようにするために、アップデート所有権を導入しました。
アプリケーションに登録されたアップデート所有者がいる場合、別のインストーラーがそのアプリケーションを更新しようとすると、Android はユーザーに警告を表示します。
通常の状況では、この警告は、アプリケーションが通常とは異なるソースからアップデートを受信していることをユーザーに伝えます。
CVE-2026-0023 は、PackageInstallerService#createSessionInternal 内の Android のパッケージインストールフローに影響を与えます。
この問題は、内部の INSTALL_FROM_MANAGED_USER_OR_PROFILE インストールフラグの処理に関連しています。
脆弱なビルドでは、Android がインストールが実際に管理ユーザーまたは管理プロファイルに関連付けられているかどうかをチェックする前に、このフラグが明示的にクリアされていませんでした。
その結果、通常のインストーラーがアップデート所有権の動作に影響を与え、Android が予想されるアップデート所有権警告を抑制する原因となりました。
このリポジトリは、制御された概念実証環境を使用して、期待される動作と脆弱な動作の違いを示しています。
| 期待される動作 | 脆弱な動作 |
|---|---|
| Android はアップデート所有権警告を表示します。 | Android は汎用の更新ダイアログのみを表示します。 |
![]() | ![]() |
| フィールド | 値 |
|---|---|
| CVE | CVE-2026-0023 |
| コンポーネント | Framework / PackageInstaller |
| 影響を受けるファイル | PackageInstallerService.java |
| 影響を受けるメソッド | createSessionInternal |
| 脆弱性の種類 | 特権昇格 |
| 重要度 | High |
| 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 |
| 攻撃元 | Local |
| 攻撃の複雑さ | Low |
| 必要な権限 | Low |
| ユーザー操作 | None |
| スコープ | Unchanged |
| 影響 | 不正なアップデート所有権動作による特権昇格 |
| Android セキュリティ速報 | March 2026 |
| Android バグ参照 | A-459461121 |
| Google が公表した影響を受ける AOSP バージョン | Android 14, 15, 16, 16-qpr2 |
| イベント | 値 |
|---|---|
| Android セキュリティ速報 | March 2026 |
| 速報公開日 | March 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 は、2026 年 3 月の Android セキュリティ速報の 2026-03-01 セキュリティパッチレベルの脆弱性詳細に掲載されています。
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);
+ // このフラグを設定できるのはシステムのみであるべき - そのため、不要な場合は確実に設定解除する。
+ 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 はまずフラグを削除し、システムがユーザーが実際に組織管理されていると判断した場合にのみ再度設定します。
これにより、通常のインストーラーがこの内部インストールセッションの状態に影響を与えるのを防ぎます。
このリポジトリには 3 つの Android アプリケーションが含まれています:
CVE-2026-0023-Update-Ownership-PoC
├── Safe Mart
├── Unsafe Mart
└── Ownership Inspector
Safe Mart は参照用インストーラーアプリケーションです。
ターゲットアプリケーションをインストールし、最初のインストール時にアップデート所有権を要求します。
その目的は、ターゲットアプリケーションの登録されたアップデート所有者となる正当なアプリケーションストアをシミュレートすることです。
Unsafe Mart は、CVE-2026-0023 を再現するために使用される 2 番目のインストーラーアプリケーションです。
2 つのインストールパスをサポートしています:
通常のパスでは、Android の期待されるアップデート所有権警告がトリガーされます。
CVE パスでは、所有権警告が抑制され、代わりに Android が汎用の更新確認ダイアログを表示します。
Ownership Inspector は、デモンストレーションで使用されるターゲットアプリケーションです。
このアプリケーションはアップデート所有権のサポートを宣言し、Android の PackageManager によって報告されるインストーラー関連のメタデータを表示します。
その目的は、概念実証の各段階でターゲットアプリケーションがどのようにインストールまたは更新されたかを観察しやすくすることです。
| CVE-2026-0023 前 | CVE-2026-0023 後 |
![]() |
![]() |
概念実証は、2 つの異なる更新フローを示しています:
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/>が抑制される"]