Vulnerabilidad Janus de Android permite la modificación de aplicaciones sin afectar su firma
Un fallo en los formatos APK y DEX podría permitir que la inyección de código malicioso fuera indetectable como actualización de una aplicación legítima.
Un equipo de investigadores de la empresa Guard Square, ha hecho pública una vulnerabilidad en los formatos de ficheros APK y DEX que, combinada con el comportamiento de las máquinas virtuales Android, podría permitir la manipulación del código de las aplicaciones sin alterar su firma.
Identificada como CVE-2017-13156 y llamada "Janus", por el dios romano de la dualidad, la vulnerabilidad radica en que un fichero puede ser manipulado de forma que resulte un APK y un DEX válido al mismo tiempo.
El formato DEX es un formato de fichero binario propio de la máquina virtual Dalvik, utilizada hasta la versión 4.4 "KitKat" para ejecutar aplicaciones Android. A partir de esta versión fue sustituida por la máquina virtual Android Runtime (ART) pero el formato DEX se ha mantenido. Los APKs, por otro lado, son ficheros zip basados en el formato JAR que contienen, entre otros, ficheros DEX.
¿Cómo es posible que un fichero sea DEX y APK a la vez?
De una forma bastante curiosa. Por un lado, los ficheros APK permiten introducir bytes arbitrarios al inicio del fichero, antes de las entradas zip. El esquema de firma JAR usado por Android ignora estos bytes y solo utiliza las entradas zip para calcular la firma.
Pero por otro lado, los ficheros DEX permiten la inclusión de bytes arbitrarios al final del fichero. Por tanto, incluyendo uno de estos ficheros al inicio de un APK, un fichero sería valido en ambos formatos sin alterar la firma generada para el paquete.
Un fichero manipulado de esta manera sería además ejecutado sin problemas por las máquinas virtuales, tanto Dalvik como ART. El APK sería aceptado por la VM, dado que su firma es correcta, pero el que sería finalmente ejecutado es el fichero DEX inyectado.
El escenario de mayor riesgo es el de las actualizaciones: la firma es el método de verificación para la instalación de nuevas versiones de una aplicación. Usando esta vulnerabilidad, un atacante podría inyectar un DEX malicioso dentro de un APK legítimo sin alterar su firma y hacerlo pasar por una actualización del mismo. Una vez instalado, el malware puede aprovechar los permisos aplicados a la versión legítima previa para acceder a todo tipo de información sensible o redirigir los datos de la victima a sitios maliciosos.
La vulnerabilidad está presente en versiones recientes de Android (de la 5 en adelante) aunque no afecta a aquellas aplicaciones que corren en Android 7.0 y que han sido firmadas usando el esquema de firma APK v2, que sí toma todo el contenido del fichero para generar la firma. La solución al fallo de seguridad ha sido publicada en el boletín de seguridad de Android del pasado día 4 de diciembre.
Identificada como CVE-2017-13156 y llamada "Janus", por el dios romano de la dualidad, la vulnerabilidad radica en que un fichero puede ser manipulado de forma que resulte un APK y un DEX válido al mismo tiempo.
El formato DEX es un formato de fichero binario propio de la máquina virtual Dalvik, utilizada hasta la versión 4.4 "KitKat" para ejecutar aplicaciones Android. A partir de esta versión fue sustituida por la máquina virtual Android Runtime (ART) pero el formato DEX se ha mantenido. Los APKs, por otro lado, son ficheros zip basados en el formato JAR que contienen, entre otros, ficheros DEX.
¿Cómo es posible que un fichero sea DEX y APK a la vez?
De una forma bastante curiosa. Por un lado, los ficheros APK permiten introducir bytes arbitrarios al inicio del fichero, antes de las entradas zip. El esquema de firma JAR usado por Android ignora estos bytes y solo utiliza las entradas zip para calcular la firma.
Pero por otro lado, los ficheros DEX permiten la inclusión de bytes arbitrarios al final del fichero. Por tanto, incluyendo uno de estos ficheros al inicio de un APK, un fichero sería valido en ambos formatos sin alterar la firma generada para el paquete.
Esquema de como realizar la inyección de DEX en un APK. Obtenida de GuardSquare |
Un fichero manipulado de esta manera sería además ejecutado sin problemas por las máquinas virtuales, tanto Dalvik como ART. El APK sería aceptado por la VM, dado que su firma es correcta, pero el que sería finalmente ejecutado es el fichero DEX inyectado.
El escenario de mayor riesgo es el de las actualizaciones: la firma es el método de verificación para la instalación de nuevas versiones de una aplicación. Usando esta vulnerabilidad, un atacante podría inyectar un DEX malicioso dentro de un APK legítimo sin alterar su firma y hacerlo pasar por una actualización del mismo. Una vez instalado, el malware puede aprovechar los permisos aplicados a la versión legítima previa para acceder a todo tipo de información sensible o redirigir los datos de la victima a sitios maliciosos.
La vulnerabilidad está presente en versiones recientes de Android (de la 5 en adelante) aunque no afecta a aquellas aplicaciones que corren en Android 7.0 y que han sido firmadas usando el esquema de firma APK v2, que sí toma todo el contenido del fichero para generar la firma. La solución al fallo de seguridad ha sido publicada en el boletín de seguridad de Android del pasado día 4 de diciembre.
Más información:
New Android vulnerability allows attackers to modify apps without affecting their signatures:
Via: unaaldia.hispasec.com
Vulnerabilidad Janus de Android permite la modificación de aplicaciones sin afectar su firma
Reviewed by Zion3R
on
10:50
Rating: