MCP 서버를 CrewAI agent와 통합할 때 중요한 보안 모범 사례에 대해 알아보세요.
Stdio
전송 방식을 사용할 경우).MCPServerAdapter
를 MCP 서버에 연결하도록 구성하기 전에 다음을 반드시 확인하십시오:
StdioServerParameters
로 실행되는 스크립트나 명령어가 신뢰할 수 있는 소스에서 왔으며 적절한 파일 시스템 권한을 가지고 있는지 확인해야 합니다. 악의적인 Stdio 서버 스크립트는 여전히 로컬 시스템에 피해를 줄 수 있습니다.MCP-Proxy
라고 부르겠습니다)가 에이전트가 ThirdPartyAPI
와 상호작용할 수 있도록 허용합니다.MCP-Proxy
는 ThirdPartyAPI
의 인증 서버와 통신할 때 자체의 단일 고정 client_id
를 사용합니다.MCP-Proxy
가 여러분을 대신해 ThirdPartyAPI
에 접근할 수 있도록 승인합니다. 이 과정에서 ThirdPartyAPI
의 인증 서버는 여러분의 브라우저에 MCP-Proxy
의 client_id
에 대한 동의 쿠키를 설정할 수 있습니다.MCP-Proxy
와의 OAuth 플로우를 시작하지만, ThirdPartyAPI
의 인증 서버를 속이도록 설계되어 있습니다.ThirdPartyAPI
의 인증 서버가 이미 존재하는 MCP-Proxy
의 client_id
에 대한 동의 쿠키를 확인하면, 다시 동의를 묻지 않고 건너뛰기 할 수 있습니다.MCP-Proxy
가 (공격자에게) 인증 코드를 전달하도록 속거나, 공격자가 여러분을 가장해 MCP-Proxy
에 사용할 수 있는 MCP 인증 코드를 받게 될 수 있습니다.MCP-Proxy
자체가 동의 화면을 표시하도록 해야 합니다.localhost
) 또는 인트라넷에 있는 서버에 요청을 보낼 수 있도록 합니다. 이는 MCP 서버를 로컬(예: 개발용)로 실행하고 브라우저와 유사한 환경에서 agent를 사용하는 경우(일반적인 CrewAI 백엔드 구성에서는 드물지만) 또는 MCP 서버가 내부 네트워크상에 있을 경우 특히 위험할 수 있습니다.
MCP 서버 구현자를 위한 대응 전략:
Origin
및 Host
헤더 검증: MCP 서버(특히 SSE 서버)는 Origin
및/또는 Host
HTTP 헤더를 검증하여 요청이 예상되는 도메인/클라이언트로부터 오는지 확인해야 합니다.localhost
(127.0.0.1)로 바인딩: 개발을 위해 MCP 서버를 로컬에서 실행할 때는 0.0.0.0
대신 127.0.0.1
로 바인딩하세요. 이를 통해 네트워크의 다른 기기에서 접근하지 못하도록 막을 수 있습니다.MCPServerAdapter
는 URL에 제공된 스킴(http
또는 https
)을 그대로 따릅니다.ServiceA
를 위한 토큰일 수도 있음)을 별도의 적절한 검증 없이 다른 하위 API(ServiceB
)로 그대로 전달하는 것을 의미합니다. 특히, ServiceB
(또는 MCP 서버 자체)는 명시적으로 자신들을 위해 발급된 토큰만 받아야 합니다(즉, 토큰 내의 ‘audience’ 클레임이 해당 서버/서비스와 일치해야 함).
위험성:
MCPServerAdapter
에서 사용하는 자격 증명(있는 경우)은 필요한 도구에 접근하는 데 꼭 필요한 권한만 가지고 있도록 해야 합니다.../
시퀀스 차단).Stdio
의 경우)는 작업에 필요한 최소 권한만 보유하도록 하세요. 툴 자체도 자신의 기능 수행에 필요한 최소한의 권한만으로 동작해야 합니다.