ATTACK SURFACE | EXPOSURE ADVISORY
Active Threat10 min read

CVE-2026-33032: 2,689 nginx Servers Exposed to Full Takeover Without a Password

A missing middleware call on the /mcp_message endpoint gives unauthenticated attackers full nginx configuration access. With 2,689 exposed instances and active exploitation confirmed since March 2026, unpatched nginx-ui is an open door into production web infrastructure.

2,689
nginx-ui instances exposed on the public internet (Shodan)
9.8
CVSS critical score — highest severity rating
94/100
Recorded Future risk score — ranked 31st most-exploited CVE of March 2026
7
Destructive MCP tools accessible without authentication

A single unauthenticated HTTP request to a publicly exposed endpoint is all it takes to seize control of a production nginx web server — rewriting its configuration, intercepting all traffic it proxies, and harvesting every administrator credential cached in its logs.

CVE-2026-33032, dubbed MCPwn by the Pluto Security researcher who discovered it, is a CVSS 9.8 nginx-ui authentication bypass that exploits a missing middleware call on the /mcp_message endpoint of nginx-ui's Model Context Protocol integration. The nginx-ui authentication bypass means that any attacker with network access to a vulnerable instance can invoke all 12 privileged MCP tools without presenting a password, token, or session cookie. The popular open-source web management interface for nginx has accumulated 11,000 GitHub stars and 430,000 Docker pulls — making it a widely deployed target in exactly the production environments where nginx matters most: API gateways, reverse proxies, and load balancers.

Pluto Security filed responsible disclosure on March 14, 2026. A patch shipped in v2.3.4 the following day. But deployment lagged severely behind the fix, and Recorded Future confirmed active exploitation of CVE-2026-33032 in March 2026 — the same month it was patched. Shodan currently identifies approximately 2,689 publicly exposed nginx-ui instances, the majority still running vulnerable versions. VulnCheck added the CVE to its Known Exploited Vulnerabilities catalog on April 13, 2026.

For defenders, the attack surface equation is direct: any nginx-ui deployment older than v2.3.4 on a network-accessible host is a full nginx takeover waiting to happen. For organisations managing nginx at scale — especially those running it as an API gateway or ingress proxy — that means attackers can rewrite traffic routing rules, inject malicious server blocks capturing authentication headers, and extract SSL private keys for full TLS decryption. No password required.

How CVE-2026-33032 Works: The Missing AuthRequired() Call on /mcp_message

nginx-ui's Model Context Protocol integration exposes two HTTP endpoints: /mcp and /mcp_message. Both endpoints route requests to the same privileged handler, which can invoke 12 distinct MCP tools — including nginx configuration file creation, modification, and deletion; nginx service restart; and automatic configuration reload.

The root cause is a single missing line of middleware. The /mcp endpoint correctly chains both IPWhiteList() and AuthRequired() middleware, requiring IP validation and authenticated credentials before reaching the handler. The /mcp_message endpoint chains only IPWhiteList(). The middleware asymmetry means both endpoints reach the same privileged handler, but one path strips the authentication requirement entirely.

The insecure default compounds the problem. nginx-ui ships with an empty default IP allowlist. IPWhiteList() middleware treats an empty allowlist as 'allow all' rather than 'deny all' — eliminating even the IP-based restriction that was intended to compensate for the missing authentication. Any attacker with network access to the nginx-ui port reaches a fully unrestricted /mcp_message endpoint.

'The /mcp route chains IPWhiteList() and AuthRequired(). /mcp_message chains IPWhiteList() only. Both forward to the same handler,' wrote Yotam Perkal of Pluto Security in the disclosure. The fix is a one-line code addition — inserting middleware.AuthRequired() into the /mcp_message route registration — but the damage from the omission extends to complete server ownership for every instance that remains unpatched. The MCPwn name Perkal coined captures both the technical root cause and the completeness of the resulting compromise.

The /mcp route chains IPWhiteList() and AuthRequired(). /mcp_message chains IPWhiteList() only. Both forward to the same handler. Any network attacker can invoke all MCP tools without authentication.

Yotam Perkal, Pluto Security — CVE-2026-33032 responsible disclosure, March 14, 2026

From Zero to Full nginx Control: The CVE-2026-33032 Attack Chain

