Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-21239 — Exploit para CVE-2021-21239: bypass de validación de firma SAML en pysaml2/Redash. Forja respuestas SAML con claves públicas incrustadas para suplantar usuarios y escalar privilegios mediante aprovisionamiento JIT. | Kitploit
Herramientas/GitHubGitHub/illera88/cve-2021-21239
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAutenticaciónAprendizaje y Educación
GitHubillera88/cve-2021-21239

CVE-2021-21239

Exploit para CVE-2021-21239: bypass de validación de firma SAML en pysaml2/Redash. Forja respuestas SAML con claves públicas incrustadas para suplantar usuarios y escalar privilegios mediante aprovisionamiento JIT.

Ver Repositorio
hace 11 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Informe Técnico sobre CVE-2021-21239: Vulnerabilidad de Autenticación SAML en Redash

Introducción a SAML

Security Assertion Markup Language (SAML) es un estándar abierto para intercambiar datos de autenticación y autorización entre partes en un sistema de identidad federada. Permite el inicio de sesión único (SSO) entre dominios. Los componentes clave son:

  • Proveedor de Identidad (IdP): El servicio que autentica al usuario y emite una aserción SAML (por ejemplo, el IdP SAML de Google). Firma la aserción con su clave privada para garantizar integridad y autenticidad.
  • Proveedor de Servicio (SP): La aplicación que depende del IdP para la autenticación (por ejemplo, Redash). El SP verifica la firma usando la clave pública o certificado del IdP para confiar en la aserción.

En un flujo SAML típico, el SP redirige al usuario al IdP para la autenticación. El IdP devuelve una respuesta SAML firmada que contiene aserciones sobre el usuario (por ejemplo, correo electrónico, nombre). El SP valida la firma y aprovisiona o inicia sesión del usuario.

Explicación de la Vulnerabilidad

CVE-2021-21239 es una vulnerabilidad de omisión de validación de firma en la librería pysaml2 (versiones <6.5.0), utilizada por Redash <=10.1.0 para SSO SAML. A alto nivel, permite a un atacante falsificar una respuesta SAML con una clave pública incrustada arbitraria, posibilitando la suplantación de usuarios y la escalada de privilegios mediante aprovisionamiento just-in-time (JIT).

La vulnerabilidad radica en cómo pysaml2 invoca a xmlsec1 para verificar firmas SAML. Xmlsec1, por defecto, prefiere las claves públicas incrustadas en <ds:KeyInfo> de la respuesta SAML sobre el certificado del IdP configurado. Un atacante puede crear una respuesta SAML con un par de claves RSA autogenerado, incrustar la clave pública en <ds:RSAKeyValue> y firmar la aserción con la clave privada. Dado que pysaml2 no restringe a xmlsec1 para que use solo el certificado de confianza del IdP, la firma falsificada se considera válida, permitiendo al atacante iniciar sesión como cualquier usuario (por ejemplo, admin) y obtener los máximos privilegios.

A nivel de código, la vulnerabilidad existe en sigver.py de pysaml2 (función check_signature). La lista de comandos de xmlsec1 carece de la opción --enabled-key-data raw-x509-cert, lo que permite a xmlsec1 usar claves incrustadas no confiables:

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
]

Esto permite ataques donde el atacante modifica el correo electrónico en <saml:NameID> para suplantar a cualquier usuario, aprovechando el aprovisionamiento JIT.

Configuración para Probar el Exploit

Para probar el exploit, se levanta una instancia local de Redash (v10.1.0 o anterior) usando Docker Compose. La configuración implica configurar SSO SAML con el IdP de Google:

  • Instalar Redash mediante Docker Compose: Clonar el repositorio de Redash, hacer checkout de la etiqueta vulnerable (por ejemplo, v10.1.0) y ejecutar docker-compose up.
  • Configurar SAML en las variables de entorno de Redash (por ejemplo, REDASH_SAML_LOGIN_ENABLED=true, REDASH_SAML_METADATA_URL=... del IdP de Google).
  • Usar el IdP SAML de Google para pruebas: Configurar una aplicación SAML de Google Workspace con la URL de callback de Redash.
  • Exponer la instancia local de Redash al IdP de Google usando Ngrok.

Esta configuración permite probar la respuesta SAML falsificada enviada mediante un script de Python o Burp Suite, verificando la escalada de privilegios.

Explicación Técnica y Corrección

