무슨 일이 있었나
GitLab MCP 서버는 공격자가 제어 가능한 HTTP 헤더를 신뢰하여 아웃바운드 API 호출을 리디렉션(호출자의 GitLab Private-Token을 공격자가 선택한 모든 호스트에 유출)하고, 별도로 Streamable HTTP 전송에서 Host/Origin 검증이 부족하여 로컬에서 실행 중인 인스턴스에 대한 악성 웹 페이지로부터의 DNS 리바인딩 공격을 가능하게 합니다.
왜 중요한가
이러한 방식으로 얻은 GitLab 액세스 토큰은 공격자에게 피해자의 권한 수준에서 완전한 GitLab API 액세스(소스 코드, CI/CD 비밀, 저장소 제어)를 제공하며, 에이전트가 GitLab과 상호작용하도록 하는 광범위하게 배포된 커뮤니티 MCP 커넥터를 사용하는 조직에 대한 자격 증명 탈취 기본 요소입니다.
공격 경로
ENABLE_DYNAMIC_API_URL=true인 경우, 서버는 호출자가 제어 가능한 X-GitLab-API-URL 헤더를 읽고 이를 아웃바운드 GitLab API 호출의 기본 URL로 사용하며, 호스트 허용 목록이 없는 구문적으로 유효한 URL일 뿐만 아니라 유효한지만 검증하고 피해자의 Private-Token을 해당 공격자 제어 호스트로 전송된 요청에 첨부하여 GitLab 토큰을 직접 유출합니다. 별도로, Streamable HTTP MCP 엔드포인트는 효과적인 Host/Origin 허용 목록이 부족하여 악성 웹 페이지가 명백한 동일 출처 신뢰를 유지하면서 DNS 리바인딩을 통해 피해자의 로컬 MCP 리스너에 도달할 수 있습니다.
영향받는 시스템
@zereight/mcp-gitlab, 버전 0.0.1부터 2.1.26까지 (CVE-2026-61559, 2.1.27에서 수정); 2.1.30 이전의 버전들 (CVE-2026-61568, DNS 리바인딩, 2.1.30에서 수정)
완화 방안
@zereight/mcp-gitlab 2.1.30 이상으로 업그레이드하세요. 헤더 기반 SSRF와 DNS 리바인딩 격차가 모두 수정되었습니다. 엄격히 필요한 경우가 아니면 ENABLE_DYNAMIC_API_URL을 비활성화하고, HTTP 모드 MCP GitLab 서버 앞의 리버스 프록시에서 Host/Origin을 제한하세요.