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 — Exploit para CVE-2021-21239: bypass de validação de assinatura SAML em pysaml2/Redash. Forja respostas SAML com chaves públicas incorporadas para personificar usuários e escalar privilégios via provisionamento JIT. | 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

Exploit para CVE-2021-21239: bypass de validação de assinatura SAML em pysaml2/Redash. Forja respostas SAML com chaves públicas incorporadas para personificar usuários e escalar privilégios via provisionamento JIT.

Ver Repositório
há 0 anosAinda 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 , por padrão, prefere chaves públicas incorporadas no 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 e assinar a asserção com a chave privada. Como o pysaml2 não restringe o 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.

Xmlsec1
<ds:KeyInfo>
<ds:RSAKeyValue>
xmlsec1

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