Categoría de OWASP: MASVS-CODE: Calidad de código
Descripción general
El uso de APIs o bibliotecas no seguras reduce de manera significativa la postura de seguridad de una aplicación. Una violación de la seguridad en cualquiera de estas dependencias permitiría a un atacante aprovechar varios vectores para realizar un amplio conjunto de ataques, como la ejecución remota de código (RCE) y los ataques de intermediario (MitM).
La amenaza de implementar dependencias no seguras surge cuando los desarrolladores no integran las evaluaciones de seguridad y las pruebas de vulnerabilidad en el ciclo de vida de desarrollo de software (SDLC) o, en algunos casos, no implementan una política de actualización automatizada para dependencias de la aplicación.
Por lo general, el aprovechamiento de las dependencias comienza cuando se analiza el objeto binario de la aplicación (.apk) en busca de bibliotecas vulnerables. En este punto, se lleva a cabo la inteligencia de código abierto (OSINT) para descubrir vulnerabilidades potencialmente aprovechables que ya se detectaron antes. Entonces, los atacantes pueden utilizar la información de vulnerabilidad de divulgación pública, como vulnerabilidades y exposiciones comunes (CVE), para realizar otros ataques.
Impacto
El aprovechamiento exitoso de dependencias no seguras puede dar pie a un amplio conjunto de ataques, como la ejecución de código remoto (RCE), las inyecciones de SQL (SQLi) o las secuencias de comandos entre sitios (XSS). Por lo tanto, el impacto general está directamente relacionado con el tipo de vulnerabilidad que introduce el software de terceros y que los atacantes pueden aprovechar. Las posibles consecuencias de un aprovechamiento exitoso de dependencias vulnerables son las violaciones de la seguridad de los datos o la falta de disponibilidad del servicio, lo que puede generar un impacto significativo en la reputación y la rotación económica.
Mitigaciones
Defensa en profundidad
Ten en cuenta que las mitigaciones que se muestran a continuación se deben implementar combinadas para garantizar una postura de seguridad más sólida y reducir la superficie de ataque de la aplicación. El enfoque exacto siempre se debe evaluar caso por caso.
Evaluaciones de vulnerabilidades de dependencias
Implementa la verificación de dependencias al comienzo del ciclo de vida de desarrollo para detectar vulnerabilidades en el código de terceros. En esta fase, se prueba si el código que no se compila de forma interna es seguro antes de lanzarlo en entornos de producción. La verificación podría complementarse con la implementación de herramientas de pruebas de seguridad de aplicaciones estáticas (SAST) y de pruebas de seguridad de aplicaciones dinámicas (DAST) en el ciclo de vida de desarrollo de software para mejorar la postura de seguridad de la aplicación.
Actualiza dependencias de forma continua
Siempre recuerda actualizar de forma continua cualquier dependencia incorporada en el código. Para ello, se recomienda implementar actualizaciones automáticas que se envíen a producción cada vez que un componente de terceros lance un nuevo parche de seguridad.
Realiza pruebas de penetración de aplicaciones
Realiza pruebas de penetración frecuentes. El objetivo de estos tipos de pruebas es descubrir cualquier vulnerabilidad conocida que pueda afectar el código propio o las dependencias de terceros. Además, las evaluaciones de seguridad suelen descubrir vulnerabilidades desconocidas (días cero). Las pruebas de penetración son útiles para los desarrolladores, ya que les brindan un resumen de la postura de seguridad actual de la aplicación y los ayudan a priorizar los problemas de seguridad aprovechables que deben solucionarse.