
Prueba de concepto que demuestra CVE-2026-0023, un bypass de confianza de actualización de Android que suprime la advertencia de propiedad durante las actualizaciones de aplicaciones. Incluye tres aplicaciones Android para reproducir y estudiar la vulnerabilidad.
Un entorno de laboratorio Android completo para reproducir y estudiar CVE-2026-0023.
Este repositorio demuestra cómo CVE-2026-0023 permite que un instalador normal influya en una bandera interna de instalación de Android que solo debería ser controlada por el sistema, lo que provoca que la advertencia de Propiedad de Actualización de Android se suprima durante las actualizaciones de aplicaciones.
El proyecto contiene tres aplicaciones Android que modelan un flujo de trabajo realista de propiedad de actualización y proporcionan un entorno reproducible para observar el comportamiento vulnerable.
Android introdujo la Propiedad de Actualización para ayudar a las aplicaciones, tiendas de aplicaciones y entornos empresariales a mantener una cadena de actualización confiable.
Cuando una aplicación tiene un propietario de actualización registrado, Android advierte al usuario si otro instalador intenta actualizar esa aplicación.
En condiciones normales, esta advertencia le indica al usuario que la aplicación normalmente recibe actualizaciones de una fuente diferente.
CVE-2026-0023 afecta el flujo de instalación de paquetes de Android dentro de PackageInstallerService#createSessionInternal.
El problema está relacionado con el manejo de la bandera interna de instalación INSTALL_FROM_MANAGED_USER_OR_PROFILE.
En compilaciones vulnerables, esta bandera no se limpiaba explícitamente antes de que Android verificara si la instalación estaba realmente asociada con un usuario administrado o un perfil administrado.
Como resultado, un instalador normal podía influir en el comportamiento de la propiedad de actualización y hacer que Android suprima la advertencia de Propiedad de Actualización esperada.
Este repositorio demuestra la diferencia entre el comportamiento esperado y el comportamiento vulnerable utilizando un entorno de prueba de concepto controlado.
| Comportamiento esperado | Comportamiento vulnerable |
|---|---|
| Android muestra la advertencia de Propiedad de Actualización. | Android muestra solo un diálogo de actualización genérico. |
![]() | ![]() |
CVE-2026-0023 está listado en el Boletín de seguridad de Android de marzo de 2026 en los detalles de vulnerabilidad del nivel de parche de seguridad 2026-03-01.
Los niveles de parche de seguridad de Android 2026-03-01 o posteriores solucionan todos los problemas asociados con el nivel de parche de seguridad 2026-03-01.
Los niveles de parche de seguridad de Android 2026-03-05 o posteriores solucionan todos los problemas asociados con el nivel de parche de seguridad 2026-03-05 y todos los niveles de parche anteriores.
El comportamiento vulnerable está relacionado con el manejo de la bandera interna INSTALL_FROM_MANAGED_USER_OR_PROFILE.
Esta bandera está destinada a representar el comportamiento de instalación asociado con un usuario administrado o un perfil administrado.
El parche oficial de AOSP limpia explícitamente esta bandera antes de que Android verifique si la instalación realmente pertenece a un usuario administrado por la organización.
La lógica corregida asegura que solo el sistema pueda establecer esta bandera basándose en el resultado de DevicePolicyManagerInternal#isUserOrganizationManaged(userId).
Lógica del parche simplificada:
final var dpmi = LocalServices.getService(DevicePolicyManagerInternal.class);
+ // Solo el sistema debería poder establecer esta bandera, así que asegúrese de que no esté establecida cuando no sea necesario.
+ params.installFlags &= ~PackageManager.INSTALL_FROM_MANAGED_USER_OR_PROFILE;
if (dpmi != null && dpmi.isUserOrganizationManaged(userId)) {
params.installFlags |= PackageManager.INSTALL_FROM_MANAGED_USER_OR_PROFILE;
}
Antes del parche, la bandera no se limpiaba explícitamente antes de esta verificación de perfil administrado.
Después del parche, Android primero elimina la bandera y solo la vuelve a establecer si el sistema determina que el usuario está efectivamente administrado por la organización.
Esto evita que un instalador normal influya en este estado interno de la sesión de instalación.
Este repositorio contiene tres aplicaciones Android:
CVE-2026-0023-Update-Ownership-PoC
├── Safe Mart
├── Unsafe Mart
└── Ownership Inspector
Safe Mart es una aplicación instaladora de referencia.
Instala la aplicación objetivo y solicita la propiedad de actualización durante la instalación inicial.
Su propósito es simular una tienda de aplicaciones legítima que se convierte en el propietario de actualización registrado de la aplicación objetivo.
Unsafe Mart es una segunda aplicación instaladora utilizada para reproducir CVE-2026-0023.
Admite dos rutas de instalación:
La ruta normal activa la advertencia esperada de Propiedad de Actualización de Android.
La ruta CVE suprime la advertencia de propiedad y hace que Android muestre un diálogo de confirmación de actualización genérico en su lugar.
Ownership Inspector es la aplicación objetivo utilizada en la demostración.
La aplicación declara soporte para la propiedad de actualización y muestra metadatos relacionados con el instalador reportados por el PackageManager de Android.
Su propósito es facilitar la observación de cómo se instaló o actualizó la aplicación objetivo durante cada etapa de la prueba de concepto.
| Antes de CVE-2026-0023 | Después de CVE-2026-0023 |
![]() | ![]() |
La prueba de concepto demuestra dos flujos de actualización diferentes:
flowchart LR
A["Safe Mart<br/>Instalador de referencia"] -->|"Instala la aplicación objetivo<br/>+ solicita propiedad de actualización"| B["Ownership Inspector<br/>Aplicación objetivo"]
C["Unsafe Mart<br/>Instalador alternativo"] --> D{"Ruta de actualización"}
D -->|"Ruta de actualización normal"| E["Android muestra<br/>advertencia de Propiedad de Actualización"]
D -->|"Ruta CVE-2026-0023"| F["Android muestra solo<br/>diálogo de actualización genérico"]
E --> G["El usuario es advertido:<br/>Safe Mart es el propietario de actualización"]
F --> H["La advertencia de propiedad<br/>es suprimida"]Instale ambas aplicaciones instaladoras en el dispositivo de prueba.
Permita que ambas aplicaciones instalen aplicaciones desconocidas cuando Android lo solicite.
Abra Safe Mart y seleccione el APK de Ownership Inspector.
Safe Mart instala la aplicación objetivo y solicita la propiedad de actualización durante la sesión de instalación inicial.
En este punto, Safe Mart actúa como el instalador de referencia y se convierte en la fuente de actualización esperada para la aplicación objetivo.
Abra Ownership Inspector.
La aplicación muestra metadatos relacionados con el instalador reportados por el PackageManager de Android.
Este paso ayuda a confirmar el estado de instalación inicial antes de intentar actualizaciones desde Unsafe Mart.
Abra Unsafe Mart y seleccione el APK de Ownership Inspector.
Elija la ruta de actualización normal.
Debido a que Ownership Inspector fue instalado originalmente a través de Safe Mart con la propiedad de actualización habilitada, Android muestra una advertencia de Propiedad de Actualización.
Este es el comportamiento esperado de Android.
La advertencia indica al usuario que la aplicación normalmente recibe actualizaciones de Safe Mart, mientras que el intento de actualización actual proviene de Unsafe Mart.
Regrese a Unsafe Mart y seleccione nuevamente el APK de Ownership Inspector.
Elija la ruta de reproducción de CVE-2026-0023.
En este flujo, Android ya no muestra la advertencia de Propiedad de Actualización.
En su lugar, el sistema muestra solo un diálogo de confirmación de actualización genérico.
Este es el comportamiento vulnerable demostrado por la prueba de concepto.
La diferencia importante no es solo el cambio visual en el diálogo.
La señal de seguridad sobre el propietario de actualización registrado se elimina del flujo de actualización.
Después de que se complete la actualización, abra Ownership Inspector nuevamente.
La aplicación se puede utilizar para observar los metadatos relacionados con el instalador después de que se haya completado la ruta de reproducción de CVE-2026-0023.
Esta prueba de concepto demuestra un bypass del modelo de confianza de Propiedad de Actualización.
Más específicamente, muestra que:
La PoC no intenta proporcionar acceso root, ejecución arbitraria de código, persistencia, sigilo ni comportamiento similar a malware.
La vulnerabilidad se reprodujo en Android 15.
La prueba de concepto no requiere:
Toda la demostración se realiza a través de aplicaciones Android regulares que se ejecutan en el sandbox de aplicaciones estándar de Android.
La información de seguridad del dispositivo probado se puede observar en los registros de la aplicación.
Los valores de ejemplo recopilados por la PoC incluyen:
Build.VERSION.SECURITY_PATCH
Build.VERSION.SDK_INT
Build.VERSION.RELEASE
Build.VERSION.INCREMENTAL
Build.FINGERPRINT
Para compilar y ejecutar el proyecto, necesita:
No se requiere ninguna modificación especial del dispositivo.
Abra cada proyecto de aplicación en Android Studio y compile los APK de depuración:
Luego instale Safe Mart y Unsafe Mart en el dispositivo de prueba.
Ownership Inspector debe instalarse a través de Safe Mart durante el flujo de reproducción.
La PoC interactúa con las API PackageInstaller de Android y modifica los parámetros de la sesión de instalación para reproducir el comportamiento vulnerable.
Durante la ruta de reproducción de CVE, la PoC utiliza la bandera del sistema relacionada con el comportamiento de instalación de usuario o perfil administrado:
INSTALL_FROM_MANAGED_USER_OR_PROFILE
La vulnerabilidad no es causada por el acceso a API ocultas en sí mismo.
El acceso a API ocultas solo se utiliza como un detalle de implementación para alcanzar las interfaces de framework requeridas desde un contexto de aplicación regular.
El límite de seguridad importante es que esta bandera de instalación solo debe ser confiable cuando es establecida por el sistema después de validar el estado del usuario administrado o del perfil administrado.
Este proyecto utiliza la biblioteca RestrictionBypass de ChickenHook para acceder a interfaces de framework de Android que no son SDK, requeridas por la prueba de concepto.
El mecanismo de acceso a API ocultas no está relacionado con la causa raíz de CVE-2026-0023 y solo se utiliza para interactuar con las API necesarias de PackageInstaller.
RestrictionBypass: https://github.com/ChickenHook/RestrictionBypass
Créditos a los autores originales por su trabajo.
Google clasificó CVE-2026-0023 como una vulnerabilidad de Elevación de Privilegios de gravedad Alta.
El problema no proporciona acceso root ni ejecución arbitraria de código.
Sin embargo, permite que un instalador no privilegiado realice una operación que normalmente debería estar protegida por el modelo de seguridad de instalación de paquetes de Android.
El impacto más relevante probablemente se encuentre en escenarios de implementación empresarial y de dispositivos administrados.
Las organizaciones pueden depender de la Propiedad de Actualización para garantizar que las aplicaciones se actualicen a través de una tienda de aplicaciones aprobada o un instalador empresarial.
Al suprimir la advertencia de propiedad, CVE-2026-0023 debilita una señal de confianza que Android normalmente proporcionaría antes de permitir una actualización desde una fuente diferente.
Para dispositivos de consumo regulares, el impacto práctico depende en gran medida del comportamiento de instalación del usuario, el nivel de parche del dispositivo y si la aplicación objetivo se basa en la semántica de propiedad de actualización.
Este repositorio está diseñado para demostrar la vulnerabilidad en un entorno de investigación controlado.
No intenta:
La prueba de concepto se centra específicamente en el comportamiento de bypass de la advertencia de Propiedad de Actualización asociado con CVE-2026-0023.
Boletín de seguridad de Android - Marzo 2026 https://source.android.com/docs/security/bulletin/2026/2026-03-01
CVE-2026-0023 - Registro CVE https://www.cve.org/CVERecord?id=CVE-2026-0023
CVE-2026-0023 - NVD https://nvd.nist.gov/vuln/detail/CVE-2026-0023
Parche de AOSP - Desestablecer explícitamente la bandera INSTALL_FROM_MANAGED_USER_OR_PROFILE
https://android.googlesource.com/platform/frameworks/base/+/09055276288a68cf35b0f84ba32e28822f74ecf9
RestrictionBypass de ChickenHook https://github.com/ChickenHook/RestrictionBypass
Este repositorio se proporciona con fines de investigación de seguridad, educativos y de análisis de vulnerabilidades.
El código está destinado únicamente a reproducir y estudiar CVE-2026-0023 en entornos controlados y en dispositivos donde las pruebas estén autorizadas.
El autor no alienta ni respalda pruebas no autorizadas contra dispositivos, aplicaciones, usuarios, organizaciones o sistemas sin permiso.
Los usuarios son responsables de cumplir con todas las leyes, políticas y requisitos organizacionales aplicables al probar o modificar dispositivos Android.
Utilice este repositorio de manera responsable.
| Campo | Valor |
|---|
| CVE | CVE-2026-0023 |
| Componente | Framework / PackageInstaller |
| Archivo afectado | PackageInstallerService.java |
| Método afectado | createSessionInternal |
| Tipo de vulnerabilidad | Elevación de privilegios |
| Gravedad | Alta |
| CVSS v3.1 | 7.8 |
| Vector CVSS | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Vector de ataque | Local |
| Complejidad del ataque | Baja |
| Privilegios requeridos | Bajos |
| Interacción del usuario | Ninguna |
| Alcance | Sin cambios |
| Impacto | Elevación de privilegios mediante comportamiento no autorizado de propiedad de actualización |
| Boletín de seguridad de Android | Marzo 2026 |
| Referencia de error de Android | A-459461121 |
| Versiones AOSP afectadas listadas por Google | Android 14, 15, 16, 16-qpr2 |
| Evento | Valor |
|---|
| Boletín de seguridad de Android | Marzo 2026 |
| Fecha de publicación del boletín | 2 de marzo de 2026 |
| Sección del nivel de parche de seguridad | 2026-03-01 |
| Nivel de parche completamente solucionado del boletín | 2026-03-05 o posterior |
| Referencia de error de Android | A-459461121 |
| Parche de AOSP | 09055276288a68cf35b0f84ba32e28822f74ecf9 |
| Título del parche | Explicitly unset INSTALL_FROM_MANAGED_USER_OR_PROFILE flag |