Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
keycloak-saml-redirect-param-split — PoC en boucle locale pour une faille du broker SAML de Keycloak 26.8.1 : un nom SAMLResponse dupliqué et encodé en pourcentage contourne la vérification de signature de redirection, permettant de se connecter en tant qu'autre utilisateur. | Kitploit
Outils/GitHubGitHub/abraxas/keycloak-saml-redirect-param-split
Analyse des VulnérabilitésExploitationExploitation d'Applications WebGestion des Identités et des Accès (IAM)AuthentificationLabs et Pratique
GitHubabraxas/keycloak-saml-redirect-param-split

keycloak-saml-redirect-param-split

PoC en boucle locale pour une faille du broker SAML de Keycloak 26.8.1 : un nom SAMLResponse dupliqué et encodé en pourcentage contourne la vérification de signature de redirection, permettant de se connecter en tant qu'autre utilisateur.

Voir le dépôt
11il y a 1 jourPas 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

Abraxas Labs - keycloak-saml-redirect-param-split

keycloak-saml-redirect-param-split

Une personne sans compte Keycloak peut terminer une connexion SAML d'entreprise en se faisant passer pour quelqu'un d'autre. Elle se connecte une fois auprès du fournisseur d'identité amont, conserve cette redirection signée et place un second document SAML devant celle-ci sous un nom encodé en pourcentage. Keycloak vérifie la signature authentique puis la connecte sous le nom figurant dans le document falsifié. Cela nécessite un broker SAML qui signe les réponses HTTP-Redirect, avec la validation de signature activée et les signatures d'assertion désactivées, ce que configure l'import de métadonnées. Il ne s'agit pas du découpage par point-virgule de l'issue #53354.

Classe : résidu OAuth Portée : distante (non authentifié auprès de Keycloak ; nécessite un broker SAML signant les redirections)

Keycloak 26.8.1 (24ed1dad) - Red Hat

