nginx-ui MCP 엔드포인트 노출: CVE-2026-33032와 AI 인프라 보안
CVE-2026-33032로 드러난 nginx-ui MCP 엔드포인트 무인증 노출을 분석하고 AI 인프라의 인증, 격리, 감사 대응을 정리한다.
2026-08-14 · 최초 발행 2026-04-18
nginx-ui의 MCP(Model Context Protocol) 엔드포인트가 인증 없이 공개 인터넷에 노출된 CVE-2026-33032는 AI 어시스턴트가 접근하는 관리 기능이 곧바로 서버 공격 표면이 될 수 있음을 보여준다. Shodan에서는 2,648개 인스턴스가 공개 인터넷에서 관측됐고, 보안 연구자와 자동화 스캐너에서는 탈취 시연도 확인됐다.
무인증 MCP 관리 기능이 만든 위험
CVE-2026-33032는 Critical Function에 대한 인증 부재(CWE-306)로 분류된다. nginx-ui는 웹서버 관리 기능과 함께 LLM 기반 AI 어시스턴트가 자연어 요청으로 nginx 설정을 다룰 수 있도록 MCP 서버를 내장한다. 이 기능이 기본 인증 없이 외부에서 접근 가능한 상태로 출하된 것이 핵심 문제다.
| 항목 | 내용 |
|---|---|
| CVE 식별자 | CVE-2026-33032 |
| 취약점 유형 | Missing Authentication for Critical Function (CWE-306) |
| CVSS v3.1 | 9.8 (Critical) |
| 영향 제품 | nginx-ui (1x.x.x 이하 다수 버전) |
| 노출 규모 | Shodan 기준 2,648개 인스턴스 |
| 주요 위험 | 서버 설정 변경, 임의 셸 명령 실행, AI 어시스턴트 탈취 |
| 발견자 | Watchtowr Labs, 0xLC 연구 그룹 |
| 패치 상태 | nginx-ui 3.x에서 MCP 인증 기본값 활성화 |
MCP 서버가 맡는 보안 경계
MCP는 Anthropic이 2024년 11월 공개한 개방형 프로토콜이다. LLM이 외부 도구, 데이터 소스, 파일 시스템과 상호작용하는 방식을 표준화하며, 클라이언트인 LLM 에이전트와 도구를 노출하는 MCP 서버로 구성된다.
STDIO, HTTP/SSE, WebSocket 같은 전송 방식을 지원하고, Resources는 읽기, Tools는 실행, Prompts는 템플릿 제공 역할을 맡는다. 다만 인증과 인가는 프로토콜이 강제하는 영역이 아니라 MCP 서버 구현체의 책임이다.
nginx-ui는 자연어 요청을 처리하기 위해 다음 MCP 도구를 노출한다.
nginx.reload: 설정 재로드nginx.config.edit: 설정 파일 수정shell.execute: 임의 셸 명령 실행fs.read / fs.write: 파일 읽기·쓰기logs.tail: 로그 스트리밍ssl.cert.issue: Let's Encrypt 인증서 발급
문제는 이 도구가 127.0.0.1에 바인딩되지 않고 0.0.0.0으로 노출될 수 있으며, API 토큰 검증이 옵트인(opt-in) 방식으로 설계됐다는 점이다.
도구 호출이 서버 탈취로 이어지는 경로
공격자는 Shodan에서 http.favicon.hash:"nginx-ui"를 찾거나 /api/mcp/v1/ 경로의 응답 시그니처를 이용해 대상을 식별할 수 있다. MCP 도구 목록이 인증 없이 반환되면 shell.execute 같은 고위험 기능까지 외부 호출 범위에 들어간다.
이후에는 SSH 키 삽입, cron 등록, systemd 서비스 생성으로 지속성을 확보할 수 있다. 관리 대상 웹사이트의 리버스 프록시 설정을 변조해 악성 리디렉션을 만들거나, 로그·SSL 키·환경 변수를 수집하는 단계로 이어질 수 있다.
관리 API가 반복하는 기본값의 실패
이 취약점은 한 제품의 결함에만 머물지 않는다. 관리용 API가 “로컬에서만 접근될 것”이라고 가정하고 바인딩을 열어두거나, 인증을 사용자가 따로 켜야 하는 옵션으로 남기는 설계에서 같은 문제가 반복된다.
| 패턴 | 대표 사례 | 근본 개선 |
|---|---|---|
| 기본 바인딩 0.0.0.0 | Redis, MongoDB | 로컬루프백 기본 |
| 인증 옵트인 | Elastic, Jenkins | 인증 강제 |
| 기본 계정 유지 | Airflow, Solr | 임의 패스워드 생성 |
| 관리 포트 공개 | Kubernetes kubelet | 관리 네트워크 분리 |
| 덤프 엔드포인트 | Prometheus, Spring | 인증 보호 |
초기 설정의 마찰을 줄이려다 보안 기본값이 약화되고, README의 주의 문구에 안전성을 의존하는 경우가 많다. 새 버전을 설치해도 기존 설정이 그대로 유지되면 취약한 상태 역시 계속 남는다.
MCP를 배포할 때 필요한 방어 계층
MCP는 LLM 에이전트가 실제 시스템을 조작할 수 있게 한다. 기존 API 보안 원칙을 적용하되, 도구의 영향 범위에 맞춰 더 엄격하게 경계를 세워야 한다.
- TLS 1.3을 강제하고 상호 TLS(mTLS)를 권장한다.
- OAuth 2.1 + PKCE 또는 API 토큰 + HMAC 서명을 사용한다.
read:logs,exec:reload처럼 도구별 권한 스코프를 분리한다.- 모든 tool 호출을 구조화 로그로 남기고 SIEM과 연동한다.
- 도구별 호출 빈도와 동시성을 제한한다.
shell.execute류 도구는 별도 MCP 서버로 격리한다.- 파괴적 작업은 사용자 승인을 필수화한다.
- 실행 컨테이너, chroot, seccomp를 이용해 실행 환경을 분리한다.
기업 환경에서는 MCP 서버를 관리 VLAN이나 VPN 뒤에 두고, Cloudflare Access·Tailscale·Teleport 같은 제로트러스트 프록시를 접근 게이트로 사용할 수 있다. Kubernetes에서는 Admission Controller로 인증과 네트워크 정책을 강제하고, OPA·Cedar를 통해 도구 호출 정책을 코드로 관리한다. 토큰은 Vault나 AWS Secrets Manager에 중앙화하며, 분기별 노출 스캔과 CVE 경보·버전 인벤토리의 자동 매칭도 함께 운영한다.
외부 노출을 발견하고 조치하는 운영
MCP와 AI 인프라가 늘어날수록 Attack Surface Management(ASM)는 관리 API의 공개 상태를 계속 확인하는 운영 체계가 된다.
| 활동 | 도구 | 주기 |
|---|---|---|
| 외부 자산 발견 | Shodan, Censys, Assetnote | 일 |
| MCP 시그니처 스캔 | 자체 룰 + Nuclei | 일 |
| 서비스 지문 | HTTPX + FingerprintX | 주 |
| 인증 상태 확인 | 커스텀 Probe + API 호출 | 주 |
| 취약 버전 매칭 | CPE/SBOM + CVE 피드 | 일 |
| 리스크 스코어링 | EPSS + 내부 가중치 | 일 |
| 조치 요청 | Ticketing 연동 | 발견 즉시 |
CVE-2026-33032에서 드러난 것은 MCP 프로토콜 자체보다 구현체의 기본값, 운영자의 인식, 조직의 노출 관리 역량이다. 2,600여 인스턴스가 기본 설정으로 인터넷에 노출된 상황에서 AI 어시스턴트와 에이전트의 배포를 늘릴수록 MCP 엔드포인트는 일반 API와 동등하거나 더 엄격하게 다뤄야 한다. 모델 보안만으로는 충분하지 않으며, 모델과 도구 사이의 통로를 인증, 네트워크 분리, 휴먼 인 더 루프, 감사 로깅으로 보호해야 한다.
Sources
- CVE-2026-33032 - NVD
- Model Context Protocol Specification
- nginx-ui GitHub Repository
- MCP Endpoint Exposure Mass Scan - Watchtowr Labs
- Shodan Report: Unauthenticated MCP Servers
- MCP Security Best Practices - Anthropic
- OAuth 2.1 Draft Specification
- Attack Surface Management for AI Infra - SANS
- nginx-ui Mass Takeover Analysis - Censys
- CISA Securing AI Infrastructure Guidance