
# CVE-2026-0023 개념 증명 Android 업데이트 소유권 신뢰 우회를 시연하는 개념 증명으로, 앱 업데이트 중 소유권 경고를 억제합니다. 취약점을 재현하고 연구하기 위한 세 개의 Android 앱이 포함되어 있습니다.
CVE-2026-0023을 재현하고 연구하기 위한 완전한 Android 실험실 환경입니다.
이 저장소는 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 | 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년 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);
+ // 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
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/>Reference installer"] -->|"Installs target app<br/>+ requests update ownership"| B["Ownership Inspector<br/>Target app"]
C["Unsafe Mart<br/>Alternative installer"] --> D{"Update path"}
D -->|"Normal update path"| E["Android displays<br/>Update Ownership warning"]
D -->|"CVE-2026-0023 path"| F["Android displays only<br/>generic update dialog"]
E --> G["User is warned:<br/>Safe Mart is the update owner"]