Hardcoded Credentials es un tipo de vulnerabilidad que ocurre cuando una aplicación tiene credenciales (contraseñas, llaves, secretos) expuestas en el código fuente.

¿Qué queremos decir con credenciales expuestas?

Básicamente dicha vulnerabilidad se produce cuando un desarrollador expone claves secretas a personas no autorizadas como hackers o terceros.

Esto puede suceder si:

  • Se han dejado codificadas claves en el código fuente.
  • Se han guardado claves en carpetas accesibles públicamente en el servidor.
  • Se han agregado claves en registros o mensajes de error.
Ejemplo:

Supongamos que tenemos el siguiente código, en donde lo que hacemos es codificar una función que encripta un mensaje antes de enviarlo por la red.

(Se necesita instalar el paquete cryptography para ejecutar el ejemplo: pip install cryptography)

from cryptography.fernet import Fernet

def encrypt_message(message):
    encrypt_key = b'AcG35D4M8iIETaYCj0iVNSwdfOC4og-cZhQQmq6ftWc='

    fernet = Fernet(encrypt_key)

    message_encrypted = fernet.encrypt(message.encode())

    return message_encrypted

print(encrypt_message("datos sensibles"))

# output: b'gAAAAABi1vB8cGhlhZV2R_4_oaVFcNLjVrhBKSOHtJBbQ7JA9Vmw238_CroWBcloljCDNUsJrRbotbCbA5Ciy0Qet4Q9RX235Q=='

Supongamos que luego de codificar esta función y ponerla en producción, subimos los cambios a nuestro repositorio remoto. Ahora bien si por alguna razón sucede que un desarrollador malintencionado logra acceder al código fuente va a poder desencriptar los mensajes porque la clave se encuentra visible en el código.

¿Qué podemos hacer para evitar exponer claves?
  • Guardar las claves en variables de entorno del sistema.
  • Servicio de almacenamiento seguro de claves tipo AWS Secrets

Volviendo a nuestro ejemplo podríamos modificarlo de la siguiente forma:

...
import os

def encrypt_message(message):
    encrypt_key = os.environ['ENCRYPT_KEY']
...

De esta forma si nuestro código fuente cae en manos equivocadas no van a poder acceder a nuestra clave a menos que puedan acceder a la instancia donde se está ejecutando nuestro programa.

Algunas referencias útiles para profundizar:

Share on: TwitterFacebookEmail

Comments

comments powered by Disqus

Published

Category

Security

Tags

Contact