Model Context Protocol(MCP)로 여러 AI 에이전트를 묶어 자동화 워크플로를 돌리는 오케스트레이션 툴이 최근 빠르게 늘고 있습니다. Claude Code와 OpenAI Codex를 지휘하는 “에이전트 메타 하네스” Ruflo도 그중 하나로, GitHub 스타 6만 7000개에 활성 사용자가 약 100만 명에 이를 만큼 널리 쓰입니다. 그런데 지난 7월 보안 업체 Noma Security가 이 툴의 기본 배포 구성에서 인증 없이 셸 명령을 실행할 수 있는 최고 등급 취약점을 발견했습니다. 공격자 입장에서는 코드 한 줄 작성할 필요 없이 HTTP POST 요청 하나만 보내면 에이전트 스웜 전체를 장악할 수 있는 구조였습니다. 이 글에서는 이번 RufRoot 취약점(CVE-2026-59726)의 공격 구조와 파급력, 그리고 패치 내용을 정리합니다.
Ruflo와 MCP 브리지
Ruflo는 사용자와 Claude Code·Codex 에이전트 스웜 사이에서 오케스트레이션을 담당하는 계층입니다. 핵심은 Express.js로 구현된 MCP Bridge로, 셸 실행·데이터베이스 조작·에이전트 관리·메모리 저장을 포함해 233개 도구(tool)를 MCP 프로토콜로 노출합니다. 모든 에이전트 동작과 도구 호출, 메모리 조작이 이 브리지 하나를 거쳐 가는 사실상의 단일 관제탑인 셈입니다. 자체 학습 메모리인 AgentDB에 패턴을 축적해 이후 응답에 반영하는 것도 이 브리지의 역할입니다.
취약점 구조 — 인증 없는 233개 도구
문제는 3.16.3 이전 버전의 기본 docker-compose 배포에서 MCP 브리지의 POST /mcp, POST /mcp/:group 엔드포인트가 인증 없이 네트워크에 열려 있었다는 점입니다. 공격자는 이 엔드포인트로 tools/call을 호출해 terminal_execute 도구를 실행시키는 것만으로 브리지 컨테이너 내부 셸을 얻을 수 있었습니다.
| 요소 | 내용 |
|---|---|
| 취약 엔드포인트 | POST /mcp, POST /mcp/:group (인증 없음) |
| 노출 포트 | 3001(MCP 브리지), 27017(MongoDB) |
| 핵심 악용 도구 | terminal_execute — 브리지 컨테이너 내 셸 실행 |
| 1차 피해 | LLM 프로바이더 API 키 탈취 |
| 2차 피해 | AgentDB 학습 패턴 오염, MongoDB 대화 기록 열람 |
영향 범위가 큰 이유는 셸 접근 자체보다 그 이후에 있습니다. 브리지 컨테이너 안에서는 각 LLM 프로바이더의 API 키가 환경 변수로 노출돼 있어 손쉽게 탈취할 수 있고, 탈취한 키로 새로운 에이전트 스웜을 임의로 띄워 공격자가 원하는 작업을 수행시킬 수 있습니다. 여기에 더해 자가 학습 메모리인 AgentDB의 패턴 스토어에 조작된 항목을 심으면, 이후 그 플랫폼을 쓰는 모든 사용자에게 침해가 끝난 뒤에도 오염된 응답이 계속 나갈 수 있습니다. 공격자가 백도어 페이로드를 /app 디렉터리에 심어 지속성을 확보한 사례도 보고됐습니다.
패치와 “패치 저항성” 문제
Ruflo 3.16.3은 MCP 브리지 기본 바인딩을 루프백(127.0.0.1)으로 바꾸고, terminal_execute를 서버 측 executeTool 게이트 뒤로 숨겨 기본적으로 비활성화했습니다. 여기에 MongoDB 인증 활성화, Bearer 토큰 인증 도입, 컨테이너 격리·CORS 정책 강화가 함께 들어갔습니다. 다만 보안 매체들이 이 취약점을 “패치 저항적(patch-resistant)”이라 부르는 이유는 따로 있습니다. 버전을 올려도 취약했던 기간 동안 AgentDB에 이미 심어진 오염된 패턴이나 MongoDB에 남은 변조 흔적은 자동으로 정리되지 않기 때문에, 바이너리 업데이트만으로는 침해 이전 상태로 돌아가지 않습니다.
주의사항
- Ruflo를 운영 중이면 3.16.3 이상으로 즉시 업그레이드한다
- 3001·27017 포트가 외부에 노출돼 있었는지 확인하고, 방화벽에서 즉시 차단한다
- 노출 이력이 있다면 모든 LLM 프로바이더 API 키를 로테이션한다
- AgentDB 패턴 스토어에서 비정상적으로 삽입된 항목이 없는지 감사한다
- MongoDB 대화 기록에 변조·유출 흔적이 있는지 점검한다
마무리
RufRoot는 Ruflo 하나만의 문제가 아니라, MCP 서버를 기본값으로 인증 없이 여는 관행이 AI 에이전트 생태계 전반에 퍼져 있다는 걸 보여준 사례에 가깝습니다. LangChain·CrewAI·AutoGPT 계열처럼 비슷한 구조로 셸 실행 도구를 MCP로 노출하는 다른 오케스트레이션 툴을 운영 중이라면, “개발 도구니까 괜찮겠지”라는 가정을 걷어내고 기본 배포 구성의 포트 노출 여부부터 점검해볼 필요가 있습니다.
참고
- Ruflo MCP Flaw Lets Unauthenticated Attackers Run Commands and Poison AI Memory (The Hacker News)
- RufRoot: The MCP Bridge Vulnerability That Turns Agents Into Rogue Admins (Noma Security)
- Patch-Resistant Ruflo Flaw Can Unleash Malicious AI Agent Swarms (Dark Reading)
- Critical Ruflo flaw lets attackers hijack AI agents through exposed MCP bridge (CSO Online)