miniOrange SAML WordPress Plugin: Two Auth-Bypass Vulnerabilities, CISA Warns Attacks Are In the Wild
WordPress miniOrange SAML 2.0 SSO plugin: two auth-bypass bugs, CVE-2026-61979 and CVE-2026-15981. Combined, an attacker can log in as any admin with no credentials. DigitalOcean Security confirmed in-the-wild exploitation.
Incident Overview
In August 2026, one of the most widely deployed SAML 2.0 SSO plugins in the WordPress ecosystem — Xecurify miniOrange SAML 2.0 Single Sign-On — was disclosed with two critical auth-bypass bugs: CVE-2026-61979 (CVSS 8.1) and CVE-2026-15981 (CVSS 9.8). Both are CWE-287/295. Root cause: `mo_saml_validate_signature()` treats OpenSSL return values too loosely. OpenSSL returns 0 on verify failure; that was wrongly treated as success (true). DigitalOcean Security found anomalous admin session requests in their own control-plane logs, confirmed both bugs are under active in-the-wild exploitation, and multiple IP ranges are opportunistically scanning internet-exposed WordPress sites.
The free miniOrange SAML build was fixed in earlier versions. A substantial fraction of paid users still have not upgraded. Open-source Patchstack and commercial defenders have publicly released detection PoCs, lowering the exploit bar further.
Technical Details
CVE-2026-61979: Signature Algorithm Confusion
miniOrange has an algorithm-confusion defect when verifying SAML response signatures. An attacker tampers with the signature algorithm identifier in the SAML Response and attaches a crafted SignInfo, bypassing the intended strict algorithm allowlist. Historically miniOrange maintained the SAML algorithm allowlist poorly. An attacker can specify an empty or weak algorithm; the plugin takes a loose path and accepts the signature.
CVE-2026-15981: `openssl_verify()` Boolean Check Error
Critical function, simplified:
$result = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA256);
if ($result) {
// Verification passed: allow user login
}
if ($result === 1) {
// The true semantic branch for "passed and signature valid"
}
// Default branch has no exception handling
`openssl_verify()` returns 0 on verification failure, -1 on invalid signature, 1 on success. Any return value was loosely treated as true. Attacker crafts a well-formed SAMLResponse with a bad signature. `$result` is -1 or 0. The loose condition still holds. The verifier returns success. Login is allowed.
Chained Path
- Attacker enumerates whether the target has miniOrange SAML SSO enabled (public docs and default config)
- Crafts a SAMLResponse with a malformed signature-algorithm id plus a well-formed but wrongly signed assertion
- Submits it to `/?option=mosaml_metadata&action=validate` or `/wp-login.php?SAMLRequest=...`
- If NameID is configured (e.g. email), the SAML engine binds that field to a local user. Attacker gets that user's session. If the field maps to an admin, attacker gets wp-admin.
- Post-compromise: upload a malicious plugin with admin, edit theme `function.php`, inject a PHP WebShell, persist via standalone Redis or cron across restarts
Impact Assessment
Combined CVSS puts this at internet-scale high severity:
- Exploit bar: very low. Patchstack and others published full PoCs. No WordPress account. No modern crypto skill required.
- Preconditions: HTTP(S) reachability to the miniOrange SAML endpoint. No auth. No user interaction.
- Blast radius: miniOrange SAML is heavily deployed in enterprise SSO, education, government. Compromise yields mass account takeover and a lateral foothold.
- Follow-on: hijacked admin can publish phishing content, plant SEO spam, push malicious updates, inject e-skimming scripts. Tightly coupled to supply-chain attacks and ransomware drop.
- Compliance: PCI DSS 4.0 strong auth (8.2.1), NYDFS 23 NYCRR 500 (500.12 MFA) violations; IR and notification duties fire.
Remediation
- Upgrade now: miniOrange SAML SSO to 17.0.6 or later (CVE-2026-61979 needs ≥17.0.5; CVE-2026-15981 needs ≥17.0.6). After upgrade, force-audit all admin sessions and unknown-IP logins.
- Emergency mitigation: WAF-block suspicious SAMLResponse payloads (`SAMLResponse=` with no `Signature`, abnormal `SigAlg`). At the reverse proxy, temporarily block `/?option=mosaml_metadata*` and `/wp-login.php?*SAML*`.
- Session wipe: revoke all admin sessions, reset high-privilege passwords, require hardware MFA for all admins (FIDO2/WebAuthn first).
- Third-party monitoring: enable Wordfence, Huntress, Sucuri or equivalent WordPress security scanners. Ship SAML-endpoint access logs to SIEM. Alert on signature-failure bursts and same-IP multi-target scans.
- Compliance notification: GDPR, CCPA, HIPAA notification duties. Sync confirmed attack surface and actions taken with regulators, partners, customers.
- Supply-chain governance: SBOM every third-party plugin; record patch version and CVE mapping. Put miniOrange and other high-sensitivity SAML plugins on a quarterly review list.
- Rollback: keep 7-day DB and file snapshots for fast rollback to a trusted baseline after confirmed compromise. Rehearse the admin-session-hijack playbook.
Detection Rules
# WordPress access logs: concentrated burst of anomalous signature failures at the SAML entry point
awk '$7 ~ /SAML/' /var/log/nginx/access.log | grep -E 'SigAlg.*http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig-more' | awk '{print $1}' | sort | uniq -c | sort -rn | head
# Database: anomalous admin session generation
SELECT user_id, IP, FROM_UNIXTIME(issued) FROM wp_usermeta
WHERE meta_key='session_tokens' AND issued > UNIX_TIMESTAMP(NOW() - INTERVAL 1 HOUR);
# File drop: uploaded/modified theme/plugin files
find /var/www/html/wp-content -name '*.php' -newer /var/www/html/wp-config.php -mmin -60
References
- Aviatrix: miniOrange SAML WordPress admin bypass
- Patchstack: one slug, seven versions, one universal bypass
- NVD: CVE-2026-61979 details
- CVE: CVE-2026-15981 details