HIGH 8.8

CVE-2026-14495: DoLogin Security WordPress Plugin Authentication Bypass—Passwordless Token Prediction

The DoLogin Security plugin for WordPress contains a critical flaw in how it generates passwordless login tokens. The plugin uses a weak random number generator seeded with insufficient entropy—essentially a 20-bit seed derived only from microseconds, discarding the stable seconds component of the system clock. This means an attacker can predict the entire 32-character magic-link token if they know or can guess the numeric account ID. Because the login verification bypasses normal WordPress authentication safeguards and doesn't enforce login attempt lockouts, a malicious user can brute-force the limited seed space (~1 million possibilities) in seconds and log in as any targeted account, including administrators, without needing a password. The attack requires that a valid passwordless login link currently exists for the victim's account.

Source data · NVD / CISA · public domain

CVSS
3.1 · 8.8 HIGH · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weaknesses (CWE)
CWE-338
Affected products
0 configuration(s)
Published / Modified
2026-07-08 / 2026-07-08

NVD description (verbatim)

The DoLogin Security plugin for WordPress is vulnerable to Authentication Bypass via Insufficient Randomness in all versions up to, and including, 4.3. The vulnerability exists because `dologin\s::rrand()` seeds the Mersenne Twister with `mt_srand((double) microtime() * 1000000)` — discarding the integer-seconds component of `microtime()` and constraining the seed to a range of approximately 10^6 values (~20 bits of entropy) — after which every character of the 32-character magic-link token is drawn sequentially with `mt_rand()`, making the entire token a deterministic function of that seed. Because `Pswdless::try_login()` is registered on the unauthenticated `init` hook, resolves the target account by the auto-increment numeric ID embedded in the `?dologin=<id>.<hash>` parameter, performs the hash comparison using a non-constant-time `!=` operator, and then calls `wp_set_auth_cookie()` directly — never passing through `wp_authenticate()` and therefore never triggering the plugin's own `Auth::_has_login_err()` lockout — an unauthenticated attacker can brute-force the ~10^6-candidate seed space to reconstruct an active passwordless login token and authenticate as any targeted user, including administrators, without a password. Exploitation requires that a valid, unexpired passwordless login link (active for up to 7 days) exists for the target account at the time of the attack, and that the numeric link ID is known or guessable from the auto-increment primary key.

5 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

CVE-2026-14495 exploits three compounding weaknesses in the DoLogin Security plugin (versions ≤4.3). First, the random number generator in `dologin\s::rrand()` seeds the Mersenne Twister with `mt_srand((double) microtime() * 1000000)`, which truncates `microtime()` output and yields only ~20 bits of entropy—approximately 1 million possible seed values. Second, the 32-character magic-link token is generated sequentially using `mt_rand()` without any additional salt or cryptographic mixing, making it entirely deterministic given the seed. Third, the `Pswdless::try_login()` handler—registered on the unauthenticated `init` hook—resolves accounts by auto-increment numeric ID from the `?dologin=<id>.<hash>` parameter, performs token validation using non-constant-time string comparison (`!=`), and directly calls `wp_set_auth_cookie()` without invoking `wp_authenticate()`, thereby circumventing the plugin's own brute-force lockout mechanism (`Auth::_has_login_err()`). An attacker with knowledge of a valid account ID and an active passwordless link can enumerate the seed space to recover the token and authenticate as that user.

Business impact

Organizations using the DoLogin Security plugin face complete account takeover risk for any user with an active passwordless login link. This includes WordPress administrators, editors, and any account that has generated a magic-link token in the past 7 days. An attacker who gains administrative access can modify site content, install malware, exfiltrate sensitive data, modify user permissions, or disable the site entirely. The attack requires no valid credentials and leaves minimal audit trail if login attempt logging is not separately configured. For multi-user sites or those handling sensitive content, this vulnerability enables lateral privilege escalation and data breach scenarios.

Affected systems

DoLogin Security plugin for WordPress, all versions up to and including 4.3. The vulnerability is authentication-centric and affects any WordPress installation using this plugin. Sites running newer patched versions are not affected. The attack surface is limited to users for whom a valid, unexpired passwordless login link exists at the time of the attack; however, since tokens remain valid for up to 7 days, the window of opportunity is substantial.

Exploitability

