Each language version is independently generated for its own context, not a direct translation.
1. MCP 란 무엇인가요? (AI 의 'USB-C' 포트)
과거에는 AI 가 외부 도구 (날씨 정보, 계산기, 검색 등) 와 연결하려면 도구마다 다른 케이블과 어댑터를 만들어야 했습니다. 하지만 MCP는 모든 AI 와 도구를 연결해주는 범용 USB-C 포트처럼 작동합니다.
- 장점: 어떤 AI 가든, 어떤 도구든 이 표준만 따르면 바로 연결되어 작동합니다. (호환성 극대화)
- 문제: 너무 많은 종류의 기기를 연결하려면, 표준 규격이 너무 엄격하면 안 됩니다. 그래서 "필수 (MUST)" 항목은 적고, **"권장 (SHOULD)"**이나 "선택 (MAY)" 항목이 대폭 늘어났습니다.
2. 핵심 문제: "호환성"이라는 이름의 함정
논문의 저자들은 이 '높은 호환성'이 바로 해커에게 문을 열어주는 열쇠가 된다고 말합니다.
비유: "선택 사항"이라는 이름의 빈 방
imagine imagine 건물을 짓는다고 생각해보세요. 건축 규정은 "문은 반드시 잠그라 (필수)"고 하지만, "창문은 바람이 불 때만 닫으라 (권장)"고 합니다.
- 건축가 (SDK 개발자): "창문 닫는 건 선택 사항이니까, 귀찮으면 안 닫아도 되겠지?"라고 생각해서 창문을 열어둔 채 건물을 지었습니다.
- 해커: "아하! 창문이 열려 있군!" 하고 들어와서 집 안을 뒤집어엎습니다.
MCP 에서도 개발자들이 '권장 사항'을 구현하지 않고 넘어간 경우가 많았습니다. 해커는 이 **구현되지 않은 빈 공간 (규약 위반)**을 이용해 AI 를 속이거나 시스템을 마비시킵니다.
3. 해커는 어떻게 공격할까요? (호환성 남용 공격)
이 논문은 이 빈 공간들을 이용해 일어나는 공격을 **'호환성 남용 공격 (Compatibility-abuse attacks)'**이라고 부릅니다.
- 침묵하는 주입 (Silent Prompt Injection):
- 상황: 서버가 "도구 목록이 바뀐 것 같습니다!"라고 알려주는 알림을 보내는 건 '권장 사항'입니다.
- 현실: 어떤 언어로 만든 프로그램 (SDK) 은 이 알림 기능을 아예 만들지 않았습니다.
- 공격: 해커가 서버를 조작해 악성 도구를 몰래 추가합니다. 하지만 알림 기능이 없어서 AI 는 "아, 도구가 바뀐 줄도 모르고" 그 악성 도구를 그대로 실행해버립니다. 사용자는 전혀 모릅니다.
- 시스템 마비 (DoS):
- 상황: "핑 (Ping) 요청 빈도는 설정 가능해야 합니다"라는 권고가 있습니다.
- 현실: 빈도 제한을 못 하게 구현된 경우가 있습니다.
- 공격: 해커가 엄청난 양의 요청을 보내 시스템이 멈추게 만듭니다.
4. 연구팀의 해결책: "모든 언어를 통하는 번역기"
이런 문제를 찾기 위해 연구팀은 세 가지 혁신적인 도구를 만들었습니다.
- 범용 번역기 (Universal IR Generator):
- Python, Java, Go 등 10 가지 언어로 된 프로그램은 각각 다른 문법을 씁니다. 연구팀은 이 복잡한 코드들을 **모두 하나의 공통된 언어 (중간 표현, IR)**로 번역했습니다. 마치 모든 나라의 지도를 하나의 표준 지도로 통일한 것과 같습니다.
- AI 검사관 (Hybrid Static-LLM Analysis):
- 단순히 코드 패턴만 찾는 것은 한계가 있습니다. 연구팀은 **정적 분석 (코드 구조 분석)**과 **LLM(인공지능)**을 섞었습니다.
- 비유: 정적 분석이 "이 방에 창문이 있나?"를 빠르게 찾고, AI 가 "그 창문이 열려 있는지, 그리고 그 창문이 열리면 어떤 위험이 있을까?"를 문맥을 이해하며 판단합니다.
- 공격 시뮬레이터 (Modality-based Exploitability Analysis):
- 모든 버그가 해킹은 아닙니다. 연구팀은 "이 빈 공간이 해커에게 **내용 (Payload)**을 조작할 기회를 주나, 아니면 **시기 (Timing)**를 조작할 기회를 주나?"를 분석했습니다.
- 해커가 통제할 수 있는 요소가 있다면, 그것은 단순 버그가 아닌 치명적인 보안 구멍으로 분류합니다.
5. 결과: 엄청난 발견과 실제 영향
이 도구를 10 개 언어의 SDK 에 적용한 결과는 놀라웠습니다.
- 발견: 총 1,265 개의 잠재적 위험을 찾아냈습니다.
- 보고: 이 중 26 건을 공식적으로 보고했고, 그중 20 건이 인정받았습니다. (5 건은 '최우선' 등급으로 처리됨)
- 반응: MCP 를 만드는 커뮤니티 유지자들은 "이렇게 많은 문제를 하나하나 보고하는 건 불가능하다"며, 이 연구팀의 도구를 공식 검사 도구로 채택하겠다고 했습니다.
6. 결론: 교훈
이 논문의 핵심 메시지는 **"완벽한 호환성을 추구하다 보면 보안 구멍이 생길 수 있다"**는 것입니다.
- AI 개발자: "표준이 권장하는 기능은 다 구현된 줄 알지 마라. 직접 확인하라."
- 표준 제정자: "권장 사항 (SHOULD) 이라도 보안에 중요한 건 '필수 (MUST)'로 바꿔야 한다."
- 일반인: AI 가 외부와 연결될 때, 그 연결고리가 얼마나 튼튼한지, 그리고 그 연결고리에 숨겨진 '선택 사항'들이 얼마나 위험할 수 있는지 경계해야 합니다.
결국, 편의성 (호환성) 과 안전성 (보안) 사이에는 늘 긴장 관계가 존재하며, 우리는 그 균형을 찾아야 한다는 것을 이 논문은 잘 보여줍니다.
Each language version is independently generated for its own context, not a direct translation.
1. 문제 정의 (Problem)
- 배경: MCP 는 다양한 AI 에이전트와 외부 도구/데이터 소스를 연결하기 위해 제안된 표준 프로토콜입니다. 다양한 에이전트와 시나리오를 수용하기 위해 설계된 MCP 는 RFC 스타일의 키워드 (MUST, SHOULD, MAY 등) 를 사용하여 명세를 정의합니다.
- 근본 원인: 다양한 에이전트 환경과의 호환성을 극대화하기 위해, MCP 명세 중 **약 78.5% 가 선택적 **(Optional)입니다. (절대적 필수 조건인 'Unconditional MUST'는 약 21.5% 에 불과함).
- 취약점: SDK 개발자들은 선택적 조항 (SHOULD, MAY 등) 을 구현하지 않거나 선택적으로 구현할 수 있습니다. 이로 인해 **명세와 SDK 구현 간의 불일치 **(Non-compliance)가 발생합니다.
- 공격 벡터: 공격자는 구현되지 않은 조항 (Guardrails) 을 악용하여 **침묵형 프롬프트 인젝션 **(Silent Prompt Injection), DoS(서비스 거부) 등의 공격을 수행할 수 있습니다. 이는 단순한 프로그래밍 오류가 아니라, MCP 의 '호환성 우선' 설계 철학에서 비롯된 본질적인 취약점입니다.
2. 방법론 (Methodology)
저자들은 10 개 이상의 다양한 언어로 작성된 MCP SDK 를 대상으로 한 체계적인 분석 프레임워크를 제안했습니다. 이 프레임워크는 세 가지 핵심 단계로 구성됩니다.
1 단계: 범용 중간 표현 (Universal IR) 생성
- 목표: 서로 다른 프로그래밍 언어 (Python, TypeScript, Go 등) 로 작성된 SDK 를 통일된 형식으로 변환하여 분석의 확장성을 확보합니다.
- 기법: 각 SDK 의 소스 코드를 파싱하여 **조건부 호출 그래프 **(Conditional-call graph)를 추출합니다.
- MCP 조항은 본질적으로 "특정 조건 하에서 특정 동작 (함수 호출) 을 수행한다"는 구조를 가집니다.
- 이를 언어에 구애받지 않는 **중간 표현 **(Intermediate Representation, IR)으로 정규화하여, 모든 SDK 에 동일한 분석 로직을 적용할 수 있게 합니다.
2 단계: 하이브리드 정적 분석 및 LLM 기반 추론 (Hybrid Static-LLM Analysis)
- 목표: 구현되지 않은 조항을 정확하게 식별하면서도 LLM 의 환각 (Hallucination) 을 방지합니다.
- 기법:
- 정적 분석: IR 을 기반으로 코드 슬라이싱 (Code Slicing) 을 수행하여 분석 범위를 전체 코드베이스에서 유한한 서브그래프로 축소합니다.
- LLM 추론: 축소된 코드 조각 (Source Slices) 에 대해 LLM 을 사용하여 의미론적 추론 (Semantic Reasoning) 을 수행합니다. LLM 은 특정 조항이 구현되었는지, 조건이 충족되었는지를 판단합니다.
- **자기 정화 루프 **(Self-refining Loop) LLM 의 신뢰도가 낮으면 키워드를 정제하여 다시 IR 을 검색하고, 최대 반복 횟수를 초과하면 전체 코드를 검색하는 페일백 (Fallback) 메커니즘을 적용합니다.
3 단계: 모드 기반 악용 가능성 분석 (Modality-based Exploitability Analysis)
- 목표: 단순한 구현 누락을 보안 위협이 있는 취약점으로 선별합니다.
- 기법: 조항의 부재가 공격자에게 **페이로드 **(Payload) 또는 **타이밍 **(Timing) 중 하나를 제어할 수 있게 하는지 분석합니다.
- Payload-only: 메시지 내용 제어 가능 (예: 악성 토큰 전송).
- Timing-only: 메시지 전송 시점 제어 가능 (예: DoS).
- Joint: 내용과 시점 모두 제어 가능 (예: 침묵형 인젝션).
- 이 두 차원을 모두 제어할 수 없는 경우 단순 버그로 분류합니다.
3. 주요 기여 (Key Contributions)
- 새로운 공격 표면의 발견: 에이전트의 다양성이 MCP 의 높은 호환성 설계를 유도했고, 이것이 구현 단계에서 보안 격차로 이어져 '호환성 남용 공격'이 가능함을 최초로 체계적으로 증명했습니다.
- 체계적인 분석 프레임워크: 언어 중립적인 IR 생성, 정적 분석과 LLM 의 하이브리드 분석, 그리고 악용 가능성 모드를 기반으로 한 3 단계 분석 파이프라인을 구축했습니다. 이는 기존 패턴 기반 스캐너의 한계를 극복합니다.
- 실제 커뮤니티 영향: 발견된 1,000 개 이상의 잠재적 위험을 MCP 커뮤니티에 보고하여 인정받았으며, 발견된 도구들이 MCP 공식 준수 테스트 (Conformance Testing) 표준 강화 제안 (SEP) 에 통합될 예정임을 확인했습니다.
4. 실험 결과 (Results)
- 분석 범위: 10 개 공식 MCP SDK (Python, TypeScript, Go, Kotlin, Swift, Java, C#, Ruby, Rust, PHP) 와 275 개 프로토콜 조항을 대상으로 분석 수행.
- 발견된 위험:
- 총 **1,270 건의 구현 누락 **(Non-implementations)을 식별.
- 이 중 1,265 건이 악용 가능한 잠재적 위험으로 판별됨.
- 대부분의 누락은 필수 조항이 아닌 선택적 조항 (SHOULD, MAY) 에서 발생했습니다.
- 정확도:
- 정밀도 (Precision): 약 86% (거짓 양성률 14%)
- 재현율 (Recall): 약 87% (거짓 음성률 13.5%)
- 10 개 SDK 중 8 개에서 85% 이상의 재현율을 달성.
- 비용 효율성: 전체 분석 비용은 약 $541.87 (약 2,750 건의 조항 검사) 으로, 건당 약 $0.20 의 매우 낮은 비용으로 대규모 분석이 가능함을 입증했습니다.
- 보고 및 인정:
- 26 건의 보고서를 제출하여 20 건이 인정받음.
- Python SDK 에서는 5 건이 **최우선 순위 **(High Priority, P0/P1)로 분류됨.
- Go 및 TypeScript SDK maintainer 들도 보고된 이슈를 확인함.
5. 의의 및 결론 (Significance)
- 설계적 통찰: 보안 문제는 단순한 코딩 실수가 아니라, **다양성 **(Diversity)에서 비롯된 구조적 문제임을 강조했습니다.
- 실용적 해결책: 발견된 도구들은 MCP 커뮤니티의 표준 강화 제안 (SEP) 에 통합되어, 향후 SDK 개발 시 자동화된 준수 테스트 (Conformance Testing) 도구로 활용될 예정입니다.
- 미래 방향: MCP 설계자, SDK 개발자, 에이전트 개발자에게 각자의 관점에서 보안 기준을 강화할 것을 제안하며, 선택적 조항을 필수 조항으로 격상하거나 구현 누락을 방지하는 프로세스를 도입해야 함을 역설했습니다.
이 논문은 AI 에이전트 프로토콜의 보안이 단순한 애플리케이션 레벨을 넘어, 프로토콜 설계와 SDK 구현의 일치성에서부터 시작되어야 함을 보여주는 중요한 연구입니다.