REPORT / 01

Analysis Report · nginx-ui v2.3.3 → v2.3.4 — CVE-2026-33032

Shared security patch analysis results

mode patchdiff ai copilot oswe-vscode-prime
02 · Lifecycle actions cancel · resume · skip · regenerate
03 · Share this analysis copy link · embed report
03 · CVE Security Analysis & Writeups ai-generated · per cve

Comprehensive security analysis generated by AI for each confirmed CVE match. Click on a CVE to view the detailed writeup including vulnerability background, technical details, patch analysis, and PoC guide.

CVE-2026-33032 NVD
AI-Generated Analysis
05 · Findings filter · search · paginate
Use quotes for exact: "SQL injection" · Operators: hello AND bye, admin OR root, -error, NOT warning
Showing 0 to 0 of 0 results
mcp/config/config_add.go AI: 1 vulnerabilities 1 true positive(s) CVE-2026-33032
--- cache/nginx-ui_v2.3.3/mcp/config/config_add.go	2026-04-19 12:37:20.691130313 +0000+++ cache/nginx-ui_v2.3.4/mcp/config/config_add.go	2026-04-19 12:37:22.311230867 +0000@@ -5,7 +5,6 @@ 	"encoding/json" 	"errors" 	"os"-	"path/filepath"  	"github.com/0xJacky/Nginx-UI/internal/config" 	"github.com/0xJacky/Nginx-UI/internal/helper"@@ -48,10 +47,14 @@ 		} 	} -	dir := nginx.GetConfPath(baseDir)-	path := filepath.Join(dir, name)-	if !helper.IsUnderDirectory(path, nginx.GetConfPath()) {-		return nil, config.ErrPathIsNotUnderTheNginxConfDir+	dir, err := config.ResolveConfPath(baseDir)+	if err != nil {+		return nil, err+	}++	path, err := config.ResolveConfPath(baseDir, name)+	if err != nil {+		return nil, err 	}  	if !overwrite && helper.FileExists(path) {@@ -66,7 +69,7 @@ 		} 	} -	err := os.WriteFile(path, []byte(content), 0644)+	err = os.WriteFile(path, []byte(content), 0644) 	if err != nil { 		return nil, err 	}
AI Analysis
Vulnerability Existed: yes
TRUE POSITIVE
Path Traversal mcp/config/config_add.go lines 48-69
Old Code
	dir := nginx.GetConfPath(baseDir)
	path := filepath.Join(dir, name)
	if !helper.IsUnderDirectory(path, nginx.GetConfPath()) {
		return nil, config.ErrPathIsNotUnderTheNginxConfDir
	}
	err := os.WriteFile(path, []byte(content), 0644)
Fixed Code
	dir, err := config.ResolveConfPath(baseDir)
	if err != nil {
		return nil, err
	}
	path, err := config.ResolveConfPath(baseDir, name)
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path, []byte(content), 0644)
CVE Analysis Results:
CVE-2026-33032: Yes
View CVE Description
Nginx UI is a web user interface for the Nginx web server. In versions 2.3.5 and prior, the nginx-ui MCP (Model Context Protocol) integration exposes two HTTP endpoints: /mcp and /mcp_message. While /mcp requires both IP whitelisting and authentication (AuthRequired() middleware), the /mcp_message endpoint only applies IP whitelisting - and the default IP whitelist is empty, which the middleware treats as "allow all". This means any network attacker can invoke all MCP tools without authentication, including restarting nginx, creating/modifying/deleting nginx configuration files, and triggering automatic config reloads - achieving complete nginx service takeover. At time of publication, there are no publicly available patches.
mcp/router.go AI: 1 vulnerabilities 1 true positive(s) CVE-2026-33032
--- cache/nginx-ui_v2.3.3/mcp/router.go	2026-04-19 12:37:20.691130313 +0000+++ cache/nginx-ui_v2.3.4/mcp/router.go	2026-04-19 12:37:22.311230867 +0000@@ -11,7 +11,7 @@ 		func(c *gin.Context) { 			mcp.ServeHTTP(c) 		})-	r.Any("/mcp_message", middleware.IPWhiteList(),+	r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(), 		func(c *gin.Context) { 			mcp.ServeHTTP(c) 		})
AI Analysis
Vulnerability Existed: yes
TRUE POSITIVE
Insufficient Authentication / Authorization Bypass mcp/router.go [11-13]
Old Code
    r.Any("/mcp_message", middleware.IPWhiteList(),
        func(c *gin.Context) {
            mcp.ServeHTTP(c)
        })
Fixed Code
    r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
        func(c *gin.Context) {
            mcp.ServeHTTP(c)
        })
CVE Analysis Results:
CVE-2026-33032: Yes
View CVE Description
Nginx UI is a web user interface for the Nginx web server. In versions 2.3.5 and prior, the nginx-ui MCP (Model Context Protocol) integration exposes two HTTP endpoints: /mcp and /mcp_message. While /mcp requires both IP whitelisting and authentication (AuthRequired() middleware), the /mcp_message endpoint only applies IP whitelisting - and the default IP whitelist is empty, which the middleware treats as "allow all". This means any network attacker can invoke all MCP tools without authentication, including restarting nginx, creating/modifying/deleting nginx configuration files, and triggering automatic config reloads - achieving complete nginx service takeover. At time of publication, there are no publicly available patches.
mcp/router_test.go AI: Not Sure 1 false positive(s) CVE-2026-33032
--- /dev/null+++ cache/nginx-ui_v2.3.4/mcp/router_test.go@@ -0,0 +1,35 @@+package mcp++import (+	"net/http"+	"net/http/httptest"+	"testing"++	"github.com/0xJacky/Nginx-UI/settings"+	"github.com/gin-gonic/gin"+	"github.com/stretchr/testify/assert"+)++func TestMCPEndpointsRequireAuthentication(t *testing.T) {+	gin.SetMode(gin.TestMode)++	originalIPWhiteList := settings.AuthSettings.IPWhiteList+	t.Cleanup(func() {+		settings.AuthSettings.IPWhiteList = originalIPWhiteList+	})++	settings.AuthSettings.IPWhiteList = nil++	router := gin.New()+	InitRouter(router)++	for _, endpoint := range []string{"/mcp", "/mcp_message"} {+		req := httptest.NewRequest(http.MethodPost, endpoint, nil)+		w := httptest.NewRecorder()++		router.ServeHTTP(w, req)++		assert.Equal(t, http.StatusForbidden, w.Code)+		assert.JSONEq(t, `{"message":"Authorization failed"}`, w.Body.String())+	}+}
AI Analysis
Vulnerability Existed: not sure
FALSE POSITIVE
Missing authentication on MCP endpoints mcp/router_test.go lines 1-35
Old Code
<no existing code in this diff; the test file is newly added to detect missing auth>
Fixed Code
Added a regression test that sets `settings.AuthSettings.IPWhiteList = nil`, initializes the router, and verifies that POST requests to `/mcp` and `/mcp_message` return HTTP 403 with `{"message":"Authorization failed"}`.
CVE Analysis Results:
CVE-2026-33032: Yes
View CVE Description
Nginx UI is a web user interface for the Nginx web server. In versions 2.3.5 and prior, the nginx-ui MCP (Model Context Protocol) integration exposes two HTTP endpoints: /mcp and /mcp_message. While /mcp requires both IP whitelisting and authentication (AuthRequired() middleware), the /mcp_message endpoint only applies IP whitelisting - and the default IP whitelist is empty, which the middleware treats as "allow all". This means any network attacker can invoke all MCP tools without authentication, including restarting nginx, creating/modifying/deleting nginx configuration files, and triggering automatic config reloads - achieving complete nginx service takeover. At time of publication, there are no publicly available patches.
Showing 1 to 3 of 3 results