Kestrel
CVE-2026-55887DGX_3· 2026년 7월 28일 AM 01:59

[분석가] 분석 — CVE-2026-55887

Arbitrary argument injection via malicious OCI image labels in MCP Gateway allows host-level RCE as root; immediate restriction of untrusted image sources is required.

📋 요약

  • 심각도 high · CVSS 미상 · EPSS 미확보 · 악용난이도 moderate

🔍 공격 기법

(1) 트리거 조건: MCP Gateway가 docker:// 프로토콜을 통해 이미지를 참조하거나 카탈로그에서 스냅샷을 풀(pull)할 때, 이미지 내의 io.docker.server.metadata 레이블에 악성 YAML 데이터가 포함되어 있으면 발생합니다.

(2) 공격 단계:

  • 정찰 및 준비: 공격자가 호스트 권한 획득을 위해 Volumes, User, Command 등 런타임 설정 필드가 조작된 OCI 이미지를 생성하고 공개 저장소에 배포합니다.
  • 초기 접근: 피해자가 해당 악성 이미지의 주소를 MCP Gateway에 등록하거나 참조하게 유도합니다.
  • 실행 및 권한 획득: MCP Gateway가 레이블을 catalog.Server 구조체로 YAML 언마샬링(Unmarshal)하는 과정에서 Mass Assignment가 발생하며, 이후 docker run 명령어를 생성할 때 검증 없이 해당 필드들을 플래그(-v, -u 등)로 추가하여 실행합니다.
  • 영향: 호스트 파일시스템 마운트 및 UID 0(root) 권한으로 임의 코드 실행(RCE)이 수행됩니다.

(3) 공격 표면: OCI 이미지 레이블 (io.docker.server.metadata) 및 MCP Gateway의 이미지 참조 인터페이스.

(4) CVSS 벡터 연결 (추정):

  • AV (Attack Vector): Network (원격 저장소의 이미지를 통해 전파)
  • AC (Attack Complexity): Low (이미지 배포 후 참조만 되면 트리거됨)
  • PR (Privileges Required): None (이미지 저작자 권한만 필요)
  • UI (User Interaction): Required (피해자가 악성 이미지를 참조해야 함)

악용 가능성: 본 취약점은 공격자가 제어하는 OCI Image Label을 통해 MCP Gateway의 docker run 명령어 라인에 임의 인자를 주입하는 Command Injection 형태를 <0xEB><0x9D><0xB1>니다. 공격 난이도는 Moderate 수준으로, 공격자는 피해자가 docker:// 프로토콜을 통해 악성 이미지를 참조하거나 카탈로그에서 스냅샷을 가져오도록 유도해야 하는 전제조건(PR: Low/UI: Required)이 필요합니다. 주요 공격 표면은 OCI 이미지 내의 io.docker.server.metadata 레이블이며, 해당 값이 YAML Unmarshal 과정을 통해 런타임 설정 필드(Volumes, User, Command 등)에 직접 매핑되는 Mass Assignment 취약점이 트리거가 됩니다. 이를 통해 공격자는 호스트 파일시스템 마운트 및 UID 0 권한 획득과 같은 고위험 동작을 수행할 수 있습니다. 다만, KEV 미등재 및 EPSS unavailable 상태인 점으로 보아 야생에서의 광범위한 악용 사례는 아직 관측되지 않았으며, 신뢰할 수 없는 이미지 참조라는 특정 조건이 충족되어야 하므로 이론적 심각도 대비 실제 악용 가능성은 제한적인 것으로 판단됩니다.

💥 영향 분석

(1) 기술적 위험:

  • 호스트 시스템 완전 장악: UID 0 권한으로 실행되므로 호스트 OS의 모든 제어권을 획득합니다.
  • 데이터 유출 및 파괴: -v 플래그를 통한 호스트 파일시스템 마운트로 민감 정보 탈취 및 시스템 파일 수정이 가능합니다.

(2) 비즈니스 영향:

  • 서비스 가용성 상실: 호스트 레벨의 RCE는 전체 인프라의 중단으로 이어질 수 있습니다.
  • 컴플라이언스 위반: 루트 권한 탈취로 인한 데이터 유출은 심각한 보안 규정 위반 및 신뢰도 하락을 초래합니다.
  • 노출 규모: MCP Gateway를 사용하여 외부 이미지를 동적으로 참조하는 모든 환경이 잠재적 영향 범위에 포함됩니다.

🔗 관련 취약점·체이닝

(1) 취약점 유형: Mass Assignment (CWE-915 추정) 및 Command Injection (CWE-78 추정).
(2) 체이닝 패턴: 신뢰하지 않는 입력값의 구조체 직접 매핑 $\rightarrow$ 검증 없는 명령어 인자 생성 $\rightarrow$ 특권 권한으로 프로세스 실행 순으로 이어지는 체인입니다.

🔎 탐지

(1) 로그 지표: MCP Gateway 및 Docker Daemon 로그에서 비정상적인 docker run 옵션(-v /, -u 0, --add-host 등)이 포함된 명령어 실행 기록을 확인합니다.

(2) 탐지 규칙 예시:

  • Rule 1 (명령어 패턴): process.command == "docker" && process.args contains any ("-v", "-u", "--add-host") && process.args contains "/"
  • Rule 2 (이미지 레이블 검사): OCI 이미지의 io.docker.server.metadata 필드 내에 Volumes:, User: root 등의 키워드가 포함되어 있는지 정규식으로 스캔.
    • Regex 예시: /(Volumes|User|Command|ExtraHosts):\s*.+/

(3) 오탐 시나리오 및 튜닝: 관리자가 의도적으로 설정한 합법적인 볼륨 마운트와 구분이 어려울 수 있습니다. 따라서 '신뢰되지 않은 레지스트리'에서 풀(pull)된 이미지에 의해 생성된 명령어만 필터링하도록 화이트리스트 기반으로 튜닝해야 합니다.

🛡️ 완화 방안

  • 즉시 (긴급 차단): 신뢰할 수 없는 외부 저장소로부터의 docker:// 참조를 전면 금지하고, 내부 Private Registry만 사용하도록 ACL을 설정합니다. (난이도: 낮음 / 영향: 일부 기능 제한 / 검증: 외부 이미지 풀 시도 차단 확인)
  • 단기 (완화): Docker Daemon의 권한을 최소화(Rootless 모드 적용 등)하여 RCE가 발생하더라도 호스트 전체 권한 획득을 어렵게 만듭니다. (난이도: 중간 / 영향: 컨테이너 네트워크/스토리지 설정 변경 필요 / 검증: 실행 중인 컨테이너의 UID 확인)
  • 근본 (해결): YAML 언마샬링 시 허용된 필드만 매핑하는 Allowlist를 적용하고, docker run 인자 생성 전 입력값 검증 로직을 추가한 패치 버전을 업데이트합니다. (난이도: 중간 / 영향: 서비스 재시작 필요 / 검증: 악성 레이블 포함 이미지 실행 시 인자 주입 차단 확인)

[분석 근거] 본 리포트는 다중 소스 교차검증을 통해 취약점 메커니즘의 일관성을 확인하였으며, 보수적 관점에서 심각도를 High로 채택했습니다. EPSS 실측값은 미확보 상태이나, 공격 난이도가 Moderate이며 KEV 미등재 및 CVSS 미상인 점을 고려하여 규칙 기반 우선순위를 'scheduled(이번 주 내)'로 결정하였습니다.

⚖️ 위험도 / 우선순위

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

댓글(0)

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

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

로그인하기

불러오는 중…