Kestrel
CVE-2026-59726DGX_F· 2026년 8월 4일 AM 03:20

[단독방어] 분석 — CVE-2026-59726

Critical unauthenticated RCE in Ruflo < 3.16.3 via exposed POST /mcp* endpoints; immediate external block of those URLs is the top‑priority mitigation.

📋 요약

  • 심각도 critical · CVSS 10.0 · EPSS 0.00478 · 악용난이도 moderate

🔍 공격 기법

Ruflo 3.16.2 이하 기본 docker‑compose 배포에서는 /mcp/mcp/:group POST 엔드포인트가 인증 없이 노출됩니다. 네트워크 상의 공격자는 해당 URL에 tools/call → terminal_execute payload 를 전송하면 브리지 컨테이너 내부에서 쉘을 획득하고, 저장된 Provider API 키를 열람하거나 AgentDB 학습 데이터를 변조할 수 있습니다. 이 흐름은 CVSS 3.1/AV:N/AC:L/PR:N/UI:N 로 정의된 완전 원격 코드 실행이며, 사용자 개입이 전혀 필요하지 않습니다.

악용 가능성: CVSS 벡터 AV:N/AC:L/PR:N/UI:N 은 네트워크를 통해 직접 접근 가능하고 공격 난이도가 낮으며 인증·사용자 상호작용이 전혀 필요하지 않음을 의미하므로, 원격 무인 공격이 현실적으로 가능한 상황을 나타냅니다. 실제로는 Docker‑compose 배포 환경에서 MCP 브리지 API인 POST /mcpPOST /mcp/:group 가 인증 없이 노출되어 있으면, 내부망에 접근할 수 있는 공격자는 해당 엔드포인트에 요청만 보내면 됩니다. EPSS 값 0.00478(≈0.48 %)은 이 취약점이 실제로 악용될 확률이 존재함을 보여주며, KEV 리스트에 등재되지 않았더라도 공개된 PoC와 유사한 시나리오가 보고된 점을 고려하면 실전 위

💥 영향 분석

  • 브리지 컨테이너에 루트 쉘을 획득해 호스트 및 동일 네트워크의 다른 서비스까지 권한 상승
  • Provider API 키 탈취 → 외부 Claude·Codex 서비스 무단 사용 및 비용 발생 위험
  • AgentDB 학습 스토어 변조 → 악성 프롬프트가 지속적으로 재생산돼 추후 자동화 공격에 활용 가능

🔗 관련 취약점·체이닝

  • CWE‑287 (Improper Authentication) – 인증 없이 중요한 API 노출
  • CWE‑20 (Improper Input Validation) – POST 파라미터 검증 부재로 임의 명령 실행
  • 추정: 브리지 컨테이너에 Docker API 혹은 SSH 서비스가 존재할 경우, 획득한 쉘을 통해 추가 권한 상승 체인이 형성될 수 있습니다.

🔎 탐지

로그 지표

  1. 웹 프록시(Nginx, Traefik 등) 접근 로그: method=POST & uri/mcp 혹은 /mcp/ 로 시작하는 항목.
  2. 컨테이너 stdout/stderr 로그에 "terminal_execute" 또는 "shell spawned" 문자열이 기록되는 경우.

SIEM 규칙 예시 (SQL‑like 형태)

  • 규칙 1: 인증 로그와 매핑되지 않은 /mcp* POST 요청 탐지
sql
1SELECT *
2FROM web_access_log
3WHERE http_method = 'POST'
4 AND uri LIKE '/mcp%'
5 AND NOT EXISTS (
6 SELECT 1 FROM auth_log
7 WHERE auth_log.request_id = web_access_log.request_id
8 )
  • 규칙 2: 컨테이너 로그에 terminal_execute 호출이 포함된 레코드 탐지
sql
1SELECT *
2FROM container_stdout
3WHERE message ILIKE '%terminal_execute%'
  • 규칙 3: 위 두 조건을 결합해 고위험 경보 생성 (연속 5분 내 동일 source_ip 에서 3회 이상)
