Cómo probar y depurar funciones

Categoría de OWASP: MASVS-CODE: Calidad de código

Descripción general

El lanzamiento de compilaciones de producción que incluyan funciones de prueba o depuración puede tener un impacto negativo en la postura de seguridad de la aplicación. Estas funcionalidades se usan para ayudar a los desarrolladores a identificar y descubrir errores en los casos de uso previstos de la aplicación antes o después del lanzamiento de una nueva versión, y no deben ser de acceso público.

Estos son algunos ejemplos de funciones de prueba y depuración:

  • Menús ocultos
  • Opciones para habilitar los registros de depuración
  • Opciones para alterar el flujo de la aplicación
  • Opciones para eludir procesos de pago o suscripción
  • Opciones para eludir la autenticación
  • Pruebas para actividades específicas de la aplicación

Un usuario malicioso puede aprovechar todo lo anterior para alterar el flujo previsto de la aplicación o recuperar información del sistema para adaptar otros ataques.

El riesgo que se genera cuando se dejan las funciones de prueba o depuración expuestas puede variar según la acción asociada con las mismas capacidades de depuración.

Otra área de riesgo para la aplicación es el atributo android:debuggable configurado en el elemento <application> de AndroidManifest.xml. Como se informa en el artículo android:debuggable, la implementación de una aplicación de producción con el valor antes mencionado permite que los usuarios maliciosos accedan a los recursos administrativos a los que no pueden acceder de otra forma.

Impacto

Un usuario malicioso que interactúa con una función de prueba o depuración en una compilación de producción puede generar resultados inesperados. El impacto de cualquier acción está directamente conectado con los permisos asignados a la función. Cuanto mayores sean los permisos, mayor será el impacto que puede tener una explotación activa. Estas funciones dentro de una aplicación se pueden usar para eludir varias protecciones, evitar muros de pago, recuperar información relacionada con el sistema o el usuario, o activar actividades de prueba.

Mitigaciones

Evita el uso de componentes de depuración

Las funciones de prueba o depuración nunca deben implementarse dentro de los componentes de la aplicación de producción, como actividades, receptores de emisión, servicios o proveedores de contenido, ya que, si se exportan, pueden ser ejecutados por cualquier otro proceso en el dispositivo. Configurar el componente de depuración como no exportado (android:exported=false) no constituye una protección válida para las capacidades, ya que cualquier dispositivo con permisos de administrador puede ejecutarla a través de la herramienta Android Debug Bridge (ADB) si la opción de depuración está habilitada.

Limita las funciones de depuración o prueba a compilaciones de etapa de pruebas

La ejecución de cualquier función de prueba o depuración dentro de las aplicaciones debe limitarse solo a un conjunto restringido de compilaciones de etapa de pruebas para permitir que solo los desarrolladores depuren o prueben las funciones de la aplicación en un entorno controlado. Para ello, crea una compilación de prueba o depuración dedicada de la aplicación, y pruebas de instrumentación avanzadas para garantizar que las funciones de prueba o depuración se ejecuten en una versión aislada.

Implementa pruebas automatizadas de la IU

Cuando ejecutes pruebas en una aplicación, habilita las pruebas automatizadas de la IU, ya que se pueden repetir, se pueden ejecutar en un entorno separado y no suelen cometer errores humanos.

Recursos