The CVE-2026-33032 attack requires only four steps and network access to a vulnerable nginx-ui instance. For targets also running CVE-2026-27944 — affecting nginx-ui prior to v2.3.3 — the chain extends by one step that extracts persistent credential material before any configuration is touched.

Identification is straightforward: Shodan indexes approximately 2,689 publicly reachable nginx-ui deployments identifiable by their login page branding, with the highest concentrations hosted on Alibaba Cloud, Oracle Cloud, Tencent, and DigitalOcean. Internal instances are reachable to any attacker with a network foothold obtained through other means — including the enterprise credential theft vectors covered in our OAuth2 token theft post on malicious Chrome extensions.

Session establishment requires a single unauthenticated GET to /mcp, which returns a sessionId via Server-Sent Events. No credentials are needed. The attacker then POSTs to /mcp_message?sessionId= with no Authorization header. The request bypasses authentication entirely and invokes privileged MCP tools with full handler access.

Of the 12 available MCP tools, 7 are destructive: nginx configuration file creation, modification, and deletion; nginx service restart; reload trigger; server block injection for traffic interception; and credential harvesting from nginx authentication logs. A threat actor who completes step 4 effectively owns every service running behind that nginx instance.

1

Identify vulnerable nginx-ui instance

Scan Shodan for publicly exposed nginx-ui management interfaces using login page fingerprints. Approximately 2,689 instances are directly internet-accessible. Internal instances are reachable via network foothold. Confirm version is prior to 2.3.4 by checking the About page or version endpoint.

2

Extract credentials via CVE-2026-27944 (if present)

Send unauthenticated GET to /api/backup on nginx-ui < v2.3.3 to download full system backup archive. Extract node_secret, JwtSecret, user credential hashes, SSL private keys, and complete nginx configuration. node_secret enables authenticated /mcp SSE session; JwtSecret enables persistent forged admin tokens.

3

Establish unauthenticated MCP session

Send unauthenticated GET to /mcp (with node_secret parameter if obtained in step 2). Server returns sessionId via Server-Sent Events connection. No authentication credentials, cookies, or headers required. The session is now established for MCP tool invocation.

4

Invoke privileged MCP tools without authentication

POST to /mcp_message?sessionId= with no Authorization header. The request reaches the privileged MCP handler via the unauthenticated /mcp_message path. Invoke destructive tools: inject malicious server blocks, redirect traffic, extract config files, restart nginx service, harvest credential headers from nginx access logs.

2,689 Exposed Instances: The nginx-ui Attack Surface by the Numbers

nginx-ui's 11,000+ GitHub stars and 430,000+ Docker image pulls indicate significant adoption across DevOps teams, hosting providers, and self-managed infrastructure operators — environments where a web-based nginx management dashboard is valued precisely because it reduces dependence on command-line administration. The same accessible design that makes nginx-ui operationally convenient is what CVE-2026-33032 turns against defenders.

Shodan data as of April 2026 shows approximately 2,689 nginx-ui instances directly accessible on the public internet, with geographic distribution concentrated in cloud-heavy regions: China leads with the largest share of exposed instances, followed by the United States, Indonesia, Germany, and Hong Kong. Cloud providers hosting the highest concentrations include Alibaba Cloud, Oracle Cloud, Tencent Cloud, and DigitalOcean — reflecting strong adoption in cloud-native infrastructure where nginx commonly serves as an API gateway or ingress controller.

The 2,689 publicly reachable figure significantly understates total exposure. nginx-ui deployments on internal networks are equally vulnerable and reachable to any attacker who has established a foothold through another means — a compromised endpoint, lateral movement through a misconfigured VPN, or credentials obtained via the type of OAuth2 token theft covered in our analysis of the malicious Chrome extension campaign targeting enterprise Google accounts. From an attacker's perspective, an nginx-ui management interface on an internal server represents an immediate escalation point: modify the reverse proxy configuration, and you can redirect internal application traffic to attacker-controlled infrastructure.

CVE-2026-27944 Chained: How Attackers Harvest Keys and Credentials Before Exploiting MCPwn

