Contexte

Nous avons une application Moodle utilisant le plugin SAML2 de Catalyst (SP) pour authentifier des utilisateurs auprès d'un IdP ADFS. Le SP et l'IdP se sont échangés leur métadata XML contenant les clés publiques à utiliser pour signer et chiffrer les messages SAML échangés. Lorsque l'IdP retourne au SP une réponse SAML, l'assertion contenant les revendications (par exemple des attributs utilisateurs) est donc chiffrée et il est alors à priori impossible de les afficher pour résoudre un éventuel problème de fonctionnement SAML. Consulter les logs côté ADFS (journaux des événements) ou côté Moodle (/tmp/simplesamlphp.log) ne semblent pas aider beaucoup.

Solution

saml

Les échanges SAML entre IdP et SP ne se font pas directement mais se font en passant par le navigateur du client lors de redirections. Il est donc possible avec un plugin Chrome ou Firefox de tracer le trafic SAML entre IdP et SP. En extrayant les assertions chiffrées par l'IdP avec la clé publique du SP, il devient possible de les déchiffrer avec la clé privée correspondante du SP. Dans notre exemple, nous utiliserons des outils en ligne pour effectuer ces tâches et il va de soi qu'il est fortement déconseillé d'utiliser une clé privée de production sur ces sites en ligne.

Procédure

Installer l'extension SAML Tracer

Aller sur la page de l'extension SAML Tracer et procéder à l'installation. On peut en fait installer n'importe quel autre traceur SAML, l'essentiel étant de pouvoir lire les assertions.

Récupérer la clé privée du plugin SAML2

  1. Se connecter en tant qu'administrateur à l'applicaton Moodle et aller dans :
    < Administration du site / Plugins / Authentification / SAML2 >

  2. Aller à la rubrique "Mot de passe de la clé de certificat privée", cliquer sur l'oeil pour visualiser la clé et copier la clé

  3. Se connecter ensuite en SSH sur le serveur Moodle

  4. Aller dans le répertoire /var/moodle/data/saml2 et afficher le fichier .pem contenant la clé privée chiffrée. Le contenu doit commencer par la chaîne suivante :
    -----BEGIN ENCRYPTED PRIVATE KEY-----

  5. Déchiffrer la clé privée en tapant la commande suivante et en saisissant le mot de passe récupérée à l'étape 2 :
    # openssl rsa -in <encrypted_pk.pem> -out <decrypted_pk.key> 
    Enter pass phrase for encrypted_pk.pem: <password>
    writing RSA key
  6. Le fichier .key généré contenant la clé privée déchiffrée doit alors commencer par la chaîne suivante :
    -----BEGIN RSA PRIVATE KEY-----

Capturer le trafic SAML à déboguer

  1. Lancer le plugin SAML Tracer

  2. Effectuer un opération d'authentification SSO dans l'application Moodle. Le plugin doit alors loguer le trafic SAML

  3. Repérer la réponse SAML de l'IdP au SP qui doit commencer par la chaîne suivante :
    <samlp:Response ID="...

  4. On constate que certaines partie du bloc XML sont chiffrées. Copier tout le bloc XML

Déchiffrer l'assertion SAML

  1. Aller sur la page en ligne suivante https://www.samltool.com/decrypt.php
  2. Coller le bloc XML dans le champ "Encrypted XML" et la clé privée dans le champ "Private Key", puis cliquer sur Decrypt XML

  3. Dans le champ "Decrypted XML", copier le texte généré et aller sur la page en ligne https://codebeautify.org/xmlviewer
  4. Coller le texte dans le panneau de gauche et consulter le XML mis en forme avec les assertions déchiffrées à droite

Alternative

Il existe une alternative encore plus simple si l'on a accès à la configuration de la partie de confiance sur le serveur ADFS. Pour cela :

  1. dans le composant de gestion ADFS, double-cliquer sur la partie de confiance et aller dans l'onglet "chiffrement"
  2. s'assurer que le certificat de chiffrement est installé dans le magasin local de certificats ou bien procéder à une exportation en allant sur < Afficher / Onglet Détails / Copier dans un fichier >
  3. dans l'onglet "chiffrement", on peut alors supprimer le certificat ce qui aura pour effet de désactiver le chiffrement. Les attributs apparaitront alors en clair dans SAML Tracer
  4. pour rétablir le chiffrement, cliquer sur "Parcourir" pour réinstaller le certificat

Liens

https://marco.maranao.ca/articles/how-decrypt-rsa-private-key-using-openssl
https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-How-to-decrypt-a-SAML-assertion-or-error-message/ta-p/1710336
https://www.samltool.com/decrypt.php

 

 

Ajouter un commentaire

Joomla templates by a4joomla