Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
TransitionPlayer — CVE-2026-0091, juega con un problema en la gestión de ventanas de Android para ejecutar código arbitrario en el proceso de Launcher desde adb | Kitploit
Herramientas/GitHubGitHub/canyie/transitionplayer
Seguridad AndroidEscalada de PrivilegiosExplotaciónAnálisis ForenseSeguridad MóvilAprendizaje y EducaciónExplotación de Binarios
GitHubcanyie/transitionplayer

TransitionPlayer

CVE-2026-0091, juega con un problema en la gestión de ventanas de Android para ejecutar código arbitrario en el proceso de Launcher desde adb

Ver Repositorio
324hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Este problema se ha corregido para Android 14+ en el Boletín de Seguridad de Android de junio de 2026. Haz clic aquí para ver el parche

Writeup

TODO

Completaré el writeup cuando tenga un poco de tiempo libre

Pero antes tengo que luchar contra los deberes y los exámenes

Decidí completar la sección antes de que terminen los exámenes

Buena suerte para mí 😇

Introducción a IApplicationThread

IApplicationThread es un callback privado que las aplicaciones entregan al sistema para que este pueda usarlo para enviar comandos a la aplicación (cargar una aplicación específica, notificar cambios en el ciclo de vida de los componentes, etc.)

Está diseñado para ser utilizado únicamente por el sistema, por lo que no hay comprobaciones de permisos, y la seguridad queda garantizada únicamente por el hecho de que un proceso malicioso no obtenga el objeto. Esto suena algo similar al concepto de «cookies» o «tokens» en la web. Este modelo de control de acceso se denomina seguridad basada en capacidades

Si alguien consiguiera obtener un IApplicationThread de otros procesos, podría enviar comandos arbitrarios y la aplicación víctima procesaría los comandos fabricados como si hubieran sido generados por el sistema. En un exploit anterior de CVE-2022-20452 el truco se utilizó para lograr la ejecución de código arbitrario

RemoteTransition

Aunque IApplicationThread solo debería pasarse al proceso del sistema, puede enviarse inesperadamente fuera de system_server

Nadie implementaría una API getIApplicationThreadForApp(String packageName) expuesta a cualquiera; es una violación de seguridad evidente

Pero si IApplicationThread se envuelve en otro objeto y se envía el objeto contenedor externo, es un escenario más probable

RemoteTransition es uno de esos contenedores: contiene un IApplicationThread para aumentar la prioridad de la aplicación que está ejecutando una animación

Uno de los usuarios de esa API es Launcher3, la aplicación de inicio predeterminada en los dispositivos AOSP y Pixel, que crea un ActivityOptions usando un RemoteTransition y luego lo pasa a startActivity()

Aunque Launcher3 en sí no expone el objeto a partes no confiables, system_server a veces sí lo hace

CVE-2022-20419 ocurrió porque system_server reenviaba el ActivityOptions pasado por el llamador a la aplicación lanzada, pero olvidó eliminar el RemoteTransition, lo que permitía que la aplicación lanzada lo recibiera y cargara código arbitrario dentro del proceso del launcher

TransitionPlayer

Durante la animación de transición de elementos compartidos, hay que realizar mucho trabajo y es necesario que se produzcan comunicaciones entre WMCore y WMShell, donde WM significa Window Manager

Puedes leer este artículo para entender WMShell

Como WMCore y WMShell se ejecutan en procesos diferentes (WMCore se ejecuta en system_server y WMShell en SystemUI), utilizan el mecanismo Binder para comunicarse entre sí

WMCore expone una API Binder registerTransitionPlayer y WMShell la utiliza para registrar su propio binder

Cuando se inicia la animación, WMCore llama a requestStartTransition y se pasa a la parte remota un TransitionRequestInfo, que incluye el RemoteTransition inicial

Así que, si podemos reemplazar el transition player, podremos recuperar el IApplicationThread del Launcher y lograr la ejecución de código arbitrario dentro de un proceso privilegiado

Sin embargo, registerTransitionPlayer está protegida por el permiso MANAGE_ACTIVITY_TASKS, que una aplicación de terceros no puede obtener

Pero adb shell también puede ejecutar código de usuario no confiable y a la shell se le concede el permiso MANAGE_ACTIVITY_TASKS, así que, afortunadamente, podemos lanzar el ataque desde adb shell

Impacto

Es una pregunta curiosa qué pueden hacer los atacantes a través de esta vulnerabilidad

Como la mayoría de los permisos concedidos al Launcher también los tiene adb shell, los atacantes que ya pueden ejecutar código bajo la identidad de shell no necesitan explotar esta vulnerabilidad para comprometer el dispositivo

Esto es más un proyecto de ejemplo educativo para aprender sobre IApplicationThread que un exploit que pueda usar una aplicación maliciosa

Sin embargo, puede que a alguien todavía le interese

Por ejemplo, esto se puede usar para extraer los archivos privados del Launcher, lo que puede ser útil en el análisis forense de aplicaciones Launcher maliciosas sin rootear el dispositivo. Anteriormente esto se logró explotando CVE-2024-31317, y mi hallazgo revela otro método después de que el anterior fuera corregido

Esto también permite a los usuarios usar Fabricated Runtime Resources Overlay (FRRO) sin tener que rootear primero su dispositivo, por lo que los temas personalizados sin root vuelven después de que se parcheara CVE-2021-39630. Mi exploit ha demostrado esto estableciendo android:integer/config_multiuserMaximumUsers en 100

Además, el Launcher también aloja el componente de la pantalla Recientes de forma predeterminada y, por lo tanto, está en la lista blanca para algunas acciones privilegiadas. Creo que el Launcher puede iniciar una actividad arbitraria en una tarea existente sin importar la configuración de exported/permisos de las actividades lanzadas, lo que podría ser deseado por algunas aplicaciones de herramientas de gestión de dispositivos, aunque yo no lo he probado personalmente

Prueba

Compila el proyecto e instala el archivo apk generado (si usas el botón Run dentro de Android Studio, activa «Instalar siempre con el administrador de paquetes»)

Ejecuta el siguiente comando en el PC

root@kitploit:~
adb shell app_process '-Djava.class.path=$(pm path top.canyie.transitionplayer | cut -c9-) /system/bin top.canyie.transitionplayer.Main'

Luego, inicia una aplicación arbitraria tocando su icono desde el launcher

Se debería enviar una notificación desde la aplicación del launcher y, si estás en Android 14+, se inyectará un overlay fabricado en el sistema, por lo que adb shell cmd overlay lookup android android:integer/config_multiuserMaximumUsers debería devolver 100

Correcciones

  • El mecanismo de delegado de animación se ha refactorizado y el handle de IApplicationThread ya no se envía fuera de WindowManagerService
  • A partir de Android 17, la llamada a IApplicationThread será rechazada si proviene de un proceso que no es del sistema. No creo que sea una forma efectiva de mitigar este tipo de exploits, ya que pienso que los atacantes pueden engañar a ActivityManagerService para que realice llamadas con una ruta de apk controlada por el atacante hacia el proceso objetivo (aunque no lo he probado personalmente), pero es una señal de que el equipo de seguridad de Android está empezando a tomar medidas
Descargar herramienta