CVE-2026-27944 is a second CVSS 9.8 vulnerability in nginx-ui versions prior to v2.3.3 that acts as a force multiplier for CVE-2026-33032. The /api/backup endpoint in affected versions delivers a complete system backup archive to any requesting client — no authentication, session token, or authorization header required.

The archive contents transform a session-establishment attack into a full persistent compromise. An attacker downloading the backup obtains the node_secret parameter needed for /mcp SSE session establishment, user credential hashes for all administrator accounts, the JwtSecret signing key used to generate valid admin JSON Web Tokens, SSL private keys for all TLS-terminating nginx domains, and the complete nginx configuration mapping every server block, upstream target, and proxy rule.

The combined exploitation of CVE-2026-27944 and CVE-2026-33032 mirrors the attack class covered in our analysis of CVE-2022-1388 — the F5 BIG-IP iControl REST authentication bypass — where management plane exposure gave unauthenticated attackers remote code execution across network infrastructure. In both cases, the management interface's privileged access to the underlying system transforms an authentication bypass into a full infrastructure compromise. The difference is that nginx-ui additionally hands attackers the SSL keys needed to decrypt every TLS-protected connection the server handles — a capability that persists even after patching, if the keys are not rotated post-compromise.

Indicators of Compromise
ArtifactTypeSHA-256 (Truncated)
/mcp_messageVulnerable HTTP EndpointUnauthenticated MCP tool invocation path — POST with any sessionId invokes privileged handler. Should have AuthRequired() middleware. Absent in nginx-ui < v2.3.4.
/api/backupUnauthenticated Credential Exposure EndpointReturns full system backup archive without authentication (CVE-2026-27944). Contains node_secret, JwtSecret, user credential hashes, SSL private keys, and nginx configuration. Patched in v2.3.3.
node_secretMCP Session Bootstrap TokenParameter extracted from backup archive; enables unauthenticated SSE session establishment on /mcp endpoint. Treat as compromised on any pre-v2.3.3 instance.
JwtSecretAdmin Token Forgery ArtifactJWT signing key extracted from backup archive; enables generation of persistent forged admin tokens valid for all nginx-ui authentication endpoints. Rotate immediately after patching.

Any instance of msimg32.dll found outside C:\Windows\System32 is an active IOC. Isolate the host immediately. Full hashes and IOC lists are available via the Cisco Talos GitHub repository.

Threat Actor Activity: Exploitation Confirmed Since March 2026

Recorded Future's CVE Landscape report for March 2026 listed CVE-2026-33032 among the 31 most actively exploited vulnerabilities of the month, assigning it a risk score of 94 out of 100. This ranking places it in the top tier of exploited CVEs tracked globally that month — notable given that the vulnerability was a fresh disclosure patched only two weeks before active exploitation was confirmed.

watchTowr Labs recorded exploitation attempts against CVE-2026-33032 on their honeypot infrastructure beginning March 31, 2026 — 16 days after the patch release on March 15. The rapid weaponization timeline is consistent with patterns observed in high-profile web management interface authentication bypasses, where public proof-of-concept availability compresses the exploit window to days. A working PoC for CVE-2026-33032 was made publicly available in late March 2026 alongside the CVE identifier, eliminating the barrier of independent exploit development.

VulnCheck formally added CVE-2026-33032 to its Known Exploited Vulnerabilities catalog on April 13, 2026. CISA has not yet added the CVE to its official KEV catalog as of April 16, but organisations following CISA BOD 22-01-equivalent patch prioritisation frameworks should treat VulnCheck KEV additions as equivalent signals. The pattern of missing-authentication vulnerabilities in network management interfaces — from CVE-2024-47575 (Fortinet FortiManager FortiJump) to MCPwn — continues to define the most actively targeted attack surface in enterprise infrastructure.

Recorded Future ranked CVE-2026-33032 31st among all actively exploited CVEs of March 2026, with a risk score of 94/100. Exploitation attempts were recorded on honeypots within 16 days of the patch release.

Recorded Future CVE Landscape Report — March 2026 / watchTowr Labs threat intelligence

Remediation: Patch to v2.3.6 and Lock Down Your nginx-ui Deployment

