
Una vulnerabilidad puede permitir que un atacante adivine el token secreto de modo de desarrollo generado automáticamente.
Una vulnerabilidad puede permitir a un atacante adivinar el token secreto de modo de desarrollo generado automáticamente.
Ruby-on-Rails cuando se ejecuta en modo de desarrollo. En modo de desarrollo, es posible que un atacante adivine la clave utilizada para proteger las sesiones.
Rails utiliza 3 entornos (development, test, production), cuando una aplicación utiliza el modo de desarrollo puedes adivinar el token secreto y descifrar la sesión cifrada.
La clave utilizada para proteger la sesión se deriva del nombre de la aplicación.
Ejemplo:
rails new Jakom
Jakom: Nombre de la aplicación.
Por esto podemos adivinar que la clave es la salida del método de generación:
PKDF2_HMAC_SHA1[ MD5 [ APPNAME + "::Application" ] , salt: "authenticated encrypted cookie" , iterations: 1000 , key's length: 32 ]
Como podemos ver aquí:
key = pbkdf2_hmac("sha1", md5_name.encode("utf-8"), "authenticated encrypted cookie".encode("utf-8"), 1000, 32)
En Rails, las sesiones se cifran con AES-265-GCM; si tienes la clave, puedes descifrar/cifrar sesiones.
Lo último que necesitarás es el formato de la sesión:
BASE64 [ DATA ] -- BASE64 [ IV ] -- BASE64 [ AUTH_TAG ]
Como podemos ver aquí:
data = binascii.hexlify(base64.b64decode(base64_data.split("--")[0])).decode("utf-8")
iv = binascii.hexlify(base64.b64decode(base64_data.split("--")[1])).decode("utf-8")
tag = binascii.hexlify(base64.b64decode(base64_data.split("--")[2])).decode("utf-8")
La primera parte de la cookie de sesión son los datos cifrados, la segunda parte es el IV, la tercera parte es la etiqueta GCM (Authentication Tag).
Con esa información podemos descifrar nuestras sesiones directamente:

