{"schema":"threatline.record/2","record":{"id":"CVE-2026-84360","aliases":["GHSA-vc32-4gwf-77xp","GO-2026-6799"],"summary":"Nginx UI: OTP secure-session step-up can be bypassed via MCP configuration tools","details":"### 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.","categories":["Web servers"],"product":"github.com/0xJacky/Nginx-UI","vendor":"0xJacky","ecosystem":"go","affected_ranges":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-vc32-4gwf-77xp","source_modified_at":"2026-10-15T20:14:11Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"go","name":"github.com/0xJacky/Nginx-UI"},"range":"< 1.9.10-0.20260703131214-23d1934099b0"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-84360","source_modified_at":"2026-10-13T14:00:35.965Z","fetched_at":"2026-10-23T18:45:31.882637Z","product":"nginx-ui","vendor":"0xJacky","versions":[{"status":"affected","version":"< 2.4.1"}],"defaultStatus":null},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-vc32-4gwf-77xp","source_modified_at":"2026-10-19T21:41:02.724775704Z","fetched_at":"2026-10-23T18:52:38.922436Z","package":{"name":"github.com/0xJacky/Nginx-UI","ecosystem":"Go","purl":"pkg:golang/github.com/0xJacky/Nginx-UI"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.9.10-0.20260703131214-23d1934099b0"}]}],"versions":[]}],"fixed_versions":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-vc32-4gwf-77xp","source_modified_at":"2026-10-15T20:14:11Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"go","name":"github.com/0xJacky/Nginx-UI"},"version":"1.9.10-0.20260703131214-23d1934099b0"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-vc32-4gwf-77xp","source_modified_at":"2026-10-19T21:41:02.724775704Z","fetched_at":"2026-10-23T18:52:38.922436Z","package":{"name":"github.com/0xJacky/Nginx-UI","ecosystem":"Go","purl":"pkg:golang/github.com/0xJacky/Nginx-UI"},"version":"1.9.10-0.20260703131214-23d1934099b0"}],"cvss":8.1,"severity":"High","kev":{"listed":false},"epss":{"probability":0.00347,"percentile":0.27076,"score_date":"2026-10-23"},"published_at":"2026-10-12T21:08:04.687Z","modified_at":"2026-10-19T21:41:02.724775704Z","provenance":[{"source":"GitHub Advisory Database","url":"https://github.com/advisories/GHSA-vc32-4gwf-77xp","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-15T20:14:11Z"},{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-84360","fetched_at":"2026-10-23T18:45:31.882637Z","source_modified_at":"2026-10-13T14:00:35.965Z"},{"source":"OSV","url":"https://osv.dev/vulnerability/GHSA-vc32-4gwf-77xp","fetched_at":"2026-10-23T18:52:38.922436Z","source_modified_at":"2026-10-19T21:41:02.724775704Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-84360","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23"}],"sources":["GitHub Advisory Database","CVE List","OSV","EPSS"],"references":[{"source":"CVE List","url":"https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-vc32-4gwf-77xp","tags":["exploit"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-84360","source":"GitHub Advisory Database"},{"source":"CVE List","url":"https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2","tags":["x_refsource_MISC"]},{"source":"CVE List","url":"https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1","tags":["x_refsource_MISC"]},{"url":"https://github.com/advisories/GHSA-vc32-4gwf-77xp","source":"GitHub Advisory Database"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","ssvc":{"exploitation":"poc","automatable":"no","technical_impact":"partial","assessed_at":"2026-10-13T14:00:07.727918Z"},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"product","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-19T21:41:02.724775704Z","content_hash":"23b7364a8d548c2f7d61ac858628a7bee531ac0875df5b662996e019bb838e9c"}}