The primary remediation for CVE-2026-33032 is version upgrade. Users should update to nginx-ui v2.3.6 — the current release as of April 2026 — which includes fixes for both CVE-2026-33032 and CVE-2026-27944 along with additional security hardening. Version 2.3.4 was the initial patch for CVE-2026-33032 (released March 15, 2026), but v2.3.6 is the recommended target.

For organisations unable to upgrade during an emergency maintenance window, two code-level workarounds are available from the disclosure: add middleware.AuthRequired() to the /mcp_message route registration, and configure the IP allowlist to explicitly permit only trusted management hosts rather than relying on the insecure empty-list-as-allow-all default.

If MCP is not operationally required in your environment, disable the MCP feature entirely. Disabling MCP eliminates the /mcp and /mcp_message endpoints from the attack surface completely — the most conservative and immediately effective mitigation available.

Post-remediation, treat any pre-v2.3.4 instance as potentially compromised and rotate all secrets extracted from the backup endpoint: nginx-ui administrator credentials, the JwtSecret signing key, and SSL private keys for all TLS-terminating domains managed by the affected nginx-ui instance.

Upgrade to nginx-ui v2.3.6 immediately

Update all nginx-ui instances to v2.3.6, which patches both CVE-2026-33032 (/mcp_message auth bypass) and CVE-2026-27944 (/api/backup credential disclosure). Verify the upgrade completed successfully by checking the version displayed in the nginx-ui About page. Any instance still running v2.3.3 or earlier after today is an unmitigated critical risk.

Apply emergency workarounds if immediate upgrade is not possible

If a maintenance window is required before upgrading: (1) Add middleware.AuthRequired() to the /mcp_message route registration in the nginx-ui source and rebuild, and (2) Configure the IP allowlist to explicitly permit only trusted management network CIDR ranges. Both changes together neutralise the two contributing factors — missing auth and insecure default allowlist.

Disable MCP if not operationally required

If your organisation does not use nginx-ui's Model Context Protocol integration, disable the MCP feature in nginx-ui configuration. Disabling MCP removes the /mcp and /mcp_message endpoints from the attack surface entirely — more conservative than middleware patching and immediately effective without a code change.

Rotate all secrets on any pre-v2.3.4 instance

Treat every nginx-ui instance that ran v2.3.3 or earlier as potentially compromised via CVE-2026-27944 backup extraction. Immediately rotate: all nginx-ui administrator account passwords, the JwtSecret JWT signing key, and SSL private keys for all TLS-terminating domains managed by the affected nginx-ui instance. Key material in attacker hands persists as a threat even after patching.

Restrict nginx-ui management interface network access

nginx-ui management ports should never be accessible from the public internet. Place management interfaces behind a VPN, bastion host, or private network VLAN accessible only to authorised administrators. Implement firewall rules denying all public inbound connections to nginx-ui ports. The 2,689 Shodan-indexed instances represent organisations that have not applied this basic defence-in-depth layer.

Audit nginx configuration for post-exploitation changes

After patching, audit your nginx configuration for unexpected server blocks, unfamiliar upstream targets, modified proxy_pass directives, or new log format definitions that could indicate traffic interception setup. Run a diff against your last known-good nginx configuration backup. Any changes not initiated by administrators during the vulnerability window should be treated as indicators of compromise and investigated immediately.

The bottom line

CVE-2026-33032 is a reminder that the management plane is the attack surface. The nginx-ui authentication bypass requires no exploit sophistication — a single unauthenticated POST to /mcp_message invokes privileged MCP tools on every unpatched instance. With 2,689 publicly exposed deployments and active exploitation confirmed since March 2026, the window for a deferred upgrade has already closed.

For any organisation running nginx-ui v2.3.3 or earlier: upgrade to v2.3.6 today. Rotate administrator credentials and JwtSecret on every instance that was exposed during the vulnerability window. Restrict management interface access to private networks. And audit your nginx configuration for signs that an attacker already used the open door.

Frequently asked questions

What is CVE-2026-33032?

CVE-2026-33032 is a CVSS 9.8 authentication bypass in nginx-ui, an open-source web management interface for nginx. A missing middleware call on the /mcp_message endpoint lets any network-accessible attacker invoke privileged MCP tools — including rewriting nginx configuration files, restarting the server, and intercepting traffic — without credentials. Dubbed MCPwn by Pluto Security, the vulnerability was patched in v2.3.4 on March 15, 2026.

