
Ambiente di laboratorio Android riproducibile che dimostra CVE-2026-0023, un bypass della fiducia di Update Ownership in PackageInstaller. Include tre app per osservare il comportamento vulnerabile e comprendere la patch.
Un ambiente di laboratorio Android completo per riprodurre e studiare CVE-2026-0023.
Questo repository dimostra come CVE-2026-0023 permetta a un installatore normale di influenzare un flag di installazione interno di Android che dovrebbe essere controllato solo dal sistema, causando la soppressione dell'avviso di Update Ownership di Android durante gli aggiornamenti delle applicazioni.
Il progetto contiene tre applicazioni Android che modellano un flusso di lavoro realistico di update ownership e forniscono un ambiente riproducibile per osservare il comportamento vulnerabile.
Android ha introdotto l'Update Ownership per aiutare le applicazioni, gli app store e gli ambienti aziendali a mantenere una catena di aggiornamento affidabile.
Quando un'applicazione ha un proprietario dell'aggiornamento registrato, Android avvisa l'utente se un altro installatore tenta di aggiornare tale applicazione.
In condizioni normali, questo avviso informa l'utente che l'applicazione riceve solitamente aggiornamenti da una fonte diversa.
CVE-2026-0023 interessa il flusso di installazione dei pacchetti di Android all'interno di PackageInstallerService#createSessionInternal.
Il problema è legato alla gestione del flag interno INSTALL_FROM_MANAGED_USER_OR_PROFILE.
Nelle build vulnerabili, questo flag non veniva cancellato esplicitamente prima che Android verificasse se l'installazione era effettivamente associata a un utente gestito o a un profilo gestito.
Di conseguenza, un installatore normale poteva influenzare il comportamento dell'update ownership e causare la soppressione dell'avviso di Update Ownership previsto.
Questo repository mostra la differenza tra il comportamento previsto e quello vulnerabile utilizzando un ambiente controllato di proof-of-concept.
| Comportamento previsto | Comportamento vulnerabile |
|---|---|
| Android mostra l'avviso di Update Ownership. | Android mostra solo un dialogo di aggiornamento generico. |
![]() | ![]() |
CVE-2026-0023 è elencato nel bollettino sulla sicurezza Android di marzo 2026 nella sezione dei dettagli sulle vulnerabilità del livello patch di sicurezza 2026-03-01.
I livelli patch di sicurezza Android 2026-03-01 o successivi risolvono tutti i problemi associati al livello patch di sicurezza 2026-03-01.
I livelli patch di sicurezza Android 2026-03-05 o successivi risolvono tutti i problemi associati al livello patch di sicurezza 2026-03-05 e a tutti i livelli patch precedenti.
Il comportamento vulnerabile è legato alla gestione del flag interno INSTALL_FROM_MANAGED_USER_OR_PROFILE.
Questo flag è destinato a rappresentare il comportamento di installazione associato a un utente gestito o a un profilo gestito.
La patch AOSP ufficiale cancella esplicitamente questo flag prima che Android controlli se l'installazione appartiene effettivamente a un utente gestito dall'organizzazione.
La logica corretta garantisce che solo il sistema possa impostare questo flag in base al risultato di DevicePolicyManagerInternal#isUserOrganizationManaged(userId).
Logica di patch semplificata:
final var dpmi = LocalServices.getService(DevicePolicyManagerInternal.class);
+ // Solo il sistema dovrebbe poter impostare questo flag - quindi assicurarsi che sia non impostato quando non necessario.
+ params.installFlags &= ~PackageManager.INSTALL_FROM_MANAGED_USER_OR_PROFILE;
if (dpmi != null && dpmi.isUserOrganizationManaged(userId)) {
params.installFlags |= PackageManager.INSTALL_FROM_MANAGED_USER_OR_PROFILE;
}
Prima della patch, il flag non veniva cancellato esplicitamente prima di questo controllo del profilo gestito.
Dopo la patch, Android rimuove prima il flag e lo reimposta solo se il sistema determina che l'utente è effettivamente gestito dall'organizzazione.
Ciò impedisce a un installatore normale di influenzare questo stato interno della sessione di installazione.
Questo repository contiene tre applicazioni Android:
CVE-2026-0023-Update-Ownership-PoC
├── Safe Mart
├── Unsafe Mart
└── Ownership Inspector
Safe Mart è un'applicazione installatrice di riferimento.
Installa l'applicazione di destinazione e richiede la proprietà dell'aggiornamento (update ownership) durante l'installazione iniziale.
Il suo scopo è simulare un app store legittimo che diventa il proprietario registrato dell'aggiornamento dell'app target.
Unsafe Mart è una seconda applicazione installatrice utilizzata per riprodurre CVE-2026-0023.
Supporta due percorsi di installazione:
Il percorso normale attiva l'avviso previsto di Update Ownership di Android.
Il percorso CVE sopprime l'avviso di proprietà e fa sì che Android mostri invece un dialogo di conferma dell'aggiornamento generico.
Ownership Inspector è l'applicazione di destinazione utilizzata nella dimostrazione.
L'applicazione dichiara il supporto per l'update ownership e mostra i metadati relativi all'installatore riportati da PackageManager di Android.
Il suo scopo è facilitare l'osservazione di come l'applicazione di destinazione è stata installata o aggiornata durante ogni fase del proof-of-concept.
| Prima di CVE-2026-0023 | Dopo CVE-2026-0023 |
![]() | ![]() |
Il proof-of-concept mostra due diversi flussi di aggiornamento:
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"]
F --> H["Ownership warning<br/>is suppressed"]
Installa entrambe le applicazioni installatrici sul dispositivo di test.
Consenti a entrambe le applicazioni di installare app sconosciute quando Android richiede questa autorizzazione.
Apri Safe Mart e seleziona l'APK di Ownership Inspector.
Safe Mart installa l'applicazione di destinazione e richiede l'update ownership durante la sessione di installazione iniziale.
A questo punto, Safe Mart funge da installatore di riferimento e diventa la fonte di aggiornamento prevista per l'app target.
Apri Ownership Inspector.
L'applicazione mostra i metadati relativi all'installatore riportati da PackageManager di Android.
Questo passaggio aiuta a confermare lo stato iniziale dell'installazione prima di tentare aggiornamenti da Unsafe Mart.
Apri Unsafe Mart e seleziona l'APK di Ownership Inspector.
Scegli il percorso di aggiornamento normale.
Poiché Ownership Inspector è stata installata inizialmente tramite Safe Mart con l'update ownership abilitato, Android mostra un avviso di Update Ownership.
Questo è il comportamento previsto di Android.
L'avviso informa l'utente che l'applicazione riceve normalmente aggiornamenti da Safe Mart, mentre il tentativo di aggiornamento corrente proviene da Unsafe Mart.
Torna a Unsafe Mart e seleziona di nuovo l'APK di Ownership Inspector.
Scegli il percorso di riproduzione di CVE-2026-0023.
In questo flusso, Android non mostra più l'avviso di Update Ownership.
Invece, il sistema mostra solo un dialogo di conferma dell'aggiornamento generico.
Questo è il comportamento vulnerabile dimostrato dal proof-of-concept.
La differenza importante non è solo il cambiamento visivo nel dialogo.
Il segnale di sicurezza relativo al proprietario dell'aggiornamento registrato viene rimosso dal flusso di aggiornamento.
Dopo il completamento dell'aggiornamento, apri di nuovo Ownership Inspector.
L'applicazione può essere utilizzata per osservare i metadati relativi all'installatore dopo il completamento del percorso di riproduzione di CVE-2026-0023.
Questo proof-of-concept dimostra un bypass del modello di fiducia dell'Update Ownership.
Più specificamente, mostra che:
Il PoC non tenta di fornire accesso root, esecuzione di codice arbitrario, persistenza, occultamento o comportamenti simili a malware.
La vulnerabilità è stata riprodotta su Android 15.
Il proof-of-concept non richiede:
L'intera dimostrazione viene eseguita tramite normali applicazioni Android in esecuzione nella sandbox standard delle applicazioni Android.
Le informazioni sulla sicurezza del dispositivo testato possono essere osservate nei log dell'applicazione.
Esempi di valori raccolti dal PoC includono:
Build.VERSION.SECURITY_PATCH
Build.VERSION.SDK_INT
Build.VERSION.RELEASE
Build.VERSION.INCREMENTAL
Build.FINGERPRINT
Per compilare ed eseguire il progetto, è necessario:
Non è richiesta alcuna modifica speciale del dispositivo.
Apri ogni progetto di applicazione in Android Studio e compila gli APK di debug:
Quindi installa Safe Mart e Unsafe Mart sul dispositivo di test.
Ownership Inspector dovrebbe essere installato tramite Safe Mart durante il flusso di riproduzione.
Il PoC interagisce con le API PackageInstaller di Android e modifica i parametri della sessione di installazione per riprodurre il comportamento vulnerabile.
Durante il percorso di riproduzione CVE, il PoC utilizza il flag di sistema relativo al comportamento di installazione dell'utente gestito o del profilo:
INSTALL_FROM_MANAGED_USER_OR_PROFILE
La vulnerabilità non è causata dall'accesso alle API nascoste in sé.
L'accesso alle API nascoste viene utilizzato solo come dettaglio implementativo per raggiungere le interfacce framework richieste da un contesto applicativo normale.
Il confine di sicurezza importante è che questo flag di installazione dovrebbe essere considerato attendibile solo quando viene impostato dal sistema dopo aver convalidato lo stato dell'utente gestito o del profilo gestito.
Questo progetto utilizza la libreria RestrictionBypass di ChickenHook per accedere alle interfacce del framework Android non SDK richieste dal proof-of-concept.
Il meccanismo di accesso alle API nascoste non è correlato alla causa principale di CVE-2026-0023 e viene utilizzato solo per interagire con le API necessarie di PackageInstaller.
RestrictionBypass: https://github.com/ChickenHook/RestrictionBypass
Crediti agli autori originali per il loro lavoro.
Google ha classificato CVE-2026-0023 come vulnerabilità di elevazione dei privilegi di gravità Alta.
Il problema non fornisce accesso root o esecuzione di codice arbitrario.
Tuttavia, consente a un installatore non privilegiato di eseguire un'operazione che normalmente dovrebbe essere protetta dal modello di sicurezza di installazione dei pacchetti di Android.
L'impatto più rilevante è probabilmente negli scenari di distribuzione aziendale e di dispositivi gestiti.
Le organizzazioni possono fare affidamento sull'Update Ownership per garantire che le applicazioni vengano aggiornate tramite un app store approvato o un installatore aziendale.
Sopprimendo l'avviso di proprietà, CVE-2026-0023 indebolisce un segnale di fiducia che Android fornirebbe normalmente prima di consentire un aggiornamento da una fonte diversa.
Per i dispositivi consumer normali, l'impatto pratico dipende fortemente dal comportamento di installazione dell'utente, dal livello di patch del dispositivo e dal fatto che l'applicazione di destinazione si basi sulla semantica dell'update ownership.
Questo repository è inteso a dimostrare la vulnerabilità in un ambiente di ricerca controllato.
Non tenta di:
Il proof-of-concept si concentra specificamente sul comportamento di bypass dell'avviso di Update Ownership associato a CVE-2026-0023.
Bollettino sulla sicurezza Android - Marzo 2026 https://source.android.com/docs/security/bulletin/2026/2026-03-01
CVE-2026-0023 - Record CVE https://www.cve.org/CVERecord?id=CVE-2026-0023
CVE-2026-0023 - NVD https://nvd.nist.gov/vuln/detail/CVE-2026-0023
Patch AOSP - Rimozione esplicita del flag INSTALL_FROM_MANAGED_USER_OR_PROFILE
https://android.googlesource.com/platform/frameworks/base/+/09055276288a68cf35b0f84ba32e28822f74ecf9
RestrictionBypass di ChickenHook https://github.com/ChickenHook/RestrictionBypass
Questo repository è fornito per scopi di ricerca sulla sicurezza, educativi e di analisi delle vulnerabilità.
Il codice è destinato esclusivamente alla riproduzione e allo studio di CVE-2026-0023 in ambienti controllati e su dispositivi per i quali i test sono autorizzati.
L'autore non incoraggia né approva test non autorizzati su dispositivi, applicazioni, utenti, organizzazioni o sistemi senza permesso.
Gli utenti sono responsabili del rispetto di tutte le leggi, le politiche e i requisiti organizzativi applicabili durante il test o la modifica di dispositivi Android.
Utilizza questo repository in modo responsabile.
| Campo | Valore |
|---|
| CVE | CVE-2026-0023 |
| Componente | Framework / PackageInstaller |
| File interessato | PackageInstallerService.java |
| Metodo interessato | createSessionInternal |
| Tipo di vulnerabilità | Elevazione dei privilegi |
| Gravità | Alta |
| CVSS v3.1 | 7.8 |
| Vettore CVSS | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Vettore di attacco | Locale |
| Complessità dell'attacco | Bassa |
| Privilegi richiesti | Bassa |
| Interazione dell'utente | Nessuna |
| Ambito | Invariato |
| Impatto | Elevazione dei privilegi attraverso un comportamento non autorizzato dell'update ownership |
| Bollettino sulla sicurezza Android | Marzo 2026 |
| Riferimento bug Android | A-459461121 |
| Versioni AOSP interessate (segnalate da Google) | Android 14, 15, 16, 16-qpr2 |
| Evento | Valore |
|---|
| Bollettino sulla sicurezza Android | Marzo 2026 |
| Data di pubblicazione del bollettino | 2 marzo 2026 |
| Sezione livello patch di sicurezza | 2026-03-01 |
| Livello patch completo del bollettino | 2026-03-05 o successivo |
| Riferimento bug Android | A-459461121 |
| Patch AOSP | 09055276288a68cf35b0f84ba32e28822f74ecf9 |
| Titolo della patch | Explicitly unset INSTALL_FROM_MANAGED_USER_OR_PROFILE flag |