IDpas encore de CVE
Classerésidu OAuth
Portéedistante (aucun compte Keycloak ; nécessite une véritable signature HTTP-Redirect de l'IdP)
CWECWE-287 / CWE-347 / CWE-116
CVSSÉlevé : 7.4 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
ProduitKeycloak
Affecté26.8.1 (24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b) ; Quarkus 3.40.1 ; image quay.io/keycloak/keycloak:26.8.1
Authaucune sur Keycloak. Nécessite un broker de fournisseur d'identité SAML avec validateSignature=true et wantAssertionsSigned absent ou à false.
LicenceGNU Affero GPL v3.0
Lab127.0.0.1:18084 uniquement

Ce qu'un attaquant peut faire

Nécessite le NameID de la victime (généralement un e-mail) et une véritable redirection HTTP-Redirect signée provenant de cet IdP. Ne nécessite pas de mot de passe Keycloak. Ne nécessite pas de boîte mail. Un IdP en POST uniquement ne fournit pas cette signature. L'ACS GET reste monté même lorsque l'import de métadonnées préfère POST.

PrivilègeMéthode / cibleReconnaissance / intégrité / disponibilitéProuvé en lab ou déduit
Lier un document SAML falsifié tandis que la signature authentique est toujours vérifiéeACS du broker en GET avec SAML%52esponse=<falsifié> avant le SAMLResponse signéIntégrité (authn)Prouvé en lab. E-mail de contrôle [email protected]. E-mail d'attaque [email protected]
Créer l'utilisateur victime via le first-broker-logincallback.authenticated sur le NameID falsifiéIntégrité (création de compte)Prouvé en lab. Nombre de victimes 0 avant la requête découpée, 1 après
Session en tant qu'utilisateur brokerisé existant, y compris un administrateur qui utilise le même IdPMême ACS, NameID de cet utilisateurIntégrité (prise de contrôle de compte)Déduit. Le lab a créé la victime à la première connexion
Conserver RelayState et la session d'authentificationRelayState reste la valeur signéeIntégritéSource. La signature couvre RelayState
Contrôle négatifRedirection signée authentique, sans paramètre supplémentaires.o.Prouvé en lab. Le contrôle se termine avec l'e-mail de l'attaquant

Restent fermés sur ce résidu

AxeMéthode / ciblePourquoi c'est fermé
IntégritéDécoupage par point-virgule SAMLResponse=...;SAMLResponse=...issue #53354. quarkus.http.use-semicolon-as-query-param-delimiter=false
IntégritéAssertion non signée lorsque wantAssertionsSigned=truehandleLoginResponse exige alors une signature d'assertion
IntégritéPas de broker SAML, ou IdP en POST uniquement sans signature de redirectionL'attaquant n'obtient jamais SigAlg + Signature sur un GET
IntégritéRCE sur l'hôte, Admin REST non authentifiéHors classe
IntégritéFormulaire de nom VERIFY_PROFILE par défautProuvé en lab comme étape d'achèvement, non comme réfutation. Le formulaire contient déjà l'e-mail brokerisé

Comment je l'ai trouvé

J'ai épinglé Keycloak 26.8.1. RESTEasy Reactive récupère @QueryParam("SAMLResponse") depuis Vert.x, qui décode en pourcentage les noms de paramètres de requête, de sorte que SAML%52esponse se réduit à SAMLResponse et la première valeur l'emporte. verifyRedirectSignature reconstruit la chaîne signée à partir de getQueryParameters(false) sur la requête brute, où ce nom reste une clé différente.

Fausses pistes déjà consignées : traiter #53354 comme ce résidu (nom encodé en pourcentage, pas point-virgule) ; suivre les 302 de l'ACS dans le client de labo et perdre AUTH_SESSION_ID ; lire des firstName/lastName vides sur VERIFY_PROFILE comme un échec (l'email est déjà le NameID fédéré) ; un reverse shell. Du théâtre.

Labo

Python 3.11+ avec cryptography. Docker requis.

python3 keycloak-saml-redirect-param-split-Abraxas-Labs.py

ou :

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:18084. Image quay.io/keycloak/keycloak:26.8.1. Le lanceur fait un chdir dans lab/ et exécute run.sh. L'IdP du lab est en cours de processus. Il ne communique jamais avec un véritable fournisseur d'identité.

IOC image=quay.io/keycloak/keycloak:26.8.1 label-version=26.8.1
IOC serverinfo-version=26.8.1
IOC validate-signature=true want-assertions-signed=absent
IOC review-profile=DISABLED
IOC [email protected]
IOC victim-before=0
IOC [email protected]
IOC victim-after=1
SUCCESS KC-H04-SAML-REDIRECT kcs04b8n1

Le correctif

Vérifiez que le document de requête analysé par le point de terminaison est bien le même. Décodez les noms de paramètres en pourcentage avant la reconstruction de la signature, ou rejetez une requête qui contient plus d'un SAMLResponse après décodage. Activez wantAssertionsSigned pour les brokers de redirection, y compris le chemin d'importation des métadonnées.

Références

  • github.com/keycloak/keycloak tag 26.8.1 (24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b)
  • SAMLEndpoint.redirectBinding (SAMLEndpoint.java:182-183, :779-813, :896-914)
  • SamlProtocolUtils.verifyRedirectSignature (SamlProtocolUtils.java:216-249)
  • KeycloakUriInfo.getQueryParameters (KeycloakUriInfo.java:147-163)
  • À proximité (pas ce chemin) : issue #53354 découpage par point-virgule
  • CWE-287 · CWE-347 · CWE-116

Licence

GNU Affero GPL v3.0. Voir LICENSE. Laboratoire en boucle locale uniquement. Aucune garantie.

Abraxas Labs [email protected]

Veuillez créditer la CVE à Abraxas Labs.

Télécharger l’outil