Chrome 확장 프로그램, MCP 서버를 통한 심각한 보안 위협
크롬 확장 프로그램, MCP, 그리고 샌드박스 탈출에 대한 이야기를 해봅시다. 지난주에 저희 시스템은 의심스러운 크롬 확장 프로그램을 감지했습니다. 이 확장 프로그램은 로컬호스트(localhost)의 포트로 메시지를 보냈는데, 처음에는 특별히 이상할 것이 없었지만 자세히 살펴보니 로컬 머신에서 실행 중인 MCP(Machine Context Protocol) 서버와 통신하고 있었습니다. 크롬 확장 프로그램이 MCP 서버와 통신할 수 있다는 사실은 심각한 위험입니다. 크롬의 샌드박스 모델과 같은 일반적인 보안 조치도 이 위협에 대응하기 어렵습니다. 확장 프로그램은 인증되지 않은 파일 시스템 접근을 포함하여, 때로는 전체 시스템 점유까지 가능합니다. 이는 단순히 작은 문제가 아니라 엄청난 보안 취약점입니다. 사실, 어떤 크롬 확장 프로그램이라도 이 취약점을 악용할 수 있습니다. 특별한 권한이 필요하지 않습니다. 만약 호스트 머신에 취약한 MCP 서버가 실행되고 있다면, 시스템이 완전히 노출될 수 있습니다. 이미 파일 시스템 접근, 슬랙(Slack), 와츠앱(WhatsApp) 등의 서비스와 연결된 취약한 MCP 서버를 발견한 바 있습니다. 이제 이 문제는 이론적인 위협이 아니라 현실적인 위협으로 변했습니다. 로컬에서 MCP를 실행 중이라면, 지금이 보안을 재평가해야 할 때입니다. 저희는 이 문제를 발견했을 때 놀랐고, 다른 사람들도 이를 인식하기 전에 조치를 취해야 할 때입니다. 의심스러운 로컬호스트 연결 브라우저 확장 프로그램 활동을 모니터링하며, 저희의 탐지 엔진은 크롬 확장 프로그램이 로컬호스트로 네트워크 요청을 보내는 것을 감지했습니다. 확장 프로그램 자체는 악성 행위의 징후가 없었지만, 목적지가 눈에 띄었습니다. 이 확장 프로그램은 사용자의 머신에서 실행 중인 MCP 서버와 통신하고 있었습니다. MCP 프로토콜은 AI 에이전트가 엔드포인트의 시스템 도구와 리소스를 인터페이스하는 데 사용됩니다. MCP: 기본적으로 열려 있음 MCP 클라이언트가 MCP 서버와 어떻게 통신하는지 이해해봅시다. 두 가지 표준 전송 구현 방법이 있습니다: 1. 서버-전송 이벤트(Server-Sent Events, SSE) — MCP 서버가 HTTP POST 요청을 통해 통신합니다. 2. 표준 입력/출력(Standard Input/Output, stdio) — MCP 서버가 프로세스의 표준 입력 및 출력 스트림을 통해 통신합니다. MCP 서버를 구현할 때 개발자는 MCP 서버가 어떻게 통신할지 선택할 수 있으며, 서버는 두 가지 전송 방법을 모두 지원할 수 있습니다. 중요한 점은 이 전송 계층 자체가 어떠한 인증 메커니즘도 구현하거나 요구하지 않는다는 것입니다. 실제로 대부분의 MCP 서버는 기본적으로 인증을 강제하지 않습니다. 로컬 사용을 위해 SSE 기반 MCP 서버는 일반적으로 로컬호스트의 포트에 바인딩되어, 동일한 머신에서 실행되는 프로세스(예: MCP 클라이언트)로부터 접근할 수 있게 됩니다. 샌드박스, 망치를 만나다 로컬 SSE 기반 MCP 서버가 어떻게 작동하는지, 그리고 동일한 머신에서 실행되는 프로세스에 의해 접근 가능한 것인지 이해했다면, 크롬 확장 프로그램이 이를 접근할 수 있는지도 다시 생각해볼 필요가 있습니다. 통신 흐름은 다음과 같습니다: 먼저, mcp.so에서 파일 시스템 변형을 허용하는 로컬 SSE 기반 MCP 서버를 설정했습니다. 서버의 README에 나와 있는 설정 지침을 따랐습니다: node dist/index.js ~/work/mcp/private_directory 그 다음, 로컬 포트 3001(로컬 SSE 기반 MCP 서버에서 일반적으로 사용되는 포트)에 연결하려는 백그라운드에서 실행되는 크롬 확장 프로그램을 만들었습니다. 실제로는 이 포트가 다양할 수 있으므로, 실제 확장 프로그램은 활성화된 MCP 인스턴스를 찾기 위해 로컬 포트를 스캔해야 합니다. 확장 프로그램은 서버 정보를 가져오고, 도구 목록을 검색하여 MCP 서버가 제공하는 도구를 실행하려고 시도했습니다. 이 크롬 확장 프로그램은 MCP 서버의 도구에 제한 없이 접근할 수 있었으며, 인증이 필요하지 않았습니다. 이 확장 프로그램은 마치 서버의 노출된 기능의 핵심 부분인 것처럼 파일 시스템과 상호 작용하고 있었습니다. 이로 인해 악용 가능성이 커지고, 시스템이 완전히 타결될 위험이 있습니다. 다른 MCP 서버와 통합하는 것은 프로토콜의 설계 목표 덕분에 거의 노력이 필요하지 않았습니다. 다양한 MCP 서버와 상호 작용할 수 있는 통합 인터페이스를 제공하기 때문입니다. 우리는 슬랙 MCP를 설정해보았는데, 크롬 확장 프로그램은 이에 접근하고 노출된 기능을 사용할 수 있었습니다. 이 프로토타입은 크롬 확장 프로그램 아키텍처에서 완전한 샌드박스 탈출을 보여줍니다. 크롬은 공개 웹사이트에서 실행되는 악의적인 스크립트를 통해 내부 인프라가 탐지되거나 공격받는 것을 방지하기 위해 개인 네트워크 접근을 제한하는 엄격한 조치를 도입했습니다. 2023년 9월, 크롬 117이 안정 버전으로 출시되면서 비공개 네트워크 요청을 차단하는 기능이 적용되었습니다. 하지만 크롬 확장 프로그램은 일반 웹 페이지보다 높은 권한으로 운영되기 때문에 여전히 크롬의 샌드박스 원칙을 준수하도록 설계되어 있습니다. 즉, 운영 체제와 로컬 리소스로부터 분리되어야 합니다. 하지만 로컬호스트에 대한 제한 없는 접근은 이 격리를 무너뜨리고, 로컬 머신과 더 넓은 조직 환경 간에 예상치 못한 상호 작용을 가능하게 합니다. 특히 로컬 MCP 서버를 통해 노출된 서비스들이 있을 경우 더욱 그렇습니다. 혼돈을 관리하라 MCP 생태계는 급속도로 성장하여 수천 개의 서버가 다양한 기능을 제공하고 있습니다. 이는 강력한 새로운 가능성들을 가져왔지만, 동시에 점차 증가하는 보안 위험도 함께 가져왔습니다. 시연에서 보듯, 특별한 권한 없이도 단순한 크롬 확장 프로그램이 샌드박스를 무너뜨리고, 로컬 MCP 서버에 연결하여 사용자 대신 특권 작업을 수행할 수 있습니다. 이는 브라우저 샌드박스가 격리 모델을 유지하려고 설계된 목적을 무너뜨리는 것입니다. MCP 서버가 파일 시스템, 슬랙, 와츠앱 등의 도구에 접근할 수 있도록 노출되면서 인증을 강제하지 않는다면, 위험은 이론적인 관심사에서 기업 전반에 걸친 위협으로 번집니다. 보안 팀에게 이는 새로운 공격 벡터가 아니라, 심각하게 과소평가된 완전히 새로운 공격 표면입니다. MCP는 종종 최소한의 감독이나 접근 제어 없이 개발 환경과 프로덕션 시스템에서 배포되고 있습니다. 방치한다면, 이는 전통적인 방어선을 우회하여 엔드포인트에 열린 후문으로 작용할 수 있습니다. MCP 사용을 관리하고, 엄격한 접근 정책을 시행하며, 확장 프로그램의 행동을 면밀히 모니터링하는 것이 절대적인 우선 순위가 되어야 합니다. 이 사건은 크롬 확장 프로그램과 MCP 서버 간의 상호 작용이 얼마나 위험할 수 있는지를 명확히 보여줍니다. 크롬 확장 프로그램의 보안을 재검토하고, MCP 서버의 사용과 설정을 엄격히 관리해야 할 필요성을 강조합니다. 이런 취약점들은 개발자와 기업의 보안을 크게 위협할 수 있으며, 즉시 대응이 요구됩니다.