X.509 TrustManager no seguro

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

Descripción general

La clase X509TrustManager es responsable de verificar la autenticidad de un servidor remoto. Para ello, valida el certificado del servidor.

Una implementación no segura de X509TrustManager de una aplicación para Android es aquella que no verifica correctamente la autenticidad del servidor con el que se comunica la aplicación. A raíz de esto, un atacante podría robar la identidad de un servidor legítimo y engañar a la aplicación para que le envíe datos sensibles.

La vulnerabilidad existe porque, si usas la clase X509TrustManager, Java y Android permiten la anulación completa de la verificación del servidor. La clase X509TrustManager tiene dos funciones de interés: checkServerTrusted() y getAcceptedIssuers(). Estas llamadas a funciones se pueden configurar para que confíen en todos los certificados X.509. La lógica de validación personalizada puede tener errores o estar incompleta y permitir conexiones inesperadas. En todos estos casos, se negó el propósito de la clase y la conexión de red establecida en función del resultado de X509TrustManager no es segura.

Impacto

Es posible que las implementaciones de X509TrustManager no seguras generen vulnerabilidades que pueden usarse para realizar ataques MitM (de intermediario) en el tráfico de red desde la aplicación víctima. El impacto de aprovecharse de este código no seguro es que los atacantes podrían vulnerar (de forma remota o local) los datos de red de la aplicación de un usuario si se activa el código. El impacto depende del contenido de tráfico de red que se expone de forma involuntaria (PII, información privada, valores de sesión sensibles, credenciales de servicio, etcétera).

Mitigaciones

Usa la funcionalidad NetworkSecurityConfig.xml para asegurarte de que todas las conexiones de producción, prueba, depuración y etapa de desarrollo se administren correctamente, en lugar de usar o implementar código personalizado de validación de certificados TLS/SSL. Si es necesario usar un certificado autofirmado para las compilaciones de prueba y depuración, considera usar NetworkSecurityConfig en lugar de implementar un X509TrustManager personalizado.

Recursos