Almacenamiento Inseguro de Credenciales en una Aplicación Web
Si una aplicación web almacena inseguramente las credenciales de registro de ingreso o login, la seguridad del mecanismo de login se ve minada aunque no exista una falla inherente al proceso de autenticación por si mismo.
Este es un error muy común encontrado en las aplicaciones web donde las credenciales de usuario son almacenadas inseguramente dentro de la base de datos. Esto podría involucrar contraseñas siendo almacenadas en texto plano. Y aunque las contraseñas hayan sido “hasheadas” utilizando un algoritmo estándar como MD5 o SHA-1, esto aun permite al atacante consultar los hashes contra una base de datos previamente calculada de valores hash.
Para la siguiente demostración se utilizará la aplicación vulnerable de nombre BadStore.
Se navega la aplicación web vulnerable utilizando Firefox configurado con Zed Attack Proxy. El objetivo es revisar las funcionalidades relacionadas a la autenticación, como también las relacionadas al mantenimiento del usuario. Si se encuentran instancias en la cual la contraseña del usuario es transmitida de retorno hacia el cliente, esto indica un almacenamiento inseguro de las contraseñas, ya sea estén en texto plano o un cifrado reversible.
En este caso se identifica el almacenamiento de credenciales de usuario dentro de la cookie. Este dato es enviado hacía la aplicación web en cada petición realizada. Los datos incluidos dentro de la cookie también son devueltos por la aplicación web.
En ZAP utilizar la opción “Tools -> Encode/Decode/Hash...” para decodificar este valor encontrado dentro de la cookie.
Seleccionar el resultado del campo “URL Decode” y realizar una nueva decodificación.
En el campo de nombre “Base 64 Decode” se visualiza el texto plano, entre la información a interpretar se puede observar el correo electrónico del usuario un hash, un nombre de usuario y una letra “U”. El hash es un MD5. Por lo cual se utiliza alguno de los diversos servicios en línea disponibles en Internet para obtener el texto plano desde el hash MD5. Obteniéndose de esta manera la contraseña para el usuario.
También se identifica un directorio de nombre “/supplier/accounts/” en la raíz del servidor web.
Una rápido reconocimiento visual indica una alta probabilidad de contener datos cifrados utilizando base64.
Se guardan estos datos en un archivo para realizar una descifrado manual utilizando comandos bash en Linux. La información descifrada incluye, un nombre de usuario, contraseña, otro valor posiblemente como un recordatorio de la contraseña, y tal vez la dirección IP desde donde se realizó la última conexión del usuario.
Así mismo se debe tratar de identificar cualquier tipo de vulnerabilidad de ejecución de comandos arbitrarios y consultas, intentando encontrar la ubicación dentro de la base de datos o sistema de archivos donde se almacenan las credenciales del usuario.
Fuentes:
https://www.owasp.org/index.php/Insecure_Storage
https://code.google.com/p/zaproxy/
http://www.hashkiller.co.uk/
https://crackstation.net/
Sobre el Autor
Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
WhatsApp: https://wa.me/51949304030
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
Youtube: https://www.youtube.com/c/AlonsoCaballero
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/