Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-21239 | Kitploit
Outils/GitHubGitHub/illera88/cve-2021-21239
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionAuthentificationApprentissage et Éducation
GitHubillera88/cve-2021-21239

CVE-2021-21239

Voir le dépôt
il y a 11 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Rapport technique sur CVE-2021-21239 : Vulnérabilité d'authentification SAML de Redash

Introduction à SAML

Le Security Assertion Markup Language (SAML) est un standard ouvert permettant d'échanger des données d'authentification et d'autorisation entre parties dans un système d'identité fédérée. Il permet l'authentification unique (SSO) entre domaines. Les composants clés sont :

  • Fournisseur d'identité (IdP) : Le service qui authentifie l'utilisateur et émet une assertion SAML (par exemple, l'IdP SAML de Google). Il signe l'assertion avec sa clé privée pour garantir l'intégrité et l'authenticité.
  • Fournisseur de services (SP) : L'application qui s'appuie sur l'IdP pour l'authentification (par exemple, Redash). Le SP vérifie la signature à l'aide de la clé publique ou du certificat de l'IdP pour faire confiance à l'assertion.

Dans un flux SAML typique, le SP redirige l'utilisateur vers l'IdP pour l'authentification. L'IdP renvoie une réponse SAML signée contenant des assertions sur l'utilisateur (par exemple, e-mail, nom). Le SP valide la signature et provisionne ou connecte l'utilisateur.

Explication de la vulnérabilité

CVE-2021-21239 est une vulnérabilité de contournement de la validation de signature dans la bibliothèque pysaml2 (versions <6.5.0), utilisée par Redash <=10.1.0 pour le SSO SAML. À un niveau élevé, elle permet à un attaquant de falsifier une réponse SAML avec une clé publique intégrée arbitraire, permettant l'usurpation d'identité d'un utilisateur et l'élévation de privilèges via le provisionnement juste-à-temps (JIT).

La vulnérabilité provient de la façon dont pysaml2 invoque xmlsec1 pour vérifier les signatures SAML. Par défaut, Xmlsec1 privilégie les clés publiques intégrées dans <ds:KeyInfo> de la réponse SAML plutôt que le certificat IdP configuré. Un attaquant peut élaborer une réponse SAML avec une paire de clés RSA auto-générée, intégrer la clé publique dans <ds:RSAKeyValue> et signer l'assertion avec la clé privée. Étant donné que pysaml2 ne restreint pas xmlsec1 à n'utiliser que le certificat IdP de confiance, la signature falsifiée est considérée comme valide, ce qui permet à l'attaquant de se connecter en tant que n'importe quel utilisateur (par exemple, admin) et d'obtenir les plus hauts privilèges.

Au niveau du code, la vulnérabilité se trouve dans sigver.py de pysaml2 (fonction check_signature). La liste de commandes xmlsec1 ne contient pas l'option --enabled-key-data raw-x509-cert, ce qui permet à xmlsec1 d'utiliser des clés intégrées non fiables :

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
]

Cela permet des attaques où l'attaquant modifie l'e-mail dans <saml:NameID> pour usurper l'identité de n'importe quel utilisateur, en tirant parti du provisionnement JIT.

Configuration pour tester l'exploit

Pour tester l'exploit, une instance Redash locale (v10.1.0 ou antérieure) est déployée à l'aide de Docker Compose. La configuration implique la mise en place du SSO SAML avec l'IdP de Google :

  • Installer Redash via Docker Compose : Cloner le dépôt Redash, vérifier le tag vulnérable (par exemple, v10.1.0) et exécuter docker-compose up.
  • Configurer SAML dans les variables d'environnement de Redash (par exemple, REDASH_SAML_LOGIN_ENABLED=true, REDASH_SAML_METADATA_URL=... depuis l'IdP de Google).
  • Utiliser l'IdP SAML de Google pour les tests : Configurer une application SAML Google Workspace avec l'URL de callback de Redash.
  • Exposer l'instance Redash locale à l'IdP de Google à l'aide de Ngrok.

Cette configuration permet de tester la réponse SAML falsifiée envoyée via un script Python ou Burp Suite, en vérifiant l'élévation de privilèges.

Explication technique et correctif

La vulnérabilité découle du fait que l'invocation de xmlsec1 par pysaml2 permet d'utiliser des clés intégrées pour la vérification, contournant ainsi le certificat IdP de confiance. Un attaquant génère une paire de clés RSA, élabore une réponse SAML avec la clé publique dans <ds:RSAKeyValue>, modifie les attributs (par exemple, l'e-mail pour celui de l'admin) et signe l'assertion. Xmlsec1 vérifie à l'aide de la clé intégrée et la considère comme valide. Le correctif a été implémenté dans pysaml2 v6.5.0 (commit initial le 17 janvier 2021) dans src/saml2/sigver.py. La liste de commandes xmlsec1 a été mise à jour pour inclure --enabled-key-data raw-x509-cert, limitant la vérification au certificat IdP configuré :

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
]