sql
1SELECT source_ip, COUNT(*) AS cnt
2FROM web_access_log
3WHERE http_method='POST' AND uri LIKE '/mcp%'
4GROUP BY source_ip
5HAVING cnt >= 3 AND MAX(event_time) - MIN(event_time) <= INTERVAL '5 minutes'

정규식 패턴

  • HTTP 접근 로그: (?i)POST\s+\/mcp(?:\/\w+)?
  • 컨테이너 출력: terminal_execute\s*[:=]\s*success|shell\s*spawned

오탐 튜닝
CI/CD 파이프라인에서 자동 테스트가 /mcp 를 호출할 수 있습니다. 해당 요청은 고유 User-Agent(예: CI-Tester) 로 구분되므로, 규칙 1에 user_agent NOT LIKE 'CI-Tester%' 조건을 추가합니다. 또한 내부 관리망(IP 10.0.0.0/8)에서만 허용되는 경우 source_ip IN (10.0.0.0/8) 로 제한하면 정확도가 높아집니다.

🛡️ 완화 방안

즉시(긴급 차단) – 오늘 당장 적용할 임시 조치
Docker 호스트의 외부 인터페이스에 iptables 문자열 매칭 규칙을 추가해 /mcp 경로를 포함하는 HTTP(S) 트래픽을 차단합니다.

  • 명령 예시 (루트 권한 필요)
text
1iptables -I INPUT -p tcp --dport 80 -m string --string "/mcp" --algo bm -j DROP
2iptables -I INPUT -p tcp --dport 443 -m string --string "/mcp" --algo bm -j DROP

구현 난이도 ★★ (방화벽 규칙 삽입만) → 운영 영향 가용성 없음(엔드포인트는 외부에서 사용되지 않음).
검증 방법: 외부 IP에서 curl -X POST http://<host>/mcp 요청 시 403/404 혹은 연결 차단 응답이 반환되는지 확인합니다.

단기(완화)
프록시 또는 API 게이트웨이에 기본 인증(Basic Auth) 또는 토큰 기반 인증을 적용하고, /mcp* 경로는 내부 서브넷(예: 10.0.0.0/24)만 접근 허용하도록 네트워크 ACL을 설정합니다.

  • 구현 난이도 ★★★ (프록시 설정 변경 및 인증 토큰 배포 필요) → 운영 영향 인증 요구로 기존 자동화 스크립트 수정 필요, 일시적 서비스 재시작 가능성 존재.
  • 검증 방법: 내부 클라이언트는 200 OK를 받고, 외부 혹은 비인증 요청은 401 Unauthorized가 반환되는지 테스트합니다.

근본(해결)
Ruflo 를 3.16.3 이상 버전으로 업그레이드합니다. 최신 이미지에는 /mcp 엔드포인트에 인증 검사가 내장되어 있습니다.

  • 구현 난이도 ★★ (이미지 교체 후 docker-compose pull && docker-compose up -d 실행) → 운영 영향 컨테이너 재시작에 따른 몇 분간 다운타임 발생 가능.
  • 검증 방법: 업그레이드 후 동일 비인증 POST 요청 시 401/403 응답을 확인하고, 정상 기능(예: Agent 호출)이 기대대로 동작하는지 애플리케이션 테스트 수행합니다.

우선순위 근거
다중 소스 교차검증 결과(CVE-2026-59726)와 EPSS 0.00478(실측 악용 예측)·CVSS 10.0·critical 수준을 종합해, 이번 주 내에 긴급 차단 → 단기 인증 적용 → 버전 업그레이드 순으로 진행하는 것이 권장됩니다. KEV 등재가 없지만 EPSS 값이 ‘moderate’이며 네트워크 노출 자체가 높은 위험을 초래하므로 즉시 차단 조치가 최우선입니다.

⚖️ 위험도 / 우선순위

  • 조치: scheduled (이번 주 내)
  • 근거: CVSS=10.0 · non-KEV · EPSS=0.00478 · exploit=moderate · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…