Azure DevOps MCP와 에이전트 PR 리뷰에서의 혼란스러운 대리인(confused-deputy) 문제
Azure DevOps MCP and the confused-deputy problem in agent PR review
핵심 요약
Azure DevOps MCP 서버에서 PR의 숨겨진 텍스트가 AI 에이전트의 권한을 악용할 수 있는 보안 취약점이 발견되었습니다.
- 보안 취약점 — PR 내 숨겨진 텍스트가 AI 에이전트의 도구 호출을 조작할 수 있음
- 권한 분리 — 읽기 전용 권한과 쓰기 권한을 분리하여 위험을 최소화해야 함
- MCP 보안 — 공식 서버라도 무조건 신뢰하지 말고 도구별 권한 범위를 설정해야 함
- 워크플로우 제안 — 에이전트의 제안을 적용하기 전 인간의 검토나 테스트 통과가 필수적임
최근 마이크로소프트의 공식 Azure DevOps MCP 서버에 대한 보고서에서 '혼란스러운 대리인(confused-deputy)' 엣지 케이스가 설명되었습니다. 풀 리퀘스트(PR)에 숨겨진 텍스트가 사용자의 Azure DevOps 권한으로 작동 중인 AI 리뷰 에이전트의 도구 호출에 영향을 줄 수 있다는 내용입니다. 보고서에 따르면 이 경로는 Copilot CLI와 Claude Code 모두에서 재현되었으며, 7월 21일 기준으로 수정된 릴리스나 CVE는 발표되지 않았습니다.
제가 얻은 실질적인 교훈은 에이전트가 단순히 코드를 '리뷰'하는 중일 때라도 저장소와 PR 텍스트를 신뢰할 수 없는 입력으로 취급해야 한다는 것입니다:
- 발견/리뷰 단계에는 읽기 전용 ID를 사용하세요
- 쓰기 권한이 있는 도구는 별도의 승인 단계 뒤에 배치하세요
- 도구에 전달된 정확한 인수와 그 원인이 된 소스 텍스트를 기록하세요
- 공식 서버라고 해서 위험이 없다고 가정하지 말고 MCP 서버 버전을 고정하고 검토하세요
- 에이전트가 제안한 변경 사항을 적용하기 전에 고정된 테스트를 거치거나 사람이 직접 확인하도록 하세요
마이크로소프트의 더 광범위한 MCP 보안 지침에서도 프롬프트 인젝션, 지나치게 넓은 접근 권한, 섀도우 서버, 혼란스러운 대리인 권한 부여를 반복되는 위험 요소로 지적하고 있습니다. 다른 분들은 코딩 에이전트 워크플로우에서 리뷰 권한과 실행 권한을 어떻게 분리하고 있는지 궁금합니다. 두 개의 에이전트나 두 개의 ID를 설정하는 것이 실용적인가요, 아니면 오히려 번거로움만 더하는 건가요?