La vulnerabilidad surge porque la invocación de xmlsec1 por parte de pysaml2 permite usar claves incrustadas para la verificación, omitiendo el certificado de confianza del IdP. Un atacante genera un par de claves RSA, crea una respuesta SAML con la clave pública en <ds:RSAKeyValue>, modifica atributos (por ejemplo, correo electrónico al del admin) y firma la aserción. Xmlsec1 verifica usando la clave incrustada, considerándola válida. La corrección se implementó en pysaml2 v6.5.0 (commit inicial el 17 de enero de 2021) en src/saml2/sigver.py. La lista de comandos de xmlsec1 se actualizó para incluir --enabled-key-data raw-x509-cert, restringiendo la verificación al certificado del IdP configurado:

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
]

Esto impone la validación de la cadena de confianza, evitando el uso de claves incrustadas. Redash corrigió esto actualizando pysaml2 en versiones posteriores (por ejemplo, v11+). Las versiones vulnerables no usaban --insecure; el error era la opción de restricción faltante.

Código del Exploit

El código del exploit se implementa en el archivo cve-2021-21239.py. Este script de Python automatiza el proceso de falsificación de una respuesta SAML para explotar CVE-2021-21239 en Redash <=10.1.0, permitiendo la suplantación de usuarios y la escalada de privilegios mediante aprovisionamiento JIT. El exploit está dirigido al IdP SAML de Google Workspace, pero el ataque se ha probado con otros IdP (keycloak). El script realiza los siguientes pasos:

  1. Analiza argumentos de línea de comandos: Acepta entradas para la plantilla SAML, URL de Redash, ID del IdP, ID de aserción, correo electrónico, nombre y apellido, con valores predeterminados para pruebas (por ejemplo, email="[email protected]").
  2. Resuelve el ID del IdP: Obtiene el idpid del endpoint de inicio de sesión SAML de Redash si no se proporciona, asegurando compatibilidad con la configuración del objetivo.
  3. Rellena la plantilla XML: Usa una plantilla (SAMLResponseTempalte.xml) con marcadores de posición para correo electrónico, nombres, marcas de tiempo e ID de aserción. Se generan marcas de tiempo UTC dinámicas con una ventana de validez de 5 minutos para superar la validación de Redash.
  4. Genera un par de claves RSA: Crea una clave privada RSA de 2048 bits para firmar la aserción SAML.
  5. Firma el XML: Usa la librería xmlsec de Python para firmar el elemento <saml:Assertion> con RSA-SHA256, incrustando la clave pública en <ds:RSAKeyValue> para explotar la vulnerabilidad.
  6. Verifica la firma: Valida la firma, asegurando que la respuesta SAML falsificada sea estructuralmente válida.
  7. Envía la SAMLResponse: Codifica en Base64 y URL el XML firmado, enviándolo al endpoint de callback SAML de Redash (/saml/callback?org_slug=default).
  8. Extrae la cookie de sesión: Obtiene la cookie de sesión de la respuesta, permitiendo al atacante suplantar al usuario objetivo.

Dificultades en la Explotación y Cómo Sortearlas

Explotar CVE-2021-21239 requirió crear una respuesta SAML falsificada que Redash aceptara mediante aprovisionamiento JIT. Dificultades clave y soluciones:

  • Omisión de validación de firma: Pysaml2 permitía claves incrustadas, sorteado generando un par de claves RSA e incrustando la clave pública en <ds:RSAKeyValue>, firmando con la clave privada.
  • Desafíos de firma XML: Los intentos iniciales con el binario xmlsec1 funcionaron, pero la librería xmlsec de Python causaba discrepancias de digest debido a problemas de espacios en blanco/canonicalización. Se solucionó serializando el XML en una sola línea (etree.tostring(..., pretty_print=False)) antes de firmar.
  • Validación de marcas de tiempo: Un NotOnOrAfter muy futuro causaba rechazo; se solucionó usando marcas de tiempo UTC dinámicas con una validez de 5 minutos.
  • Discrepancia de encabezados HTTP: La librería Requests codificaba doblemente SAMLResponse, causando fallos de análisis; se solucionó enviando datos de formulario sin procesar.
  • Configuración de Redash: Redash local requería Ngrok para el IdP de Google; se solucionó tunelizando con Ngrok y configurando SAML adecuadamente.

Estos desafíos resaltan la necesidad de una manipulación XML precisa y una configuración de entorno adecuada para explotar la vulnerabilidad de manera efectiva. El código de exploit proporcionado demuestra esto exitosamente, falsificando una respuesta SAML para suplantar usuarios y obtener acceso.

Descargar herramienta
  • Lista usuarios: Obtiene la lista de usuarios de Redash con sus membresías de grupo. Esto permite identificar y atacar a usuarios administradores.