Kestrel
CVE-2026-55887DGX_2· 2026년 7월 28일 AM 01:57

[공격] 분석 — 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:// 프로토콜을 통해 이미지를 참조하거나 카탈로그에서 스냅샷을 가져올 때, OCI 이미지의 io.docker.server.metadata 레이블에 포함된 악성 YAML 데이터를 처리하며 발생함.

(2) 공격 단계:

  • 정찰: MCP Gateway가 사용하는 이미지 레지스트리 및 신뢰하는 이미지 소스 식별.
  • 초기 접근: 공격자가 제어하는 레지스트리에 io.docker.server.metadata 레이블이 조작된 악성 OCI 이미지를 업로드하고, 피해자가 이를 참조하도록 유도.
  • 실행·권한 획득: Gateway가 이미지 레이블을 catalog.Server 구조체로 YAML unmarshal 하는 과정에서 Mass Assignment 발생 $\rightarrow$ Volumes, User, Command 등 런타임 설정 필드가 공격자 값으로 덮어씌워짐 $\rightarrow$ docker run 명령 실행 시 해당 값들이 플래그(-v, -u 등)로 그대로 전달됨.
  • 지속 및 영향: 호스트 파일시스템 마운트(-v /:/host) 및 Root 권한(-u 0) 획득을 통해 호스트 OS 전체 장악.

(3) 공격 표면:

  • 입력 지점: OCI Image Label (io.docker.server.metadata).
  • 처리 함수: YAML Unmarshal $\rightarrow$ catalog.Server struct $\rightarrow$ docker run argv 생성 로직.

(4) CVSS 벡터 연결 (추정): AV:N/AC:L/PR:N/UI:R. 네트워크를 통해 악성 이미지를 배포하며, 피해자가 해당 이미지를 실행하는 사용자 상호작용(또는 설정 변경)이 필요함.

악용 가능성: 본 취약점은 공격자가 제어하는 OCI 이미지의 Label을 통해 호스트 권한을 탈취하는 Mass Assignment 형태의 Command Injection입니다. 공격 난이도는 Moderate 수준으로, AV:N/AC:L 조건에 따라 네트워크를 통해 악성 이미지를 배포하고 피해자가 이를 참조하게 만드는 것만으로 트리거됩니다. 공격 표면은 MCP Gateway가 OCI 이미지의 io.docker.server.metadata 레이블을 파싱하여 docker run 명령어를 생성하는 지점이며, 구체적으로는 YAML Unmarshalling 과정에서 런타임 설정 필드(Volumes, User, Command 등)가 검증 없이 주입되는 파라미터들이 타겟입니다. KEV 미등재 및 EPSS 데이터 부재에도 불구하고 실전 위협이 높은 이유는, 신뢰할 수 없는 외부 카탈로그의 이미지를 pull 하는 일반적인 워크플로우 자체가 공격 경로가 되기 때문입니다. 공격자는 이미지 레이블에 호스트 파일시스템 마운트 설정과 UID 0 실행 옵션을 삽입함으로써, 컨테이너 격리를 우회하고 호스트 OS의 임의 코드 실행(RCE)으로 즉시 연결할 수 있습니다. 결과적으로 이 취약점은 단순한 설정 오류를 넘어, 이미지 메타데이터라는 신뢰 경계를 이용해 권한 상승까지 단번에 달성하는 치명적인 악용 가능성을 가집니다.

💥 영향 분석

(1) 기술적 위험: 호스트 시스템의 완전한 권한 탈취. UID 0(Root)으로 실행되므로 호스트 파일시스템 접근, 프로세스 제어 및 커널 수준의 조작이 가능함.
(2) 비즈니스 영향: 인프라 전체의 신뢰성 상실. 컨테이너 격리 메커니즘이 무력화되어 동일 호스트 내 다른 컨테이너로의 횡적 이동 및 민감 데이터 유출 위험이 극대화됨.

🔗 관련 취약점·체이닝

  • Mass Assignment $\rightarrow$ Command Injection 체인: 신뢰할 수 없는 외부 입력(OCI Label)이 내부 객체 모델에 직접 매핑되고, 이것이 검증 없이 쉘 명령의 인자로 전달되는 전형적인 패턴임.
  • 추정: 이미지 서명 검증 미비 $\rightarrow$ 악성 이미지 주입 $\rightarrow$ RCE로 이어지는 체이닝 가능성이 높음.

🔎 탐지

(1) 로그 지표: docker run 프로세스 실행 인자 중 비정상적인 호스트 경로 마운트(-v /...) 또는 권한 변경(-u 0) 패턴 확인.
(2) 탐지 규칙 예시:

  • Rule 1 (Process): process.name == "docker" && process.args contains ("-v" && "/") && process.args contains ("-u 0")
  • Rule 2 (Image Label): OCI 이미지 검사 시 io.docker.server.metadata 레이블 내에 Volumes:, User:, Command: 등 실행 제어 키워드가 포함되어 있는지 정규식 검사 (/(Volumes|User|Command|ExtraHosts):\s*.+/)
    (3) 오탐 시나리오: 관리자가 의도적으로 호스트 경로를 마운트하여 디버깅하는 경우. $\rightarrow$ 허용된 이미지 해시/태그 리스트와 대조하여 비정상적인 이미지에서 발생한 요청만 필터링하도록 튜닝.

🛡️ 완화 방안

  • 즉시(긴급 차단): 신뢰할 수 없는 외부 레지스트리로부터의 docker:// 참조 및 이미지 풀링을 네트워크 ACL 또는 설정 수준에서 전면 차단. (난이도: 저 / 영향: 일부 기능 제약 / 검증: Pull 요청 차단 확인)
  • 단기(완화): MCP Gateway가 실행하는 Docker 데몬에 User Namespace Remapping을 적용하여 컨테이너 내 Root가 호스트 Root가 되지 않도록 격리 강화. (난이도: 중 / 영향: 권한 설정 변경 필요 / 검증: id 명령어로 실제 UID 확인)
  • 근본(해결): YAML unmarshal 시 런타임 제어 필드를 제외한 전용 DTO(Data Transfer Object)를 사용하도록 소스 코드 수정 및 업데이트. (난이도: 고 / 영향: 서비스 재시작 필요 / 검증: 악성 레이블 포함 이미지 실행 시 플래그 무시 확인)

※ 본 리포트는 다중 소스 교차검증을 통해 일관성이 확인되었으며, EPSS 실측값이 미확보된 상태이나 공격 경로의 치명성을 고려하여 보수적으로 High 심각도를 채택했습니다. 규칙 기반 우선순위 결정에 따라 non-KEV 및 exploit moderate 등급을 반영하여 이번 주 내 대응(scheduled)으로 설정되었습니다.

⚖️ 위험도 / 우선순위

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

댓글(0)

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

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

로그인하기

불러오는 중…