Reino: Input Validation and Representation

Los problemas de validación y representación de entradas están causados por metacaracteres, codificaciones alternativas y representaciones numéricas. Los problemas de seguridad surgen de entradas en las que se confía. Estos problemas incluyen: «desbordamientos de búfer», ataques de «scripts de sitios», "SQL injection" y muchas otras acciones.

Android Class Loading Hijacking

Abstract
La carga de clases desde un origen o en un entorno que no son de confianza puede provocar que una aplicación ejecute comandos malintencionados en nombre de un usuario malintencionado.
Explanation
Las vulnerabilidades de secuestro al cargar clases de Android se presentan de dos formas:

- Un usuario malintencionado puede cambiar el nombre de los directorios que busca el programa para cargar clases, de modo que la ruta señale a un directorio que controla: este controla de forma explícita las rutas en las que se buscarán las clases.

- Un usuario malintencionado puede cambiar el entorno donde se carga la clase: este controla de forma implícita lo que significa el nombre de la ruta.

En este caso, nos preocupa principalmente el primer caso, la posibilidad de que un usuario malintencionado pueda controlar los directorios donde se buscan las clases para cargar. Las vulnerabilidades de secuestro al cargar clases de Android de este tipo tienen lugar cuando:

1. Los datos entran en la aplicación desde una fuente no confiable.



2. Los datos se utilizan como una cadena, o parte de ella, que representa un directorio de biblioteca donde buscar las clases para cargar.



3. Al ejecutar el código desde la ruta de la biblioteca, la aplicación concede al usuario malintencionado un privilegio o capacidad que, de lo contrario, no tendría.

Ejemplo 1: el siguiente código utiliza la userClassPath modificable por el usuario para determinar el directorio donde buscar las clases para cargar.


...
productCategory = this.getIntent().getExtras().getString("userClassPath");
DexClassLoader dexClassLoader = new DexClassLoader(productCategory, optimizedDexOutputPath.getAbsolutePath(), null, getClassLoader());
...


Este código permite a un usuario malintencionado cargar una biblioteca y posiblemente ejecutar código arbitrario con el privilegio elevado de la aplicación mediante la modificación de userClassPath para que señale a una ruta diferente que controla este. Como el programa no valida el valor leído del entorno, si un usuario malintencionado puede controlar el valor de userClassPath, podría engañar a la aplicación para que señalara un directorio controlado por él y, por lo tanto, cargar las clases que hubiera definido, utilizando los mismos privilegios que la aplicación original.

Ejemplo 2: el siguiente código utiliza la userOutput modificable por el usuario para determinar el directorio donde deberían escribirse los archivos DEX optimizados.


...
productCategory = this.getIntent().getExtras().getString("userOutput");
DexClassLoader dexClassLoader = new DexClassLoader(sanitizedPath, productCategory, null, getClassLoader());
...



Este código permite a un usuario malintencionado especificar el directorio de salida para los archivos DEX optimizados (ODEX). Esto permite a un usuario malintencionado cambiar el valor de userOutput por un directorio que controle, como por ejemplo almacenamiento externo. Una vez logrado esto, basta con reemplazar el archivo ODEX producido con un archivo ODEX malintencionado para ejecutar este con los mismos privilegios que la aplicación original.
References
[1] Android Class Loading Hijacking Symantec
desc.dataflow.java.android_class_loading_hijacking