Cela impose la validation de la chaîne de confiance, empêchant l'utilisation de clés intégrées. Redash a corrigé ce problème en mettant à niveau pysaml2 dans les versions ultérieures (par exemple, v11+). Les versions vulnérables n'utilisaient pas --insecure ; le bug était l'absence de l'option de restriction.

Code de l'exploit

Le code de l'exploit est implémenté dans cve-2021-21239.py. Ce script Python automatise le processus de falsification d'une réponse SAML pour exploiter CVE-2021-21239 dans Redash <=10.1.0, permettant l'usurpation d'identité d'un utilisateur et l'élévation de privilèges via le provisionnement JIT. L'exploit cible l'IdP SAML de Google Workspace, mais l'attaque a été testée avec d'autres IdP (keycloak). Le script effectue les étapes suivantes :

  1. Analyse les arguments de la ligne de commande : Accepte les entrées pour le fichier modèle SAML, l'URL de Redash, l'ID IdP, l'ID d'assertion, l'e-mail, le prénom et le nom, avec des valeurs par défaut pour les tests (par exemple, email="[email protected]").
  2. Résout l'ID IdP : Récupère le idpid à partir du point de terminaison de connexion SAML de Redash s'il n'est pas fourni, garantissant la compatibilité avec la configuration de la cible.
  3. Remplit le modèle XML : Utilise un modèle (SAMLResponseTempalte.xml) avec des espaces réservés pour l'e-mail, les noms, les horodatages et l'ID d'assertion. Des horodatages UTC dynamiques sont générés avec une fenêtre de validité de 5 minutes pour passer la validation de Redash.
  4. Génère une paire de clés RSA : Crée une clé privée RSA de 2048 bits pour signer l'assertion SAML.
  5. Signe le XML : Utilise la bibliothèque Python xmlsec pour signer l'élément <saml:Assertion> avec RSA-SHA256, en intégrant la clé publique dans <ds:RSAKeyValue> pour exploiter la vulnérabilité.
  6. Vérifie la signature : Valide la signature, garantissant que la réponse SAML falsifiée est structurellement valide.
  7. Envoie la SAMLResponse : Encode en Base64 et en URL le XML signé, puis l'envoie au point de terminaison de callback SAML de Redash (/saml/callback?org_slug=default).
  8. Extrait le cookie de session : Récupère le cookie de session de la réponse, permettant à l'attaquant d'usurper l'identité de l'utilisateur ciblé.

Difficultés d'exploitation et contournements

L'exploitation de CVE-2021-21239 a nécessité l'élaboration d'une réponse SAML falsifiée que Redash accepte via le provisionnement JIT. Difficultés clés et contournements :

  • Contournement de la validation de signature : Pysaml2 autorisait les clés intégrées, contourné en générant une paire de clés RSA et en intégrant la clé publique dans <ds:RSAKeyValue>, avec signature à l'aide de la clé privée.
  • Défis de signature XML : Les premières tentatives avec le binaire xmlsec1 ont fonctionné, mais la bibliothèque Python xmlsec a provoqué des incohérences de digest en raison de problèmes d'espacement/canonicalisation. Contourné en sérialisant le XML sur une seule ligne (etree.tostring(..., pretty_print=False)) avant la signature.
  • Validation de l'horodatage : Un NotOnOrAfter trop lointain provoquait le rejet ; contourné en utilisant des horodatages UTC dynamiques avec une validité de 5 minutes.
  • Inadéquation de l'en-tête HTTP : La bibliothèque Requests double-encodait SAMLResponse, provoquant des échecs d'analyse ; contourné en envoyant des données de formulaire brutes.
  • Configuration de Redash : Redash local nécessitait Ngrok pour l'IdP de Google ; contourné en créant un tunnel avec Ngrok et en configurant SAML en conséquence.

Ces difficultés soulignent la nécessité d'une manipulation précise du XML et d'une configuration d'environnement adéquate pour exploiter efficacement la vulnérabilité. Le code d'exploit fourni le démontre avec succès, en falsifiant une réponse SAML pour usurper l'identité d'utilisateurs et obtenir un accès.

Télécharger l’outil
  • Liste les utilisateurs : Récupère la liste des utilisateurs de Redash avec les appartenances aux groupes de l'utilisateur. Cela permet d'identifier et de cibler les utilisateurs admin.