[공격] 분석 — CVE-2026-59726
An unauthenticated POST /mcp API in pre‑3.16.3 Ruflo containers grants remote command execution, provider‑API key theft and AgentDB poisoning; block the endpoint and upgrade to ≥ 3.16.3 immediately.
📋 요약
- 심각도 critical · CVSS 10.0 · EPSS 0.00442 · 악용난이도 moderate
🔍 공격 기법
-
공격 표면
POST /mcp와POST /mcp/:group엔드포인트가 기본 docker‑compose 배포 시 인증 없이 노출됨(AV:N/PR:N/UI:N).- JSON 바디에
tools/call,terminal_execute등 실행 명령을 포함하면 내부 MCP bridge가 역직렬화 후 OS command 함수(exec,system)를 호출한다(CWE‑20).
-
정찰
- 네트워크 스캔(예: Nmap)으로 해당 포트·서비스 확인 →
curl http://<host>:<port>/mcp로 200 응답 여부 체크.
- 네트워크 스캔(예: Nmap)으로 해당 포트·서비스 확인 →
-
초기 접근
- 인증 요구가 없으므로 공격자는 임의 IP에서 바로 POST 요청을 전송한다. 복잡한 준비 없이(AC:L) JSON 페이로드만 전달하면 된다.
-
실행·권한 획득
- 역직렬화된 명령이
terminal_execute로 전달돼/bin/sh쉘이 브리지 컨테이너 내부에 생성된다. - 컨테이너는 기본 root 권한으로 실행되므로 환경 변수(
PROVIDER_API_KEY)를 읽어 탈취하거나 파일 시스템에 접근한다.
- 역직렬화된 명령이
-
지속
AgentDB학습‑스토어(예: SQLite 혹은 파일 기반) 내부에 악의적인 패턴을 삽입해 향후 자동화된 코드 생성 시 명령이 재실행되도록 만든다.- 역방향 쉘 스크립트를
/tmp등에 남겨 지속적인 C2 연결을 유지할 수 있다.
-
영향 확대
- Docker socket(
/var/run/docker.sock)이 마운트된 경우, 컨테이너 내부에서docker명령을 실행해 호스트 전체 컨테이너를 제어한다(잠재적 호스트 탈취). - API 키 유출 → 클라우드 리소스 남용, 데이터 변조·유출 등 복합 피해가 발생한다.
- Docker socket(
-
CVSS 벡터와 실제 조건 매핑
- AV:N → 네트워크에서 직접 접근 가능(엔드포인트 노출).
- AC:L → 특별한 기술 없이 간단히 JSON 전송.
- PR:N → 인증 요구 없음.
- UI:N → 사용자 상호작용 불필요.
다중 소스에서 일관성이 확인됐으며(교차검증), EPSS 0.00442는 실제 악용 가능성은 낮지만 CVSS 10.0과 결합해 높은 대응 우선순위를 요구한다.
악용 가능성: AV:N·AC:L·PR:N·UI:N 벡터는 공격자가 네트워크만 연결되면 인증·권한·사용자 개입 없이 바로 요청을 전송할 수 있음을 의미합니다. 즉, 기본 docker‑compose 구성에서 MCP 브리지의 POST /mcp 와 POST /mcp/:group 엔드포인트가 외부에 노출돼 있기만 하면, 공격자는 별도의 사전 권한 없이 바로 tools/call 파라미터에 terminal_execute를 지정해 컨테이너 쉘을 획득할 수 있습니다. EPSS = 0.00442(≈0.44 %)는 현재까지 실제 악용 사례가 드물지만 완전히 무시하기엔 충분히 관찰된 점수를 보여, 이론적 심각도와 별개로 실전 위험이 존재함을 뒷받침합니다. KEV에 등재되지 않은 것은 아직 대규모 공격 캠페인이 없다는 의미이며, 따라서 “moderate” 등급이 유지됩니다. 공격 표면은 HTTP POST 요청만으로 접근 가능한 두 엔드포인트와 tool·call 파라미터이며, 추가적인 네트워크 제한(예: 방화벽)이나 인증이 없을 경우 난이도는 매우 낮습니다. 한 번 쉘에 침투하면 동일 컨테이너 내 API 키를 탈취하고 AgentDB 학습 데이터를 변조할 수 있어, 권한 상승·지속성 확보까지 직선적인 체인을 형성합니다.
💥 영향 분석
- 브리지 컨테이너 내 루트 쉘 획득 → 전체 파일시스템·볼륨 접근.
- Provider API 키 탈취 → 외부 클라우드 서비스 무단 사용.
- AgentDB 학습 데이터 변조 → 자동 생성 코드에 지속적 악성 로직 삽입.
- Docker socket이 마운트돼 있으면 호스트 전체 컨테이너 제어까지 확대될 위험.
🔗 관련 취약점·체이닝
- CWE‑20: 부적절한 입력 검증 → 역직렬화 과정에서 임의 객체 실행.
- CWE‑284: 권한 부여 실패 (인증 미설정) → 초기 진입점 제공.
- CWE‑269: 권한 상승(컨테이너 루트) → Docker socket 마운트 시 호스트 탈취 체인으로 연결될 수 있음(추정).
- 전형적인 체인: 무인 API 노출 → RCE → Docker socket 이용 → 호스트 컨테이너 제어 → 내부 네트워크 Lateral Movement.
🔎 탐지
/mcp엔드포인트에 대한 비정상적인POST(Content‑Type: application/json, 페이로드 크기 > 1 KB) 로그.- 브리지 컨테이너 내부에서
execve("/bin/sh"),system()호출 시 발생하는 프로세스 생성 이벤트(EDR). - 컨테이너에서 외부 IP로 향하는 역방향 TCP/UDP 연결 또는 비정상적인 DNS 조회.
🛡️ 완화 방안
- 네트워크 차단: 방화벽·ACL 로
/mcp및/mcp/:group경로에 대한 외부 접근을 즉시 차단하거나 인증 프록시를 적용한다. - 인증 강화: API 게이트웨이 혹은 기본 인증(Basic, Token) 도입으로 PR:N 상태를 해제한다.
- 컨테이너 권한 최소화:
NoNewPrivileges, 제한된seccomp프로파일, 읽기‑전용 파일시스템, Docker socket 미마운트 등으로 실행 권한을 축소한다. - 패치 적용: Ruflo ≥ 3.16.3 로 업그레이드하여 인증 검증 및 역직렬화 방어가 포함된 최신 코드를 배포한다.
- 모니터링 연동: 위 탐지 지표를 SIEM·EDR에 연결해 실시간 알림을 설정하고, 의심 행동 발견 시 컨테이너 자동 격리 정책을 적용한다.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=10.0 · non-KEV · EPSS=0.00442 · exploit=moderate · in_scope=None