OASAM-DV-006: Log Injection

Descripción
Un atacante podría incluir ciertos caracteres especiales dentro de una cadena de texto especialmente manipulada, que al ser utilizada en la construcción de una entrada nueva en los ficheros de registro, resultase en una manipulación de la salida a voluntad del atacante. En el caso de Android, las funciones estándar de logueo de información son las siguientes:
1. Log.v(). Para almacenar información extendida.
2. Log.d(). Para almacenar información de depuración.
3. Log.i(). Para almacenar información básica.
4. Log.w(). Para almacenar información acerca de advertencias.
5. Log.e(). Para almacenar logs de errores.

Riesgos
Los archivos de log podrían resultar corrompidos, debido a la inserción de entradas falsas o inválidas. Esto podría resultar en registros no confiables y la necesidad de descartar todos los registros sobre acciones realizadas en el sistema por los usuarios. Un atacante podría utilizar este hecho para ocultar sus acciones delictivas y evitar la posible detección de sus acciones y/o persecución por delitos cometidos.


Recomendaciones
Se debe tener en cuenta cualquier meta-carácter utilizado por la aplicación al construir los registros. Por ejemplo, si la aplicación utilizara el carácter tubería o pipe "|" (sin las comillas) para formatear la salida, éste sería un meta-carácter. Es decir, un atacante podría incluir un | de más y no habría forma de reconstruir posteriormente si ese | fue introducido por la aplicación o por el atacante. Esto aplica para cualquier carácter con significado especial en los registros.


Referencias
1. Data Validation de “Smartphone apps are not that smart: Insecure Development Practices by Vulnex
2. OWASP Top Ten Mobile Risk número 4: Client Side Injection.