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.
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: https://www.guardsquare.com/en/blog/new-android-vulnerability-allows-attackers-modify-apps-without-affecting-their-signatures
Fuente: Hispasec