REPORT / 01
Analysis Report · nginx-ui v2.3.3 → v2.3.4 — CVE-2026-33032
Shared security patch analysis results
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
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