{"id":"GHSA-vc32-4gwf-77xp","revision":"f84a87e0a0554d8fa7976db385c3c44e","records":[{"revision":"f84a87e0a0554d8fa7976db385c3c44e","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-vc32-4gwf-77xp","aliases":["CVE-2026-84360","GO-2026-6799"],"title":"Nginx UI: OTP secure-session step-up can be bypassed via MCP configuration tools","description":"### Summary\nAn 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.\n\n### Details\nThe 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.\n\nRelevant code paths:\n- [api/config/router.go](/home/kali/Desktop/bounty/nginx-ui/api/config/router.go:14)\n- [internal/middleware/secure_session.go](/home/kali/Desktop/bounty/nginx-ui/internal/middleware/secure_session.go:52)\n- [mcp/router.go](/home/kali/Desktop/bounty/nginx-ui/mcp/router.go:9)\n- [mcp/config/config_add.go](/home/kali/Desktop/bounty/nginx-ui/mcp/config/config_add.go:34)\n- [mcp/config/config_modify.go](/home/kali/Desktop/bounty/nginx-ui/mcp/config/config_modify.go:55)\n\nThis 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.\n\n### PoC\nI verified this locally in an isolated environment with a temporary end-to-end harness that exercised the real `/mcp` and `/mcp_message` routes.\n\nWhat the executed test did:\n1. Created a temporary config directory and configured Nginx control commands to harmless local values (`true`) to avoid touching the host.\n2. Created a real OTP-enabled user in a temporary SQLite database.\n3. Generated a real JWT for that OTP-enabled user.\n4. Started a local test server exposing the real `/mcp` and `/mcp_message` routes.\n5. Opened an authenticated SSE connection to `/mcp` with the JWT and no `X-Secure-Session-ID`.\n6. Initialized the MCP session over `/mcp_message`.\n7. Called the real `nginx_config_add` tool over `/mcp_message`.\n8. Verified that the tool succeeded and created `mcp-bypass.conf` in the managed config directory without any secure-session step-up.\n\nObserved result from the actual local verification:\n- The MCP session initialized successfully without any `X-Secure-Session-ID`.\n- The config file was written through the MCP tool path using only JWT authentication.\n\n### Impact\nOTP-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.","state":0,"publishedAt":"2026-10-15T20:14:10+00:00","modifiedAt":"2026-10-19T21:41:02.7247757+00:00","affected":[{"ecosystem":"Go","name":"github.com/0xJacky/Nginx-UI","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.9.10-0.20260703131214-23d1934099b0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-vc32-4gwf-77xp","https://nvd.nist.gov/vuln/detail/CVE-2026-84360","https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2","https://github.com/0xJacky/nginx-ui","https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1"],"sourceUrl":"https://github.com/advisories/GHSA-vc32-4gwf-77xp","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-vc32-4gwf-77xp","identifiers":["GHSA-vc32-4gwf-77xp","CVE-2026-84360","GO-2026-6799"]},"retained":false,"historicalAffected":[]}],"coverage":[]}