GitHub에서 1,200개의 MCP 설정을 스캔했습니다. 그 결과는 다음과 같습니다.
요약
GitHub의 1,200개 MCP 설정 파일을 분석한 결과, 모든 설정에서 보안 취약점이 발견되었습니다. 특히 20.7%가 심각하거나 높은 수준의 보안 문제를 보유하고 있어 AI 에이전트의 행동 제어에 대한 경각심을 일깨웁니다.
핵심 포인트
- MCP 설정 파일 1,200개 전수 조사 결과 100% 보안 취약점 발견
- 20.7%의 설정에서 하드코딩된 비밀값 및 제한 없는 셸 실행 등 심각한 문제 확인
- LLM 출력 가드레일과 달리 에이전트의 행동(Action)에 대한 보안 감사 부재
- 오픈 소스 보안 도구 Pluto AgentGuard를 통한 취약점 스캔 결과 공유
실제 AI 에이전트 배포의 보안 태세에 대한 심층 분석 — 그리고 이를 해결하기 위해 제가 구축한 오픈 소스 도구.
요약 (TL;DR)
저는 공개 GitHub 저장소에서 1,200개의 실제 MCP (Model Context Protocol) 설정 파일을 수집하여, 제가 직접 만든 오픈 소스 보안 도구로 스캔했으며 다음과 같은 사실을 발견했습니다:
- 100%가 보안 취약점(security gaps)을 보유함
- 20.7%가 심각(CRITICAL) 또는 높음(HIGH) 수준의 문제 보유 (하드코딩된 비밀값(secrets), 인증되지 않은 엔드포인트(unauthenticated endpoints), 제한 없는 셸 실행(unrestricted shell execution))
- 1,200개 중 0개가 응답 제한(response limits) 또는 세션 캡(session caps)을 설정함
- 가장 인기 있는 11개의 MCP 서버(합계 307K개 이상의 스타 보유) 모두에서 문제점이 발견되었으며, 그 중 5개는 심각(CRITICAL) 수준이었음
해당 도구는 Pluto AgentGuard입니다. 이 도구는 무료이며, 로컬에서 실행되고, 1,200개의 설정을 스캔하는 데 약 3분이 소요됩니다.
문제점: LLM의 출력은 보호했지만 에이전트의 행동은 잊었습니다
AI 보안 논의는 LLM이 무엇을 말하는지(say) — 환각(hallucinations), 탈옥(jailbreaks), 유해한 콘텐츠 — 에 집중되어 왔습니다. 프롬프트 필터링(prompt filtering)과 출력 가드레일(output guardrails)을 위한 제품 카테고리들이 이미 존재합니다.
하지만 공격 표면(attack surface)이 이동했습니다. 현대의 AI 에이전트는 단순히 텍스트를 생성하는 것에 그치지 않고, 웹 브라우징, 셸 명령 실행, 데이터베이스 쿼리, 코드 푸시, CI/CD 파이프라인 트리거 등 **행동(do things)**을 합니다. Model Context Protocol (MCP)은 이러한 기능들을 LLM에 연결하는 지배적인 표준입니다.
여기에 괴리가 있습니다: 에이전트가 실제로 무엇을 할 수 있는지를 결정하는 설정 계층(configuration layer)을 감사(auditing)하는 사람이 아무도 없습니다. MCP 설정 파일 — 보통 claude_desktop_config.json 또는 .mcp.json — 은 "나의 코딩을 도와주는 AI 어시스턴트"와 "내 컴퓨터에서 임의의 명령을 실행할 수 있는 AI 어시스턴트" 사이의 보안 경계입니다.
저는 알고 싶었습니다: 실제 환경에서 이러한 설정들은 얼마나 안전할까요?
방법론: 1,200개의 설정을 수집한 방법
수집
저는 GitHub Code Search API를 사용하여 공개 저장소 전반에서 실제 MCP 설정 파일을 찾았습니다. 검색 대상은 다음과 같습니다:
mcpServers를 포함하는claude_desktop_config.json파일- MCP 서버 정의가 포함된
.mcp.json파일 mcp_config.json및 이와 유사한 변형 파일들
수집 규칙 (Collection rules):
- 저장소당 최대 3개의 설정 파일 (모노레포(monorepos)로 인한 편향 방지)
- SHA-256 콘텐츠 해시를 통한 중복 제거 (동일한 설정은 한 번만 계산)
- MCP 서버 정의가 포함된 유효한 JSON으로 파싱되는 파일만 포함
- API 페이지 간 7초 지연 (GitHub 속도 제한: 분당 10회 요청)
결과: 2026년 6월 25일에 수집된 1,159개의 고유 저장소로부터 얻은 1,200개의 유효한 설정.
스캐닝 (Scanning)
각 설정은 Pluto AgentGuard의 scan_mcp_config 함수를 사용하여 스캔되었으며, 다음 사항을 점검합니다:
- 위험한 서버 패키지 (Dangerous server packages) — 고위험 권한(셸 실행, 브라우저 제어, 데이터베이스 쓰기, 소스 제어 쓰기)을 부여하는 것으로 알려진 13개 이상의 MCP 서버로 구성된 큐레이션된 데이터베이스
- 인증 누락 (Missing authentication) — 인증 헤더나 토큰이 없는 원격 MCP 엔드포인트 (
http://또는https://URL) - 불안전한 전송 (Insecure transport) — 원격 연결 시 HTTPS 대신 HTTP 사용
- 하드코딩된 비밀 정보 (Hardcoded secrets) — 설정 값에 포함된 API 키, 토큰, 비밀번호 및 개인 키와 일치하는 18개 이상의 정규 표현식(regex) 패턴
- 컨텍스트 안전성 공백 (Context safety gaps) — 응답 크기 제한 (
max_tokens,max_response_length) 및 세션 제한 (max_turns,session_timeout) 누락 - 인간 개입(Human-in-the-loop, HITL) 부재 — 승인 게이트(approval gates) 없이 구성된 고위험 서버
각 발견 사항에는 심각도(CRITICAL / HIGH / MEDIUM / LOW / INFO)가 할당되며 OWASP Agentic AI 위협 카테고리에 매핑됩니다.
전체 스캔은 로컬에서 약 3분 만에 완료되었습니다. API 키 사용 없음. 클라우드 사용 없음. LLM 호출 없음.
결과: 수치 (Results: The Numbers)
전체 요약 (1,200개 설정)
| 지표 | 값 |
|---|---|
| 총 스캔된 설정 수 | 1,200 |
| ... |
모든 설정에서 최소 하나 이상의 MEDIUM(중간) 등급 발견 사항이 있었습니다. 다섯 개 중 하나는 CRITICAL(심각) 또는 HIGH(높음) 이슈를 포함하고 있었습니다.
인기 서버 (11개 설정, 총 307K+ GitHub stars)
저는 또한 가장 인기 있고 가장 많이 복사된 설정들이 어떤 모습인지 확인하기 위해, 별도로 별(star) 수가 가장 많은 11개의 MCP 서버를 스캔했습니다:
| 서버 | Stars | 최대 심각도 | 주요 발견 사항 |
|---|---|---|---|
| Context7 | 58K | 🔴 CRITICAL | 원격 엔드포인트에 인증 없음 |
| ... | |||
| 5 CRITICAL. 4 HIGH. 11개 중 응답 제한(response limits)이나 세션 제한(session caps)이 있는 경우는 0개였습니다. |
저는 CRITICAL 등급의 리포지토리들에 보안 이슈를 제기했습니다: Context7, Chrome DevTools, Serena, Activepieces, mcp-chrome.
4가지 가장 흔한 리스크 (예시 포함)
1. 승인 없는 브라우저 제어 (CRITICAL)
Chrome DevTools MCP (44K★)는 에이전트에게 전체 Chrome DevTools Protocol 접근 권한을 부여합니다. 이는 다음을 의미합니다:
✅ 기존 Chrome 세션에 연결
✅ 페이지 컨텍스트 내에서 JavaScript 실행
✅ 네트워크 응답 본문 캡처 (자격 증명, 토큰, PII(개인정보))
...
프롬프트 인젝션(Prompt injection) — 예를 들어, 에이전트가 읽고 있는 웹페이지에 숨겨진 악의적인 지시 사항 — 은 에이전트가 Gmail, 은행 또는 기업 SSO에서 세션 쿠키를 탈취하도록 지시할 수 있습니다.
기본 설정에는 승인 게이트(approval gates)가 전혀 없습니다. 에이전트는 자율적으로 행동합니다.
2. 샌드박싱 없는 셸 실행 (CRITICAL)
Serena (26K★)는 에이전트에게 제한 없는 셸(shell) 접근 권한을 부여합니다.
Context7 (58K★) 및 Activepieces (23K★)는 인증(authentication) 없이 HTTPS를 통해 원격 MCP 엔드포인트(endpoints)를 노출합니다. URL을 아는 사람이라면 누구나 연결할 수 있습니다.
일반적인 설정은 다음과 같습니다:
{
"mcpServers": {
"context7": {
...
API 키도, OAuth도, mTLS도 없습니다. 이는 인증 없이 REST API를 배포하고 아무도 찾지 않기를 바라는 것과 같습니다.
4. 응답 제한 누락 (MEDIUM — 하지만 보편적임)
1,200개의 설정 중 단 하나도 MCP 서버에 max_response_length 또는 max_tokens를 설정하지 않았습니다. 이는 **컨텍스트 스터핑 공격 (context stuffing attacks)**을 가능하게 합니다. 악의적인 도구가 과도하게 큰 응답을 반환하여 에이전트의 시스템 프롬프트(system prompt)와 안전 지침(safety instructions)을 컨텍스트 창(context window) 밖으로 밀어내는 방식입니다.
설정에 단 두 줄만 추가하면 되는, 상상할 수 있는 가장 쉬운 해결책임에도 불구하고 아무도 이를 수행하지 않습니다.
이것이 중요한 이유: "Left of Boom" 격차
현재의 AI 보안 스택은 다음과 같습니다:
[프롬프트 필터 (Prompt Filters)] → [LLM] → [출력 가드레일 (Output Guardrails)] → [에이전트 동작 (Agent Actions)]
✅ 커버됨 ✅ 커버됨 ❌ 모니터링되지 않음
팀들은 프롬프트 인젝션(prompt injection) 탐지와 출력 필터링에 투자합니다. 하지만 LLM이 MCP 도구를 통해 실제로 수행하는 동작인 **에이전트 동작 레이어 (agent action layer)**는 사각지대입니다. LLM의 도구 사용 결정과 실제 실행 사이에는
| 명령어 | 기능 |
|---|---|
aguard scan | MCP 설정, 비밀 정보(secrets), 권한에 대한 정적 분석 (Static analysis) |
| ... |
빠른 시작 (Quick start)
pip install pluto-aguard
# MCP 설정 스캔
...
차별점 (What makes it different)
대부분의 MCP 보안 도구들은 설정 스캔을 수행합니다. AgentGuard는 제가 다른 곳에서 본 적 없는 세 가지 기능을 추가로 제공합니다:
-
정책 테스트 (Policy testing) (
aguard test): "설정에 문제가 있는가?"라고 묻는 대신, "당신의 _정책(policy)_이 실제로 공격을 차단하는가?"를 묻습니다. 프롬프트 인젝션 (prompt injection), 데이터 유출 (data exfiltration), 권한 상승 (privilege escalation), 컨텍스트 조작 (context manipulation), 공급망 (supply chain), 그리고 사회 공학 (social engineering)을 다루는 22가지 시나리오를 포함합니다. -
가상 시뮬레이션 (What-if simulation) (
aguard whatif): 새로운 MCP 서버를 추가하거나 정책 규칙을 변경하기 전에 그 영향을 시뮬레이션하세요. 리스크 점수(risk score)의 변화량을 확인할 수 있습니다. 배포 전에 회귀(regressions) 문제를 포착하세요. -
증거 생성 (Evidence generation) (
aguard evidence): 보안 검토 승인을 위해 구조화된 증거 패킷(스캔 결과 + 테스트 결과 + OWASP 매핑 + 리스크 점수)을 생성합니다. 산출물(artifacts)을 통한 출시 게이트(launch gates)가 필요한 엔터프라이즈 팀에 유용합니다.
CI/CD 통합
AgentGuard는 GitHub Action으로 제공됩니다:
- uses: arpitha-dhanapathi/pluto-aguard@v0.9.2
with:
scan-path: ./
...
또한 JSON, Markdown, HTML, 그리고 SARIF 출력 형식을 지원합니다.
지금 바로 해야 할 일
AI 에이전트 설정에서 MCP 서버를 사용하고 있다면, 다음의 5분 보안 체크리스트를 확인하세요:
1. 스캔 실행 (30초)
pip install pluto-aguard
aguard scan ./your-project/
2. 응답 제한 추가 (1분)
설정 내의 모든 MCP 서버에 다음을 추가하세요:
{
"max_response_length": 8000,
"max_turns": 20,
...
3. 위험한 서버에 HITL 추가 (2분)
Chrome DevTools, Serena, 파일 시스템(filesystem), 또는 셸(shell) 실행이 가능한 서버를 사용하는 경우 — 인간 참여형(human-in-the-loop, HITL) 승인을 활성화하세요. 정확한 메커니즘은 사용하는 클라이언트(Claude Desktop, Cursor, VS Code 등)에 따라 다르지만, 원칙은 다음과 같습니다: 에이전트는 파괴적인 작업을 실행하기 전에 반드시 물어봐야 합니다.
4. 원격 엔드포인트 인증 (2분)
MCP 서버가 원격(stdio 대신 HTTPS URL)인 경우, 인증(auth)을 추가하세요:
{
"mcpServers": {
"my-server": {
...
5. CI에 AgentGuard 추가 (보너스)
MCP 설정 오류를 유발하는 PR(Pull Request)을 차단하세요:
- uses: arpitha-dhanapathi/pluto-aguard@v0.9.2
with:
scan-path: ./
...
더 큰 그림 (The Bigger Picture)
MCP는 출시된 지 18개월밖에 되지 않았지만, 이미 에이전트와 도구 간 통신을 위한 사실상의 표준 (de facto standard)이 되었습니다. 생태계는 빠르게 움직이고 있습니다. awesome-mcp-servers의 별(star) 개수는 9만 개를 넘어섰고, 수천 개의 서버가 존재하며, 주요 플랫폼(Claude, Cursor, VS Code, Windsurf)들이 이를 네이티브로 지원하고 있습니다.
하지만 보안 도구들은 그 속도를 따라가지 못하고 있습니다. 우리는 에이전트 인프라의 "빠르게 움직이고 파괴하라 (move fast and break things)" 단계에 있으며, 사람들이 프로덕션 환경에 배포하는 설정들은 마치 2005년의 웹과 같습니다. 인증도 없고, 제한도 없으며, 모든 것을 전적으로 신뢰합니다.
좋은 소식은 해결 방법이 간단하다는 것입니다. 인증 헤더 (Auth headers), 응답 제한 (response limits), 인간 개입 (HITL, Human-in-the-loop) 승인, 그리고 CI에서의 스캔만 있으면 됩니다. 이 중 어느 것도 새로운 기술을 필요로 하지 않습니다. 단지 기존의 보안 원칙을 새로운 영역에 적용하는 것뿐입니다.
나쁜 소식은, 현재 거의 아무도 이를 실행하고 있지 않다는 점입니다.
이제 이를 해결해 봅시다.
Pluto AgentGuard는 오픈 소스 (Apache 2.0)이며, Python으로 작성되었고, 완전히 로컬에서 실행됩니다. 이 내용이 유용했다면 GitHub에서 별(star)을 눌러주세요.
질문이나 공유할 발견 사항이 있나요? Issue를 생성하거나 LinkedIn에서 저를 찾아주세요.
Tags: #security #ai #opensource #python #mcp #agents
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기