The bouncer checks your forged ID because you told him to use crayons instead of UV light
CVE-2026-61979 is a signature algorithm confusion flaw in the miniOrange SAML 2.0 Single Sign On WordPress plugin (Free edition ≤ 5.4.4, Standard ≤ 17.0.5, Premium ≤ 13.0.3, and four other paid editions). The plugin reads the SignatureMethod attribute from an incoming SAMLResponse — an attacker-controlled field — rather than enforcing the algorithm configured in the IdP settings. An attacker specifies HMAC-SHA1, causing the plugin to feed the IdP's publicly known RSA X.509 certificate into PHP's hash_hmac() as a shared secret. Since the attacker knows that same certificate (it ships in IdP metadata or is embedded in the plugin config), they can compute a valid HMAC signature over a forged SAML assertion claiming any user identity, including administrator. The result: an unauthenticated, remote attacker receives a valid WordPress session cookie with full admin privileges.
The vendor tagged this HIGH 8.1 with AC:H, implying meaningful attack complexity. That rating is wrong. The public key is not a secret — it is literally published in IdP metadata and sometimes rendered in the plugin's own settings page. A working proof-of-concept is on GitHub, and Patchstack has documented active exploitation from six IPs across four countries. DigitalOcean's SOC caught a live attacker who had already obtained an admin session cookie via this flaw. Separately, the companion bug CVE-2026-15981 (OpenSSL tri-state boolean confusion, CVSS 9.8) offers an independent bypass path through the same code. The vendor's AC:H dramatically understates the real-world exploitability; this is effectively AC:L once you have the PoC and the public certificate.
5 steps from start to impact.
Identify target running miniOrange SAML SSO
/wp-content/plugins/miniorange-saml-20-single-sign-on/) or the SAML metadata endpoint (/?option=saml_metadata). Shodan/FOFA dorks for WordPress SAML endpoints or mass HTTP probing with tools like httpx can enumerate targets at scale.- Target WordPress site is publicly reachable
- miniOrange SAML SSO plugin is installed and activated
- Only ~10,000+ free-edition installs on wordpress.org; paid editions add an unknown number
- Plugin must be actively configured with a working IdP integration
Obtain the IdP's RSA public certificate
- IdP metadata endpoint is accessible, OR the certificate is embedded in plugin config
- Some IdPs may restrict metadata to authenticated clients, but this is uncommon
Craft a forged SAMLResponse with HMAC-SHA1
admin (or any target username). The SignatureMethod is set to http://www.w3.org/2000/09/xmldsig#hmac-sha1. The attacker computes the HMAC-SHA1 signature using the PEM-encoded public key as the HMAC secret. The plugin's mo_saml_cast_key() → XMLSecurityKey path in Utilities.php:246-281 and XMLSecurityKey.php:216-548 validates this signature as authentic.- Public PoC or equivalent SAML crafting capability
- Knowledge of a valid WordPress username (default:
admin)
- None — the PoC automates the entire chain
SAMLResponse with HMAC-SHA1 SignatureMethod can flag this. Wordfence has released a firewall rule.Submit forged assertion and receive admin session
/?option=saml_user_login. The plugin validates the forged HMAC signature against the public key, accepts the assertion, and issues a WordPress authentication cookie for the asserted identity. The attacker now has full wp-admin access.- ACS endpoint is reachable (it always is if the plugin is active)
- Some WAFs may block oversized or malformed POST bodies
Post-exploitation: web shell, data exfil, or lateral movement
- WordPress admin access achieved in step 4
- Hardened hosting environments (managed WordPress hosts) may restrict file writes or plugin installation
- Server-level WAFs or EDR may detect web shell deployment
The supporting signals.
| In-the-Wild Exploitation | Active. Patchstack documented scanning/exploitation from 6 IPs across Belgium, Nigeria, US, and Germany. DigitalOcean SOC blocked a live attacker who obtained an admin session cookie via the Standard edition (v16.1.9). Pattern is opportunistic mass-scanning. |
|---|---|
| Proof of Concept | Public. PoC for the free edition is available on GitHub. The Patchstack technical writeup includes full code-path analysis and two narrowly-scoped hotfix patches. |
| EPSS | 0.278% — relatively low, but this lags behind the active exploitation reality. Companion CVE-2026-15981 has EPSS 0.796% (54th percentile). |
| KEV Status | Not listed as of 2026-08-26. Likely pending; active exploitation meets CISA's inclusion criteria. |
| CVSS Vector | Vendor: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H (8.1). The AC:H is disputed — with public PoC and publicly-available signing certificate, effective complexity is Low, which would yield 9.8. |
| Affected Versions | Free ≤ 5.4.4 · Premium ≤ 13.0.3 · Standard ≤ 17.0.5 · Premium/Enterprise multisite ≤ 20.2.7 · Enterprise/All-Inclusive ≤ 26.0.2 · VIP single ≤ 32.0.7 · VIP multisite ≤ 35.0.6 |
| Fixed Versions | Free 5.4.5 · Premium 13.0.4 · Standard 17.0.6 · Premium/Enterprise multisite 20.2.8 · Enterprise/All-Inclusive 26.0.3 · VIP single 32.0.8 · VIP multisite 35.0.7 |
| Installed Base | ~10,000+ active installs (free edition on wordpress.org). Paid editions are not counted in that figure. Total exposure is unknown but the SAML SSO use case implies enterprise WordPress deployments. |
| Disclosure Timeline | July 2026: initial disclosure and patches for free edition. August 13: CVE-2026-61979 published. August 16: DigitalOcean detects live exploitation. August 25: Patchstack publishes full technical writeup covering all 7 editions. |
| Reporting Researcher | Discovered by DigitalOcean security team; full technical analysis by Patchstack (Dave Jong's team). Coordinated with miniOrange/Xecurify. |
noisgate verdict.
The single most decisive factor is active exploitation in the wild combined with a public PoC against a zero-friction attack chain — the vendor's AC:H rating is factually incorrect because the required 'secret' (the IdP public key) is public by design, making real-world complexity effectively Low. The SAML SSO use case concentrates this plugin on enterprise WordPress deployments where admin takeover yields access to corporate content, internal portals, and potentially PII/payment data.
Why this verdict
- Active exploitation confirmed: Six IPs are mass-scanning, DigitalOcean blocked a live admin session takeover, and a public PoC exists on GitHub — this is not theoretical.
- AC:H is factually wrong: The vendor's CVSS assumes the IdP public key is hard to obtain. It is not — it is published in IdP SAML metadata by design. With the PoC, exploitation is point-and-shoot, making effective AC:L and the true base score 9.8.
- Unauthenticated full admin takeover: No credentials, no user interaction, no special network position required. Any internet-facing WordPress site running this plugin is exploitable.
- Role multiplier: The miniOrange SAML SSO plugin is deployed specifically by organizations integrating WordPress with enterprise IdPs (Okta, Azure AD, ADFS). These are not hobby blogs — they are corporate intranets, customer portals, and e-commerce platforms. Admin takeover on these sites yields access to regulated data, PII, and payment information, and can serve as a pivot point into the corporate network. Blast radius per site is host-to-tenant level, but the enterprise context elevates the data impact significantly.
- Vendor communication failure amplifies risk: Only the free edition received a public advisory. Six paid editions were patched silently without alerts, leaving paid customers unaware they need to update — a coverage gap that scanners cannot close.
Why not higher?
Already at CRITICAL 9.4. Not scored at 10.0 because the installed base is relatively small (~10K free installs plus unknown paid editions), the blast radius per exploitation is limited to a single WordPress site (not fleet-scale or identity-provider-scale), and the plugin is not a canonical high-value-role component like a DC, hypervisor, or EDR agent.
Why not lower?
Cannot be lower than CRITICAL given confirmed active exploitation, a public PoC, unauthenticated remote access with no user interaction, and full administrative takeover. The vendor's AC:H is demonstrably incorrect. Any enterprise running this plugin with SAML configured is immediately exploitable from the internet. Dropping to HIGH would ignore the live threat activity and the zero-friction attack chain.
What to do — in priority order.
- Deactivate the miniOrange SAML SSO plugin immediately if not business-critical — If SAML SSO on WordPress is not essential to operations, deactivating the plugin instantly eliminates the attack surface. This is the fastest mitigation — deploy within the noisgate CRITICAL mitigation SLA of 3 days.
- Apply the vendor patch to the correct edition — Update to the patched version for your edition (Free 5.4.5, Premium 13.0.4, Standard 17.0.6, etc.). Paid editions do NOT auto-update via wordpress.org — you must download the update from miniOrange directly. Deploy within 3 days per the noisgate CRITICAL mitigation SLA.
- Deploy a WAF rule blocking HMAC-SHA1 in SAMLResponse — Add a WAF rule (Cloudflare, ModSecurity, Wordfence) that inspects POST bodies to the ACS endpoint (
/?option=saml_user_login) and blocks requests where theSignatureMethodcontainshmac-sha1. Patchstack and Wordfence have published rules. Deploy within 3 days as a stopgap if patching is delayed. - Restrict wp-admin and ACS endpoint access by IP — If your SAML IdP has a known egress IP range, restrict the ACS endpoint and
/wp-adminto those IPs plus your corporate network via.htaccess, nginx config, or CDN rules. This limits who can submit forged SAMLResponses. - Audit WordPress admin sessions and recently modified files — Review
wp_usersandwp_usermetafor unexpected admin accounts. Checkwp-content/plugins/and active theme directories for recently modified PHP files or unfamiliar files (web shells). Use WP-CLI:wp user list --role=administratorandfind wp-content -name '*.php' -mtime -14.
- MFA on WordPress login does not help — the SAML assertion bypass creates a session cookie directly via the plugin's ACS handler, skipping the standard
wp-login.phpflow where MFA plugins hook in. - Rate limiting on wp-login.php is irrelevant — the attack targets the SAML ACS endpoint (
/?option=saml_user_login), not the WordPress login page. - Disabling XML-RPC does not mitigate this — the attack uses standard HTTP POST to the ACS endpoint, not XML-RPC.
Crowdsourced verification payload.
Run this script on the WordPress host (or any machine with SSH/file access to the WordPress installation directory). Invoke as: bash check_cve_2026_61979.sh /var/www/html (pass the WordPress root directory as the first argument). Requires read access to the plugin files — run as the web server user or root.
#!/bin/bash
# CVE-2026-61979 Checker — miniOrange SAML SSO Signature Algorithm Confusion
# Usage: bash check_cve_2026_61979.sh /path/to/wordpress
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
WP_ROOT="${1:-.}"
PLUGIN_DIR="$WP_ROOT/wp-content/plugins/miniorange-saml-20-single-sign-on"
if [ ! -d "$PLUGIN_DIR" ]; then
echo "UNKNOWN — miniOrange SAML SSO plugin not found at $PLUGIN_DIR"
exit 2
fi
# Extract version from the main plugin file header
VERSION=$(grep -i 'Version:' "$PLUGIN_DIR/login.php" 2>/dev/null | head -1 | sed 's/.*Version:[[:space:]]*//' | tr -d '[:space:]')
if [ -z "$VERSION" ]; then
echo "UNKNOWN — could not extract plugin version from login.php"
exit 2
fi
echo "Detected miniOrange SAML SSO version: $VERSION"
# Check for the vulnerable code pattern: accepting attacker-controlled SignatureMethod
# In patched versions (5.4.5+), the plugin enforces the configured algorithm
if grep -q 'hmac-sha1\|HMAC.*SHA1\|cast_key' "$PLUGIN_DIR/includes/lib/mo-saml/Utilities.php" 2>/dev/null; then
# Check if the fix is present (enforced algorithm check)
if grep -q 'configured_algorithm\|enforceAlgorithm\|ALLOWED_ALGORITHMS' "$PLUGIN_DIR/includes/lib/mo-saml/Utilities.php" 2>/dev/null; then
echo "PATCHED — version $VERSION contains algorithm enforcement fix"
exit 0
fi
fi
# Version-based check for the free edition
# Vulnerable: <= 5.4.4, Patched: >= 5.4.5
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
if [ "$MAJOR" -lt 5 ] 2>/dev/null; then
echo "VULNERABLE — version $VERSION is below the patched release (5.4.5)"
exit 1
elif [ "$MAJOR" -eq 5 ] && [ "$MINOR" -lt 4 ] 2>/dev/null; then
echo "VULNERABLE — version $VERSION is below the patched release (5.4.5)"
exit 1
elif [ "$MAJOR" -eq 5 ] && [ "$MINOR" -eq 4 ] && [ "$PATCH" -le 4 ] 2>/dev/null; then
echo "VULNERABLE — version $VERSION is below the patched release (5.4.5)"
exit 1
elif [ "$MAJOR" -eq 5 ] && [ "$MINOR" -eq 4 ] && [ "$PATCH" -ge 5 ] 2>/dev/null; then
echo "PATCHED — version $VERSION is at or above the fixed release"
exit 0
elif [ "$MAJOR" -gt 5 ] 2>/dev/null; then
# Paid editions use higher major versions — check known patched thresholds
# Premium: 13.0.4+, Standard: 17.0.6+, Prem/Ent MS: 20.2.8+, Ent/AI: 26.0.3+, VIP: 32.0.8+, VIP MS: 35.0.7+
echo "NOTE — Paid edition detected (v$VERSION). Known patched versions:"
echo " Premium >= 13.0.4 | Standard >= 17.0.6 | Prem/Ent MS >= 20.2.8"
echo " Ent/All-Inclusive >= 26.0.3 | VIP >= 32.0.8 | VIP MS >= 35.0.7"
echo "UNKNOWN — manually verify your edition against the thresholds above"
exit 2
fi
echo "UNKNOWN — could not determine patch status for version $VERSION"
exit 2If you remember one thing.
Sources
- Patchstack — Full Technical Writeup (7 Editions)
- The Hacker News — Active Exploitation Coverage
- BleepingComputer — Attack Campaign Details
- GitHub Advisory GHSA-wgjx-q85h-87v2 (CVE-2026-15981)
- WordPress.org — Plugin Page and Changelog
- WPScan — miniOrange SAML Vulnerability History
- GBHackers — Critical miniOrange SAML SSO Analysis
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.