How does the MCPwn nginx-ui exploit work step by step?

An attacker first sends an unauthenticated GET request to /mcp to establish a Server-Sent Events session and receive a sessionId. They then POST to /mcp_message?sessionId= with no authentication headers. Because /mcp_message lacks AuthRequired() middleware and the default IP allowlist is empty (treated as 'allow all'), the request reaches the privileged handler directly, enabling invocation of all 12 MCP tools including config modification, nginx restart, and credential harvesting.

Is my nginx server directly vulnerable to CVE-2026-33032?

Your underlying nginx server is at risk if you use nginx-ui as its management interface and run a version prior to 2.3.4. The vulnerability is in nginx-ui, not nginx itself — but successful exploitation gives attackers full control over nginx configuration, allowing them to modify server blocks, redirect traffic, and harvest credentials passing through the server. Any nginx-ui instance version 2.3.3 or earlier with network-accessible management ports is affected.

What can attackers do after exploiting CVE-2026-33032?

Attackers gain access to seven destructive MCP tools: nginx configuration file creation, modification, and deletion; nginx service restart; automatic config reload; traffic interception through server block injection; and administrator credential harvesting from nginx logs. Combined with CVE-2026-27944, attackers also extract the node_secret, JwtSecret for token forgery, user credential hashes, and SSL private keys — enabling persistent access and full TLS traffic decryption.

How do I check if my nginx-ui instance is exposed to CVE-2026-33032?

Run 'nginx-ui --version' or check the web UI About page to confirm your installed version. Versions prior to 2.3.4 are vulnerable. On Shodan, exposed instances are identifiable by the nginx-ui login page. Internally, attempt an unauthenticated GET request to /mcp on your management host — if it returns an SSE connection without prompting for credentials, the endpoint is reachable unauthenticated. Upgrade immediately to v2.3.6.

What version of nginx-ui fixes CVE-2026-33032?

Version 2.3.4 (released March 15, 2026) is the initial fix for CVE-2026-33032, adding AuthRequired() middleware to the /mcp_message endpoint and changing the IP allowlist default from 'allow all' to 'deny all'. Version 2.3.6 is the current recommended release as of April 2026 and includes additional security hardening. If upgrading immediately is not possible, apply the two code-level workarounds published in the disclosure.

What is CVE-2026-27944 and how does it chain with CVE-2026-33032?

CVE-2026-27944 (CVSS 9.8) is a separate unauthenticated information disclosure in nginx-ui's /api/backup endpoint — also patched in v2.3.3. It allows downloading a full system backup archive without authentication, exposing the node_secret value, user credentials, JwtSecret for admin token forgery, SSL private keys, and complete nginx configuration. Chained with CVE-2026-33032, an attacker can go from zero access to full server control with persistent credential access in two unauthenticated HTTP requests.

How do I detect if my nginx-ui has been compromised via CVE-2026-33032?

Hunt for unauthenticated POST requests to /mcp_message in your nginx-ui access logs — legitimate traffic should require session authentication. Look for unexpected nginx configuration changes, new server blocks, or upstream rewrites not initiated by administrators. Monitor for outbound connections from the nginx-ui host to unfamiliar IPs. Check nginx error logs for reload events outside maintenance windows. Review administrator credential hashes for unauthorized extraction via /api/backup access logs.

Sources & references

  1. The Hacker News — Actively Exploited nginx-ui Flaw (CVE-2026-33032) Enables Full Nginx Server Takeover
  2. BleepingComputer — Critical Nginx UI auth bypass flaw now actively exploited in the wild
  3. Picus Security — CVE-2026-33032 (MCPwn): How a Missing Middleware Call in nginx-ui Hands Attackers Full Web Server Takeover
  4. Security Affairs — CVE-2026-33032: severe nginx-ui bug grants unauthenticated server access
  5. SentinelOne Vulnerability Database — CVE-2026-33032
  6. watchTowr — Fortinet FortiClient EMS Zero-Day: CVE-2026-35616 (Active Exploitation Underway)
Free newsletter

Get threat intel before your inbox does.

50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, weekly, no spam.

Unsubscribe anytime. We never sell your data.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals weekly.