
再現可能なAndroidラボ環境で、CVE-2026-0023(PackageInstallerにおけるUpdate Ownershipの信頼バイパス)を示します。脆弱な動作を観察し、パッチを理解するための3つのアプリが含まれています。
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-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/>が抑制される"]
テストデバイスに両方のインストーラーアプリケーションをインストールします。
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 アクセスは、通常のアプリケーションコンテキストから必要なフレームワークインターフェースに到達するための実装の詳細としてのみ使用されます。
重要なセキュリティ境界は、このインストールフラグが、管理ユーザーまたは管理プロファイルの状態を検証した後にシステムによって設定された場合にのみ信頼されるべきであることです。
このプロジェクトは、概念実証に必要な非 SDK Android フレームワークインターフェースにアクセスするために、ChickenHook による RestrictionBypass ライブラリを使用しています。
隠し API アクセスメカニズムは CVE-2026-0023 の根本原因とは関係なく、必要な PackageInstaller API と相互作用するためにのみ使用されます。
RestrictionBypass: https://github.com/ChickenHook/RestrictionBypass
原著者の方々に感謝します。
Google は CVE-2026-0023 を High 重要度の特権昇格脆弱性として分類しました。
この問題は 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 |
| 脆弱性の種類 | 特権昇格 |
| 重要度 | 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 |