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-2021-21239 | Kitploit
Ferramentas/GitHubGitHub/illera88/cve-2021-21239
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAutenticaçãoAprendizado e Educação
GitHubillera88/cve-2021-21239

CVE-2021-21239

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

Relatório Técnico sobre CVE-2021-21239: Vulnerabilidade de Autenticação SAML no Redash

Introdução ao SAML

Security Assertion Markup Language (SAML) é um padrão aberto para troca de dados de autenticação e autorização entre partes em um sistema de identidade federada. Ele permite o single sign-on (SSO) entre domínios. Os principais componentes são:

  • Provedor de Identidade (IdP): O serviço que autentica o usuário e emite uma asserção SAML (ex.: IdP SAML do Google). Ele assina a asserção com sua chave privada para garantir integridade e autenticidade.
  • Provedor de Serviço (SP): O aplicativo que depende do IdP para autenticação (ex.: Redash). O SP verifica a assinatura usando a chave pública ou certificado do IdP para confiar na asserção.

Em um fluxo SAML típico, o SP redireciona o usuário para o IdP para autenticação. O IdP retorna uma resposta SAML assinada contendo asserções sobre o usuário (ex.: e-mail, nome). O SP valida a assinatura e provisiona ou autentica o usuário.

Explicação da Vulnerabilidade

CVE-2021-21239 é uma vulnerabilidade de bypass na validação de assinaturas na biblioteca pysaml2 (versões <6.5.0), usada pelo Redash <=10.1.0 para SAML SSO. Em um nível alto, ela permite que um atacante forje uma resposta SAML com uma chave pública incorporada arbitrária, possibilitando a suplantação de usuários e escalonamento de privilégios por meio do provisionamento just-in-time (JIT).

A vulnerabilidade decorre de como o pysaml2 invoca o xmlsec1 para verificar assinaturas SAML. O Xmlsec1, por padrão, prefere chaves públicas incorporadas no <ds:KeyInfo> da resposta SAML em vez do certificado configurado do IdP. Um atacante pode criar uma resposta SAML com um par de chaves RSA gerado por ele, incorporar a chave pública em <ds:RSAKeyValue> e assinar a asserção com a chave privada. Como o pysaml2 não restringe o xmlsec1 a utilizar apenas o certificado confiável do IdP, a assinatura forjada é considerada válida, permitindo que o atacante entre como qualquer usuário (ex.: admin) e obtenha os maiores privilégios.

No nível de código, a vulnerabilidade existe no sigver.py do pysaml2 (função check_signature). A lista de comandos do xmlsec1 não inclui a opção --enabled-key-data raw-x509-cert, permitindo que o xmlsec1 use chaves incorporadas não confiáveis:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

Isso permite ataques em que o atacante modifica o e-mail em <saml:NameID> para suplantar qualquer usuário, aproveitando o provisionamento JIT.

Configuração para Testar o Exploit

Para testar o exploit, uma instância local do Redash (v10.1.0 ou anterior) é iniciada usando Docker Compose. A configuração envolve definir o SAML SSO com o IdP do Google:

  • Instalar o Redash via Docker Compose: Clonar o repositório do Redash, fazer checkout da tag vulnerável (ex.: v10.1.0) e executar docker-compose up.
  • Configurar o SAML nas variáveis de ambiente do Redash (ex.: REDASH_SAML_LOGIN_ENABLED=true, REDASH_SAML_METADATA_URL=... do IdP do Google).
  • Usar o IdP SAML do Google para testes: Configurar um aplicativo SAML do Google Workspace com a URL de callback do Redash.
  • Expor a instância local do Redash ao IdP do Google usando Ngrok.

Essa configuração permite testar a resposta SAML forjada enviada por meio de um script Python ou Burp Suite, verificando o escalonamento de privilégios.

Explicação Técnica e Correção

A vulnerabilidade surge porque a invocação do xmlsec1 pelo pysaml2 permite que chaves incorporadas sejam usadas para verificação, contornando o certificado confiável do IdP. Um atacante gera um par de chaves RSA, cria uma resposta SAML com a chave pública em <ds:RSAKeyValue>, modifica atributos (ex.: e-mail para o do admin) e assina a asserção. O Xmlsec1 verifica usando a chave incorporada, considerando-a válida. A correção foi implementada no pysaml2 v6.5.0 (commit inicial em 17 de janeiro de 2021) em src/saml2/sigver.py. A lista de comandos do xmlsec1 foi atualizada para incluir --enabled-key-data raw-x509-cert, restringindo a verificação ao certificado configurado do IdP:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--enabled-key-data', 'raw-x509-cert',
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