Exploitation is straightforward: an attacker with network access (CVSS:AV:N) requires only public information (the account numeric ID, often sequentially guessable from published content or user directory enumeration) and an active passwordless link for the target account. The attack is non-interactive (UI:N) and can be executed by an unauthenticated attacker (PR:L reflects the CVSS model, but in practice PR:N is the practical scenario). Brute-forcing ~1 million seeds on a modern system takes seconds. The plugin is not currently tracked in the CISA Known Exploited Vulnerabilities catalog, but the ease of exploitation and high impact make it attractive for targeted attacks. Public disclosure will accelerate real-world abuse.

Remediation

Upgrade the DoLogin Security plugin to a patched version that addresses the random number generation weakness. Verify against the vendor's advisory for the specific safe version number. Until patching is possible, disable passwordless login functionality or implement network-level controls to restrict access to the WordPress login endpoint. Additionally, implement robust login attempt rate-limiting and monitoring on the `init` hook to detect repeated failed authentication attempts.

Patch guidance

Update the DoLogin Security plugin through the WordPress admin dashboard or via command line (`wp plugin update dologin-security`). Consult the official plugin security advisory or the vendor's release notes to confirm the patched version number and verify that the fix properly seeds the random number generator with cryptographically sufficient entropy (e.g., using `wp_rand()` or `random_bytes()`) and implements constant-time token comparison. After updating, verify that the new version is active and test passwordless login functionality to confirm it still works as expected.

Detection guidance

Monitor WordPress access logs for repeated `dologin` parameter values, unusual spike in passwordless login attempts, or successful authentication from unexpected IP addresses immediately after a burst of failed attempts. Check for `wp_set_auth_cookie()` calls without corresponding `wp_authenticate()` calls in the request context. Review plugin version numbers in `wp-content/plugins/dologin-security/` or via `wp plugin list`. Implement a Web Application Firewall rule to alert on brute-force patterns against the `init` hook. Set up alerts for new administrator user creation or privilege escalation events shortly after passwordless login activity.

Why prioritize this

This vulnerability warrants immediate remediation because it enables unauthenticated account takeover of any user with an active passwordless link, including site administrators. The attack requires minimal sophistication, no valid credentials, and leaves a small forensic footprint. The 8.8 CVSS score reflects high impact (confidentiality, integrity, availability all compromised) and ease of exploitation. Sites using this plugin should patch before public weaponization occurs.

Risk score, explained

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H yields a score of 8.8 (HIGH). Network-accessible attack vector, low attack complexity, and no user interaction drive exploitability. The PR:L constraint is a CVSS model artifact (the vulnerable endpoint is unauthenticated, but the attacker must have network access to reach it); practical scenarios have lower barriers. High impact across confidentiality, integrity, and availability reflects admin-level account compromise. The limited requirement for an active link (time-bound, but 7-day window) is reflected in attack complexity rather than severity.

Frequently asked questions

Do we need an active passwordless login link for every target account?

Yes. The vulnerability requires that a valid, unexpired passwordless login token exists for the account at the time of the attack. Tokens expire after 7 days, so the attack window is constrained by token lifetime. However, because users frequently request new magic links, the practical risk is substantial.

Can this be exploited without knowing the numeric account ID?

The account ID is embedded in the password-reset link itself (the `<id>` in `?dologin=<id>.<hash>`). It is often predictable or enumerable via user directory enumeration, plugin fingerprinting, or social engineering. ID 1 is conventionally the site administrator.

Does WordPress's built-in brute-force protection prevent this attack?

No. The vulnerable code bypasses `wp_authenticate()` entirely and registers its login handler on the `init` hook before WordPress's lockout mechanisms engage. The plugin's own lockout function (`Auth::_has_login_err()`) is never triggered because the login path sidesteps it.

What should we do if we cannot patch immediately?

Disable the DoLogin Security plugin entirely until a patch is available, or use a Web Application Firewall / reverse proxy to block access to the login endpoint from untrusted networks. Monitor for exploitation attempts and enforce strong, hardware-backed MFA on administrator accounts as a compensating control.

This analysis is provided for informational purposes and represents the current understanding of CVE-2026-14495 based on available vulnerability data. Security organizations should consult vendor advisories, release notes, and their own testing before deploying patches. No exploit code or weaponized proof-of-concept details are included. Patch version numbers and remediation steps should be verified against the official DoLogin Security plugin advisory. This is not a substitute for security assessment, penetration testing, or comprehensive incident response planning. Source: NVD (public-domain), retrieved 2026-08-16. Analysis generated by SEC.co (claude-haiku-4-5).