[방어] 분석 — CVE-2026-59726
Critical unauthenticated RCE in pre‑3.16.3 Ruflo MCP bridge can be stopped immediately by blocking the
/mcpHTTP endpoint at the network layer.
📋 요약
- 심각도 critical · CVSS 10.0 · EPSS 0.00442 · 악용난이도 moderate
🔍 공격 기법
- 공격자는 Docker‑compose 로 배포된 Ruflo 3.16.3 미만 컨테이너의
POST /mcp혹은POST /mcp/:groupAPI에 인증 없이 접근한다. - 요청 본문에 직렬화된 명령 객체(
tools/call → terminal_execute)를 포함하면 브리지 컨테이너 내부에서 쉘을 실행하고, 해당 셸을 통해 provider API 키를 탈취하거나 AgentDB 학습 데이터를 조작한다.
악용 가능성: CVSS 벡터 AV:N/AC:L/PR:N/UI:N는 네트워크를 통한 원격 접근이 가능하고 공격 난이도가 낮으며 인증 없이 바로 실행될 수 있음을 의미합니다. 실제로 ruflo 3.16.2 이하 배포본에서는 docker‑compose 설정에 의해 /mcp 및 /mcp/:group POST 엔드포인트가 인증 없이 노출되어, 네트워크 내부 혹은 동일 서브넷의 공격자가 HTTP 요청만으로 terminal_execute 툴을 호출해 브리지 컨테이너 쉘을 획득할 수 있습니다. EPSS 0.00442는 이 취약점이 아직 널리 악용되지 않았지만, 실제 위협이 존재함을 보여주며, KEV에 등재되지 않은 점은 현재까지 대규모 공격 캠페인이 보고되지 않았음을 의미합니다. 트리거 조건은 단순히 해당 POST 엔드포인트에 올바른 JSON 바디를 전송하는 것이며, 파라미터 tools/call과 terminal_execute가 직접적인 실행 경로가 됩니다. 따라서 공격 표면은 Docker 네트워크 내부에서 노출된 HTTP API(특히 /mcp, /mcp/:group)와 해당 엔드포인트를 라우팅하는 프록시/로드밸런서까지 확대됩니다. 이러한 조건만 충족하면 인증 없이 쉘을 얻고, API 키와 AgentDB 데이터를 탈취·조작할 수 있어 난이도는 낮고 악용 가능성은 현실적입니다.
💥 영향 분석
- 성공 시 공격자는 브리지 컨테이너 내에서 루트 권한 쉘을 획득한다.
- 탈취된 provider API 키로 외부 서비스 남용·비용 발생 가능.
- AgentDB 패턴을 변조해 인공지능 모델 학습 결과를 오염시켜 서비스 품질 저하 및 신뢰도 손실 위험이 있다.
🔗 관련 취약점·체이닝
- 동일한
unauthenticated POST경로를 이용하는 다른 컨테이너 관리 API(예: Docker Remote API)와 연계하면 컨테이너 탈출이나 Docker socket 접근으로 전체 호스트 권한 상승이 가능하다.
🔎 탐지
| 로그 소스 | 주요 필드 / 패턴 | SIEM 쿼리 예시 (Elastic/Kibana) |
|---|---|---|
| Web server access log (nginx, apache) | request_method:POST + uri:/mcp* | event.category:"web" AND http.request.method:"POST" AND (url.path:/\/mcp/ OR url.path:/\/mcp\/.*/) AND NOT user.id:* |
| Application container stdout/stderr | "terminal_execute" 혹은 "shell spawned" 문자열 | log.file.path:*ruflo* AND (message:"terminal_execute" OR message:"shell spawned") |
| Auditd / syscalls (EDR) | execve 호출 시 argv[0]에 /bin/sh -c 와 함께 JSON 페이로드 포함 | event.type:"process_start" AND process.name:"sh" AND process.args:*"{\"tools\":{\"call\":\"terminal_execute\""* |
오탐 튜닝
- 정상적인 내부 자동화 스크립트가
/mcp를 사용한다면,user.id혹은source.ip로 허용된 사설 IP 범위만 포함하도록 필터링한다. execve탐지는 빈번한 CI/CD 파이프라인 실행과 겹칠 수 있으므로process.parent.name:"docker-compose"와 같이 부모 프로세스 조건을 추가해 오탐을 감소시킨다.
🛡️ 완화 방안
| 조치 | 내용 | 난이도/운영 영향 | 검증 방법 |
|---|---|---|---|
| 인증 프록시 적용 | Nginx/Traefik 등 앞단에 기본 인증(Basic Auth) 혹은 OAuth2 프록시를 두어 /mcp 호출을 차단 | 중 – 기존 라우팅 수정 필요, 서비스 가용성 영향 최소 | 401 응답 확인 및 정상 트래픽은 200 반환 |
| 컨테이너 권한 최소화 | --security-opt=no-new-privileges, seccomp 프로파일 적용, CAP_DROP=ALL 설정 | 중 – Docker‑compose 파일 수정 필요, 재배포 시 잠시 다운타임 발생 가능 | docker inspect 로 보안 옵션 확인 |
| 로그 및 모니터링 강화 | 위 탐지 항목을 SIEM에 연동하고 알림 룰 활성화 | 쉬움 – 기존 로그 파이프라인에 규칙 추가만 필요 | 테스트 요청 전송 후 알림 수신 여부 검증 |
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=10.0 · non-KEV · EPSS=0.00442 · exploit=moderate · in_scope=None