Isso impõe a validação da cadeia de confiança, impedindo o uso de chaves incorporadas. O Redash corrigiu isso atualizando o pysaml2 em versões posteriores (ex.: v11+). As versões vulneráveis não usavam --insecure; o bug era a opção de restrição ausente.

Código do Exploit

O código do exploit está implementado no cve-2021-21239.py. Este script Python automatiza o processo de forjar uma resposta SAML para explorar a CVE-2021-21239 no Redash <=10.1.0, permitindo suplantação de usuários e escalonamento de privilégios via provisionamento JIT. O exploit visa o IdP SAML do Google Workspace, mas o ataque foi testado com outros IdPs (keycloak). O script executa as seguintes etapas:

  1. Analisa Argumentos de Linha de Comando: Aceita entradas para o arquivo de template SAML, URL do Redash, ID do IdP, ID da asserção, e-mail, primeiro nome e último nome, com padrões para teste (ex.: email="[email protected]").
  2. Resolve o ID do IdP: Obtém o idpid do endpoint de login SAML do Redash se não for fornecido, garantindo compatibilidade com a configuração do alvo.
  3. Preenche o Template XML: Usa um template (SAMLResponseTempalte.xml) com espaços reservados para e-mail, nomes, carimbos de data/hora e ID da asserção. Carimbos de data/hora UTC dinâmicos são gerados com uma janela de validade de 5 minutos para passar na validação do Redash.
  4. Gera Par de Chaves RSA: Cria uma chave privada RSA de 2048 bits para assinar a asserção SAML.
  5. Assina o XML: Usa a biblioteca Python xmlsec para assinar o elemento <saml:Assertion> com RSA-SHA256, incorporando a chave pública em <ds:RSAKeyValue> para explorar a vulnerabilidade.
  6. Verifica a Assinatura: Valida a assinatura, garantindo que a resposta SAML forjada seja estruturalmente válida.
  7. Envia a SAMLResponse: Codifica o XML assinado em Base64 e URL, enviando-o para o endpoint de callback SAML do Redash (/saml/callback?org_slug=default).
  8. Extrai o Cookie de Sessão: Recupera o cookie de sessão da resposta, permitindo que o atacante se passe pelo usuário alvo.
  9. Lista Usuários: Obtém a lista de usuários do Redash com as associações de grupo do usuário. Isso permite identificar e mirar usuários administradores.

Dificuldades na Exploração e Como Contorná-las

Explorar a CVE-2021-21239 exigiu forjar uma resposta SAML que o Redash aceitasse via provisionamento JIT. Principais dificuldades e contornos:

  • Bypass da Validação de Assinatura: O pysaml2 permitia chaves incorporadas, contornado ao gerar um par de chaves RSA e incorporar a chave pública em <ds:RSAKeyValue>, assinando com a chave privada.
  • Desafios com Assinatura XML: Tentativas iniciais com o binário xmlsec1 funcionaram, mas a biblioteca Python xmlsec causava incompatibilidades de digest devido a problemas de espaços em branco/canonicalização. Contornado ao serializar o XML em uma única linha (etree.tostring(..., pretty_print=False)) antes de assinar.
  • Validação de Carimbo de Data/Hora: NotOnOrAfter muito no futuro causava rejeição; contornado usando carimbos de data/hora UTC dinâmicos com validade de 5 minutos.
  • Incompatibilidade de Cabeçalhos HTTP: A biblioteca Requests codificava SAMLResponse duas vezes, causando falhas de parsing; contornado enviando dados de formulário brutos.
  • Configuração do Redash: O Redash local exigia Ngrok para o IdP do Google; contornado com túnel via Ngrok e configurando o SAML adequadamente.

Esses desafios destacam a necessidade de manipulação precisa de XML e configuração de ambiente para explorar a vulnerabilidade com eficácia. O código do exploit fornecido demonstra isso com sucesso, forjando uma resposta SAML para suplantar usuários e obter acesso.

Baixar ferramenta