Los riesgos de usar passwords hard-coded
El uso de passwords hardcodeados o hardcoded, escritos directamente en el código fuente de una aplicación, es una mala práctica que compromete la seguridad y privacidad de los datos y los usuarios.
Veamos los principales riesgos de esta práctica y algunos ejemplos de cómo evitarla.
¿Qué son los passwords hardcodeados y por qué se usan?
Los passwords hardcodeados o hardcoded son aquellos que se escriben directamente en el código fuente de una aplicación web, sin usar ningún mecanismo de cifrado, almacenamiento seguro o configuración externa. Por ejemplo, si una aplicación web necesita conectarse a una base de datos, se podría usar un password hardcodeado de la siguiente forma:
# Ejemplo de password hardcodeado en Python
import mysql.connector
# Conexión a la base de datos usando un password hardcodeado
conn = mysql.connector.connect(
host="localhost",
user="admin",
password="123456" # Password hardcodeado
)
Los passwords hardcodeados se usan a veces por comodidad, simplicidad o principalmente por desconocimiento de las mejores prácticas de desarrollo seguro. Algunos desarrolladores pueden pensar que los passwords hardcodeados son seguros porque el código fuente no es accesible para los usuarios o porque el password es complejo. Sin embargo, estas suposiciones son erróneas y pueden tener graves consecuencias.
¿Cuáles son los riesgos de usar un password hardcodeado?
El uso de passwords hardcodeados en aplicaciones web implica varios riesgos, entre los que destacamos los siguientes:
- Exposición del código fuente: El código fuente de una aplicación web puede ser expuesto por diversos motivos, como errores, vulnerabilidades, ataques, filtraciones o auditorías. Si el código fuente contiene passwords hardcodeados, estos quedarán al descubierto y podrán ser usados por personas malintencionadas para acceder a los recursos protegidos por estos passwords, como bases de datos, servidores, APIs, etc.
- Dificultad de cambio: Los passwords hardcodeados son difíciles de cambiar, ya que requieren modificar el código fuente y volver a compilar o desplegar la aplicación web. Esto puede ser un problema si se detecta una brecha de seguridad, si se necesita actualizar el password por motivos de política o si se quiere rotar el password periódicamente. Además, si el password hardcodeado se usa en varias partes del código o en varias aplicaciones, el cambio será más complejo y propenso a errores.
- Falta de control: Los passwords hardcodeados no permiten un control adecuado sobre quién y cómo se usa el password. No se puede restringir el acceso al password a ciertos usuarios, roles o entornos, ni se puede monitorizar el uso del password para detectar actividades sospechosas o anómalas. Tampoco se puede revocar el acceso al password en caso de que se pierda, se comparta o se robe.
¿Cómo evitar el uso de passwords hardcodeados?
Para evitar el uso de passwords hardcodeados en aplicaciones web, se recomienda seguir las siguientes buenas prácticas:
- Usar mecanismos de cifrado: Los passwords no deben escribirse en texto plano en el código fuente, sino que deben cifrarse usando algoritmos seguros y claves secretas. De esta forma, aunque el código fuente se exponga, los passwords no serán legibles. Por ejemplo, se podría usar el módulo
cryptography
de Python para cifrar y descifrar los passwords. - Usar mecanismos de almacenamiento seguro: Los passwords no deben almacenarse en el código fuente, sino en lugares seguros, como archivos de configuración, variables de entorno, servicios de secretos o almacenes de credenciales. De esta forma, se puede separar el password del código, facilitar su cambio y controlar su acceso. Por ejemplo, se podría usar el servicio
Azure Key Vault
para almacenar y recuperar los password. - Usar mecanismos de autenticación alternativos: Los passwords no son la única forma de autenticarse en una aplicación web, sino que existen otras opciones más seguras y convenientes, como el uso de tokens, certificados, llaves o identidades. De esta forma, se puede evitar el uso de passwords y aprovechar los beneficios de estos mecanismos, como la caducidad, la renovación, la revocación o la delegación. Por ejemplo, se podría usar el protocolo
OAuth 2.0
para obtener y usar tokens de acceso.
Conclusión
El uso de password hardcodeados en aplicaciones web es una mala práctica que puede poner en riesgo la seguridad y la privacidad de los datos y los usuarios. Para evitar esta práctica, se deben seguir las buenas prácticas de cifrado, almacenamiento seguro y autenticación alternativa. De esta forma, se podrá mejorar la seguridad, la flexibilidad y el control de las aplicaciones web.
Este artículo está relacionado con los artículos:
- SBOM: Software Bill of Materials
- S-SDLC, SAST, DAST en aplicaciones móviles seguras
- OWASP API Security Top 10
Comentarios
Publicar un comentario