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:


Python
# 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:

  1. 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.
  2. 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.
  3. 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:


Puedes encontrar más recomendaciones sobre el manejo de passwords en:
CWE correspondiente a esta vulnerabilidad:

Comentarios

Artículos mas populares de la última semana