Jan 20, 2026·6 min read·109 visits
The Modular DS plugin (up to version 2.5.1) contains a logic flaw in its API routing mechanism. By appending `?origin=mo&type=foo` to the login endpoint, an attacker bypasses all cryptographic checks and is immediately granted an administrator session cookie. Patch to version 2.5.2 immediately.
A critical authentication bypass vulnerability in the Modular DS WordPress plugin allows unauthenticated attackers to log in as an administrator simply by manipulating URL parameters. Rated CVSS 10.0, this flaw is actively exploited in the wild.
In the world of WordPress agency work, managing hundreds of client sites individually is a nightmare. Enter Modular DS (Modular Connector), a plugin designed to connect disparate WordPress installations to a central dashboard. It allows you to update plugins, manage backups, and monitor uptime from a single pane of glass.
To make this magic happen, the plugin needs a way to communicate with the 'mothership'—the central dashboard. It sets up API routes that allow the dashboard to command the child site. These routes are high-value targets. If you can trick the child site into thinking you are the dashboard, you don't just get a foot in the door; you get the keys to the castle.
CVE-2026-23550 is exactly that trick. It's not a complex memory corruption or a race condition. It's a logic flaw so simple it hurts. It essentially turns the plugin's authentication mechanism into a bouncer that lets anyone into the VIP section as long as they say, "I'm with the band."
The vulnerability lies in how the plugin determines if a request is a "legitimate" direct login attempt from the Modular DS dashboard. The developers implemented a function—let's call it isDirectRequest()—to check if the incoming HTTP request should skip standard WordPress authentication and instead use the plugin's internal verification logic.
The intention was likely to streamline the user experience for administrators jumping from the dashboard to a client site. However, the logic check was fatally flawed. Instead of validating a cryptographic signature or a secret token first, the code checked the URL parameters to decide whether to trust the request.
Specifically, the code looked for two parameters: origin and type. If origin was set to mo (presumably short for Modular) and type was present, the system assumed, "Ah, this is a trusted request from our system," and proceeded to bypass the standard login screen. The problem? It didn't actually verify who sent the request before rolling out the red carpet.
While the exact source code is proprietary, we can reconstruct the logic based on the patch analysis. The vulnerable code likely looked something like this (pseudocode):
// Vulnerable Logic in the Router
public function handleRequest() {
// Checking if we should bypass standard auth
if ( $_GET['origin'] === 'mo' && isset($_GET['type']) ) {
// CRITICAL ERROR: We trust the request now.
// The code proceeds to generate an admin session
// without verifying a signature or token first.
$this->loginAsAdmin();
}
}This is a classic "CWE-266: Incorrect Privilege Assignment." The conditional statement checks for presence, not provenance. It checks if the door has a handle, not if the person turning it has a key.
The fix in version 2.5.2 introduces actual validation. It ensures that even if those parameters are present, the request must pass a cryptographic verification (checking signatures or nonces) before an admin session is even considered.
Exploiting this is embarrassingly easy. You don't need a compiled binary, you don't need shellcode, and you don't need to be authenticated. You just need curl or a web browser.
The attack flow is a single HTTP GET request. The target endpoint is the plugin's API login route.
The Attack URL:
http://target.com/api/modular-connector/login/{{random}}?origin=mo&type=1
When the server processes this request:
origin=mo and enters the "Direct Request" flow.302 Found redirect, setting the wordpress_logged_in_[hash] cookie.Once the attacker receives that cookie, they are the WordPress Administrator. From there, they can upload a malicious plugin (webshell), edit theme files, or exfiltrate user data. The automated attacks seen in the wild immediately use this access to create new hidden admin users for persistence.
A CVSS score of 10.0 is reserved for the absolute worst-case scenarios: Network exploitable, no complexity, no privileges required, and total loss of Confidentiality, Integrity, and Availability. CVE-2026-23550 ticks every single box.
Because this plugin is used by agencies to manage multiple sites, a compromised agency dashboard (or an attacker simply scanning for the plugin fingerprint) can lead to the mass compromise of thousands of websites. This isn't just a defacement risk; it's a ransomware vector.
Attackers are actively using this to:
Since the exploit leaves very few logs (other than a standard access log entry), it can be difficult to detect until the damage is done.
The remediation is straightforward: Update to version 2.5.2 immediately. The vendor patched this by enforcing strict cryptographic validation before allowing the login flow to proceed.
However, because this vulnerability was exploited in the wild before widespread patching, simply updating is not enough. You must assume compromise if you were running version 2.5.1 or lower publicly.
Immediate Response Plan:
wp-config.php. This logs everyone out instantly.wp_update_user or random strings.wp-content/uploads or wp-content/themes.CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
Modular DS (Modular Connector) Modular DS | <= 2.5.1 | 2.5.2 |
| Attribute | Detail |
|---|---|
| CWE | CWE-266 (Incorrect Privilege Assignment) |
| CVSS | 10.0 (Critical) |
| Attack Vector | Network (HTTP GET) |
| Auth Required | None |
| Exploit Status | Active / In the Wild |
| EPSS Probability | 6.11% |
The product does not correctly assign privileges or access rights for a resource, allowing an actor to access the resource or perform an action that should be restricted.
An uncontrolled resource consumption vulnerability exists in the Scala-based http4s-blaze-server package of the http4s/blaze library. The vulnerability allows remote, unauthenticated attackers to cause an Out of Memory Error (OOM) and JVM crash by streaming a continuous sequence of small or empty WebSocket continuation frames with the FIN bit set to 0. This bypasses typical payload size checks because of the JVM's per-object allocation overhead, leading to rapid heap exhaustion with minimal network bandwidth.
A critical path traversal vulnerability has been identified in the OpenList Go-based backend package. The vulnerability exists within the batch rename handler because the application does not validate the source filename parameter before constructing filesystems paths. This omission allows authenticated users to escape their designated directory and rename files in sibling paths.
OpenList version 4.2.3 and prior is vulnerable to an authorization bypass and metadata leakage. When configured with the Bleve search engine backend, OpenList fails to perform separator-aware path matching when validating tenant containment. This allows authenticated users to access sibling directories sharing similar name prefixes. Furthermore, the search backend returns unfiltered global result counts, leaking existence verification data of unauthorized files via side-channel analysis.
An authorization bypass vulnerability in OpenList version 4.2.3 and below allows authenticated users to read arbitrary files outside of their designated base directories due to an insecure path prefix check using Go's standard strings.HasPrefix function.
A security policy bypass vulnerability exists in the AWS API MCP Server (awslabs-aws-api-mcp-server) from version 0.2.13 through 1.3.46. When the server fails to load the read-only operations index during startup (due to transient network failures, file permission issues, or other exceptions), it logs a warning but continues running in an insecure, degraded state. Under this condition, the security policy engine fails open, silently skipping all subsequent security checks and consent prompts for the lifetime of the process. This permits unauthorized mutating AWS CLI commands to execute via indirect prompt injection attacks.
An incomplete escaping vulnerability in the npm package 'shescape' allows unauthenticated users to trigger dynamic shell expansions, absolute path disclosure, and command block break-outs on Unix and Windows systems.