Home/ Blog/ Security news/ Article
Blog · Security news

A public exploit lets a stranger log in as WordPress admin through miniOrange's single sign-on plugin

A public exploit for CVE-2026-15981 lets unauthenticated attackers log in as any WordPress admin via the miniOrange SAML SSO plugin. Update to 5.4.5 now.

An ornate key fragmenting as it passes through a glowing doorway in a wall

The patch shipped over a week ago. That stopped protecting anyone who has not installed it, because a working exploit for the flaw went public today.

The bug, tracked as CVE-2026-15981, sits in miniOrange's SAML Single Sign On (SSO Login) plugin for WordPress, which runs on more than 10,000 sites. It lets an unauthenticated attacker log in as any existing WordPress user, administrators included, without a password. Wordfence, which assigned the CVE, rates it 9.8 out of 10. The fix is version 5.4.5. Anything up to and including 5.4.4 is exposed.

From patch to public exploit in nine daysJul 15: First bypass. Jul 17: Fix in 5.4.5. Jul 23: CVE published. Jul 26: Public exploit.From patch to public exploit in nine daysJul 15First bypassJul 17Fix in 5.4.5Jul 23CVE publishedJul 26Public exploit
Sources: Wordfence, WPScan, GitHub. Dates for the SAML Single Sign On (SSO Login) plugin.

The second critical login bypass in this plugin in eight days

This is not the plugin's first bad week. On July 15 a separate critical authentication bypass in the same plugin, CVE-2026-15013, was disclosed and fixed in 5.4.4, according to WPScan's records. Two days later, 5.4.5 landed to close the one we are talking about here. The CVE record went public on July 23. A proof-of-concept exploit appeared on GitHub on July 26.

The window between those dates is the story. The fix has been sitting in the plugin repository for over a week while some share of the install base stayed on a vulnerable build. Now anyone can grab a ready-made exploit and skip straight to the payoff.

How a malformed signature turns into an admin login

SAML single sign-on works by trusting a signed assertion from an identity provider, the system that vouches for who you are. The plugin's job is to verify that signature before it logs anyone in. In the affected versions, that check was wrong in a way that is easy to describe and easy to abuse.

PHP's openssl_verify() returns one of three values: 1 for a valid signature, 0 for an invalid one, and -1 when the verification itself errors out. The plugin's mo_saml_validate_signature() function treated the outcome as a plain yes or no. A -1 is not zero, so a loose truthy test reads the error as success. An attacker sends a SAMLResponse that names whichever account they want to become in the NameID field, paired with a signature crafted so the verification errors instead of cleanly failing. The error is accepted as a valid signature, and the login proceeds. No credentials, no user interaction, no real identity provider involved.

The fix requires the result to be exactly 1 and treats every other value, error included, as a failed signature. That is the whole correction, and it is a reminder of how thin the margin can be between a working trust boundary and an open door.

Who should treat this as urgent

Any WordPress site running the plugin at 5.4.4 or earlier. The population that matters most is the one that installed a SAML SSO plugin in the first place: organizations wiring WordPress into Okta, Entra ID, Google Workspace, Keycloak, or another corporate identity provider. Those are the sites where a WordPress admin account is a foothold into something larger, and they are exactly the sites this plugin serves.

Full administrator control of WordPress is not a contained problem. From there an attacker can install a malicious plugin or theme, drop a web shell, mint new admin accounts, and pivot. A password reset does not evict them, because they never needed a password. We have watched the same takeover pattern play out through other WordPress plugins that handed attackers admin accounts.

How to tell if you were already hit

The exploit produces a successful WordPress login for a privileged account with no matching event on the identity provider side. That mismatch is the cleanest signal you have. If your identity provider has no record of issuing an assertion for a login that WordPress accepted, treat it as suspect.

On a site that ran a vulnerable version, look for:

  • Administrator or editor logins that do not line up with a real single sign-on event in your identity provider's logs.

  • New administrator accounts, or role changes to existing ones, that nobody on your team made.

  • Recently added or modified plugins and themes, and any unfamiliar PHP files under the web root.

  • Scheduled tasks (WP-Cron jobs) or outbound connections that no legitimate change explains.

This is the gap patching alone leaves open. Updating the plugin closes the hole; it says nothing about whether someone walked through it during the exposure window. Continuous monitoring of authentication events and file integrity on the host, rather than a one-time version scan, is what turns "we patched" into "we know we were not hit." Signature verification has been a soft spot across SAML implementations, from framework libraries to forged logins against Oracle WebLogic.

What to do now

  • Update the plugin to 5.4.5 or later today. This is the fix, and nothing else fully closes the hole.

  • If you cannot update immediately, disable the plugin. Losing SSO login for a while beats leaving an admin bypass open with a public exploit in circulation.

  • After patching, hunt. Assume the exposure window was live and run the checks above before you call it done.

  • Rotate what a rogue admin could have taken: other administrator credentials, API keys stored in the site, and any secrets reachable from the WordPress host.

Two critical authentication bypasses in one sign-on plugin inside eight days is a pattern worth naming. Getting the return-value handling of a signature check wrong is a classic mistake, and it keeps recurring across SAML code. If you rely on a plugin to broker trust between WordPress and your identity provider, its update cadence is part of your attack surface, not an afterthought.

Topics

Frequently asked questions

What is CVE-2026-15981?

CVE-2026-15981 is a critical authentication bypass in miniOrange's SAML Single Sign On (SSO Login) plugin for WordPress, rated 9.8 by Wordfence. It lets an unauthenticated attacker log in as any existing user, including administrators, in versions up to and including 5.4.4.

Which versions are affected and what is the fix?

All versions up to and including 5.4.4 are vulnerable. The fix is version 5.4.5. Update the plugin immediately, or disable it until you can, since a public proof-of-concept exploit is already circulating.

Is CVE-2026-15981 being exploited?

As of July 26, 2026, a public proof-of-concept exploit has been published on GitHub, which makes exploitation trivial. There is no confirmed report of mass exploitation in the wild yet, but the barrier to attack is now very low.

How does the authentication bypass work?

The plugin verified SAML signatures with a loose check on PHP's openssl_verify(), which returns 1, 0, or -1. An error value of -1 was read as success, so a crafted response with a malformed signature and an attacker-chosen account logs the attacker in.

How do I know if my site was already compromised?

Look for administrator logins with no matching event in your identity provider's logs, unexpected new admin accounts, and recently modified plugins, themes, or PHP files. A successful privileged login that your identity provider never issued is the strongest sign.

Who is most at risk from this flaw?

Organizations that connect WordPress to a corporate identity provider such as Okta, Entra ID, or Google Workspace through this plugin. On those sites a WordPress admin account is a stepping stone into wider systems, and the plugin is used by more than 10,000 sites.

Ready to meet the Guardians?

Deploys fast - agentless for monitoring and cloud, a lightweight agent for deep endpoint security. Just Suriq, standing watch.