TL;DR

  • Docker의 Mac용 하이퍼바이저에서 컨테이너가 Bash 명령 세 줄로 호스트 파일시스템을 완전히 읽고 쓸 수 있는 취약점이 발견돼 수정됨.
  • 취약점 CVE-2026-77179는 virtio-fs 파일 서버가 경로 문자열을 다시 해석할 때 심볼릭 링크를 따라가면서 마운트 폴더 밖의 호스트 파일에 접근하는 문제임.
  • Docker Sandboxes 0.42.0과 Docker Desktop 4.88.0에 수정 사항이 포함됨.
  • Docker Desktop은 설정에서 Docker VMM을 켠 경우에만 영향을 받으며, Docker VMM은 2026년 10월 말 기본값으로 전환될 예정임.
  • Docker Sandboxes 사용자는 sbx --version으로, Docker Desktop 사용자는 설정과 버전으로 영향을 받는지 확인할 수 있음.

취약점

  • 폴더를 컨테이너에 마운트하면 Docker의 가상 머신 관리자(VMM)는 virtio-fs를 사용하며, 파일 서버는 호스트에서 실행됨.
  • 게스트가 경로에 처음 접근할 때 조회 요청을 보내면 서버는 자체 관리용 번호인 nodeid를 응답함. 이후 게스트는 경로를 다시 보내지 않고 nodeid로 요청하므로, 서버는 매 요청마다 해당 파일을 다시 찾아야 함.
  • 서버는 파일을 찾을 때 두 가지 방법을 사용함. 먼저 macOS의 volfs를 통해 아이노드(inode)로 찾고, 실패하면 파일을 처음 조회할 때 저장한 경로 문자열을 사용함.
  • 파일을 삭제하면 volfs 경로가 사라지지만, 파일을 연 상태로 유지하면 nodeid는 남음. 이 둘이 맞물리면 서버에는 경로 문자열만 남게 됨.
  • 이후 게스트가 부모 폴더를 심볼릭 링크로 바꾸면, 서버는 문자열을 읽고 마운트된 폴더 안의 경로라고 판단해 요청을 허용함. 그러나 커널은 같은 문자열을 읽을 때 심볼릭 링크를 따라가 호스트의 마운트 폴더 바깥에 있는 파일을 엶.

익스플로잇

  • 게스트는 읽거나 덮어쓸 호스트 파일을 선택함. 예시는 /Users/you/.zshenv임.
  • pv 폴더와 그 안에 대상 파일과 같은 이름의 pv/.zshenv 파일을 만듦.
  • pv/.zshenv를 열어 둠. 조회 과정에서 서버가 nodeid를 부여하며, 열린 핸들이 서버의 nodeid 삭제를 막음.
  • 파일과 폴더를 삭제함. 이때 volfs 경로도 사라져 서버에는 문자열만 남음.
  • pv라는 이름으로 /Users/you를 가리키는 심볼릭 링크를 만듦.
  • 2단계에서 만든 핸들을 통해 읽거나 씀. 서버가 경로 문자열을 다시 해석할 때 pv는 심볼릭 링크이며 경로의 마지막 이름이 아니므로, 커널이 링크를 따라가 요청이 /Users/you/.zshenv에 도달함.
  • 같은 동작을 수행하는 Bash 명령은 pv를 만들고 .canary 파일을 연 뒤, 파일과 폴더를 삭제하고 /Users/Shared를 가리키는 심볼릭 링크를 만든 다음 열린 파일 핸들을 통해 CONFIRMED를 기록함.

공개 및 수정 일정

  • 2026년 8월 12일 14:46 UTC: 취약점을 [email protected]에 보고함.
  • 2026년 8월 12일 21:54 UTC: 보고 약 7시간 뒤 접수 확인 답변을 받음.
  • 2026년 8월 13일 22:16 UTC: Sailor 커밋 9f348c0이 생성됨. 이 커밋이 수정 사항이며 보고 약 31시간 뒤임.
  • 2026년 8월 14일 14:36 UTC: Docker가 취약점을 확인하고 수정 작업이 진행 중이며 CVE를 발급할 계획이라고 알림.
  • 2026년 8월 24일: Docker Desktop 4.88.0에 Sailor 0.118.0이 포함됨.
  • 2026년 9월 7일: Docker Sandboxes 0.42.0에 CVE-2026-77179 수정 사항이 포함됨.
  • Sailor는 Docker 하이퍼바이저의 내부 명칭임.
  • Docker 보안팀은 약 7시간 만에 답변하고 이틀 만에 취약점을 확인하는 등 신속하고 전문적으로 대응함. Docker Desktop 수정판은 8월 24일, Docker Sandboxes 수정판은 9월 7일에 출시됨.

영향 여부 확인

  • Docker Sandboxes 사용자는 sbx --version을 실행해 0.42.0 이상인지 확인해야 함.
  • Docker Desktop 사용자는 4.88.0 이상을 사용해야 함. 설정의 General(일반) > Virtual Machine Manager(가상 머신 관리자)에서 Docker VMM이 선택돼 있고 버전이 4.88.0보다 낮으면 영향을 받음.

에이전트 샌드박싱

  • 에이전트는 매일 신뢰할 수 없는 코드를 실행하며, 그 코드와 실행 중인 머신 사이에 놓인 유일한 보호 장치는 샌드박스임.
  • Accomplish는 모든 에이전트, 모든 모델, 모든 클라우드에 사용할 수 있는 단일 환경을 구축한다고 밝힘.