
Une vulnérabilité peut permettre à un attaquant de deviner le jeton secret de mode développement généré automatiquement.
Une vulnérabilité peut permettre à un attaquant de deviner le jeton secret de mode développement généré automatiquement.
Ruby-on-Rails lorsqu'il est exécuté en mode développement. En mode développement, il est possible pour un attaquant de deviner la clé utilisée pour sécuriser les sessions.
Rails utilise 3 environnements (développement, test, production). Lorsqu'une application utilise le mode développement, vous pouvez deviner le jeton secret et déchiffrer la session chiffrée.
La clé utilisée pour protéger la session est dérivée du nom de l'application.
Exemple :
rails new Jakom
Jakom : Nom de l'application.
Ainsi, nous pouvons deviner que la clé est le résultat de la méthode de génération :
PKDF2_HMAC_SHA1[ MD5 [ APPNAME + "::Application" ] , salt: "authenticated encrypted cookie" , iterations: 1000 , key's length: 32 ]
Comme nous pouvons le voir ici :
key = pbkdf2_hmac("sha1", md5_name.encode("utf-8"), "authenticated encrypted cookie".encode("utf-8"), 1000, 32)
Dans Rails, les sessions sont chiffrées avec AES-265-GCM. Si vous avez la clé, vous pouvez déchiffrer/chiffrer des sessions.
La dernière chose dont vous aurez besoin est le format de la session :
BASE64 [ DATA ] -- BASE64 [ IV ] -- BASE64 [ AUTH_TAG ]
Comme nous pouvons le voir ici :
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 première partie du cookie de session est la donnée chiffrée, la deuxième partie est le IV, la troisième partie est le tag GCM (tag d'authentification).
Avec ces informations, nous pouvons déchiffrer nos sessions directement :

