GitHub Advisoryadvisory · Go

GHSA-vc32-4gwf-77xp Nginx UI: OTP secure-session step-up can be bypassed via MCP configuration tools

HIGH Published 2026-10-15 Modified 2026-10-15 Official page ↗
Aliases
CVE-2026-84360
Ecosystem
Go
Packages
github.com/0xJacky/Nginx-UI
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
Weaknesses
CWE-288
Reviewed
2026-10-15

Affected packages

• Go github.com/0xJacky/Nginx-UI: < 1.9.10-0.20260703131214-23d1934099b0 → fixed in 1.9.10-0.20260703131214-23d1934099b0

Description

Summary An OTP-enabled authenticated user who cannot use the HTTP configuration mutation endpoints without a valid secure session can still mutate Nginx configuration through `/mcp` and `/mcp_message` using only ordinary authentication. Details The HTTP configuration mutation surface is explicitly grouped behind `middleware.RequireSecureSession()`. By contrast, the MCP endpoints are exposed with only `middleware.AuthRequired()`. The MCP server exposes configuration mutation tools including `nginx_config_add` and `nginx_config_modify`, so OTP-enabled users gain an alternate path around the intended step-up requirement. Relevant code paths: • api/config/router.go • internal/middleware/secure_session.go • mcp/router.go • mcp/config/config_add.go • mcp/config/config_modify.go This is a security-control bypass rather than a missing feature. The product already established that OTP-enabled users should complete a secure session before high-impact configuration mutations are accepted on the HTTP path. PoC I verified this locally in an isolated environment with a temporary end-to-end harness that exercised the real `/mcp` and `/mcp_message` routes. What the executed test did: 1. Created a temporary config directory and configured Nginx control commands to harmless local values (`true`) to avoid touching the host. 2. Created a real OTP-enabled user in a temporary SQLite database. 3. Generated a real JWT for that OTP-enabled user. 4. Started a local test server exposing the real `/mcp` and `/mcp_message` routes. 5. Opened an authenticated SSE connection to `/mcp` with the JWT and no `X-Secure-Session-ID`. 6. Initialized the MCP session over `/mcp_message`. 7. Called the real `nginx_config_add` tool over `/mcp_message`. 8. Verified that the tool succeeded and created `mcp-bypass.conf` in the managed config directory without any secure-session step-up. Observed result from the actual local verification: • The MCP session initialized successfully without any `X-Secure-Session-ID`. • The config file was written through the MCP tool path using only JWT authentication. Impact OTP-enabled accounts lose the intended step-up protection for high-impact Nginx configuration changes when MCP is enabled. A user who should be blocked until re-authenticating can still create or modify configuration files and trigger reload behavior through MCP.

Related

Alias · CVE (1)

  • CVE-2026-84360 Nginx UI is a web user interface for the Nginx web server. vulnerability

Weakness · CWE (1)

  • CWE-288 Authentication Bypass Using an Alternate Path or Channel weakness

References