LXD 제한 프로젝트 우회 가능성: 스냅샷 복원이 왜 위험한가?

Canonical이 LXD의 제한 프로젝트(restricted project) 기능과 관련해 “Restricted project bypass leading to arbitrary command execution”이라는 제목의 보안 권고를 GitHub 보안 어드바이저리에 공개했습니다. 이 권고는 로컬에서 제작한 악의적인 인스턴스의 스냅샷을 제한 프로젝트로 옮겨 복원하는 경로로 공격자가 호스트에서 root 권한으로 임의 명령을 실행할 수 있다고 지적합니다. 이 시나리오는 추측이 아니라 프로젝트 격리의 무력화와 호스트 수준 명령 실행을 다룬 공식 권고에 근거한 분석입니다. 이 글에서는 2026년 11월 9일 기준으로 확인된 사실과 아직 검증되지 않은 사항을 구분해 정리합니다.

취약점 개요: GHSA-47w9-6r3f-938g와 스냅샷 복원 경로

Canonical의 권고는 GitHub 보안 어드바이저리 형태로 공개되었으며, 해당 어드바이저리는 GHSA-47w9-6r3f-938g로 식별됩니다. GitLab Advisory Database의 같은 GHSA 레코드는 NVD의 CVE-2026-48751을 참조로 매핑하고 있습니다.

권고가 설명하는 LXD 제한 프로젝트 우회 경로는 다음 세 동작으로 요약됩니다.

  1. 로컬에서 악의적인 인스턴스를 만들고 그 스냅샷을 제작한다.
  2. 제작된 스냅샷을 제한 프로젝트로 옮긴다.
  3. 옮겨진 스냅샷을 복원한다.

위협의 본질은 결과에 있습니다. 악용에 성공한 행위자는 호스트에서 root 권한으로 임의 명령을 실행할 수 있다는 것이 권고의 핵심 지적입니다. 스냅샷 복원이 제한 프로젝트의 제한을 우회해 호스트 root에 도달하는 경로가 성립한다면 같은 호스트에서 실행되는 다른 프로젝트와 인스턴스도 함께 영향권에 들어갑니다.

핵심 사실 요약

구분 내용 근거
권고 제목 Restricted project bypass leading to arbitrary command execution
식별자 GHSA-47w9-6r3f-938g, NVD CVE-2026-48751 참조 매핑
공격 경로 로컬 제작 → 제한 프로젝트로 이동 → 스냅샷 복원
악용 시 영향 호스트에서 root 권한 임의 명령 실행
수정 버전 6.9, 5.21.5, 5.0.7 (patched_versions)
최초 수정 버전 0.0.0-20260630083100-c5184be310b1 (first_patched_version, Go 패키지 버전 문자열)
연결된 기록 수정 커밋 4건, 릴리스 태그 lxd-5.0.7 및 lxd-5.21.5, Incus 측 별개 권고 GHSA-48q5-w887-33wv

공개 경위: Incus가 원 출처인 LXD 보안 권고

이 권고를 해석할 때 반드시 짚어야 할 배경이 있습니다. Incus는 LXD와 별개의 제품이며, Incus의 보안 권고 내용을 LXD의 사실로 그대로 적용할 수는 없습니다. GitLab 레코드의 참조 목록도 Incus 측 별개 권고 GHSA-48q5-w887-33wv를 함께 연결하고 있어, 두 권고가 관련되되 구분된 기록임을 보여줍니다.

공개 시점의 맥락은 Linux Containers Forum에서 확인됩니다. 2026년 6월 26일 사용자 ejrowley가 LXD 보안 권고 11건 목록을 포럼에 올렸고, GHSA-47w9-6r3f-938g는 그중 여덟 번째 항목으로 나열되었습니다. LXD·Incus 관리자 stgraber는 두 프로젝트가 보안 정보를 공유하며 Incus가 원 출처이고 LXD가 자체 버전의 권고를 발행한다고 설명했습니다. 11건 중 8건은 Incus 7.2 태그에 맞춰 전날인 2026년 6월 25일 공개되었다고 밝혔습니다.

실무적 함의는 명확합니다. Incus 권고의 상세 서술을 LXD 환경에 그대로 이식해 해석하면 안 되며, LXD에 적용되는 사실은 LXD가 발행한 권고와 그 기록만으로 판단합니다.

수정 버전 확인: 6.9·5.21.5·5.0.7과 계열별 확인 방법

LXD 리포지토리 보안 권고 API가 수정 버전(patchedversions)으로 표시하는 버전은 6.9, 5.21.5, 5.0.7입니다. GitLab 레코드의 참조 목록은 수정 커밋 4건과 함께 릴리스 태그 lxd-5.0.7, lxd-5.21.5를 연결해 5.0.7과 5.21.5 수정 릴리스의 존재를 독립적으로 뒷받침합니다. GitHub Advisory Database의 같은 GHSA 항목은 Go 패키지 버전 문자열 0.0.0-20260630083100-c5184be310b1을 최초 수정 버전(firstpatched_version)으로 표시합니다.

점검 순서

  1. 운영 중인 모든 LXD 호스트의 데몬 버전을 확인한다.
  2. 확인한 버전이 세 가지 수정 버전 기준(6.9, 5.21.5, 5.0.7)과 어떻게 대응되는지 검토한다.
  3. 수정 버전에 도달하지 못한 호스트는 이번 우회 경로에 대한 노출 가능성을 닫아두지 못한 것으로 간주하고, 다음 절의 점검 포인트를 우선 적용한다.

다만 두 가지 한계를 분명히 둘 필요가 있습니다. 각 계열에서 영향을 받는 버전의 상한은 공개 자료로 확인되지 않았고, firstpatchedversion 문자열이 실제 빌드·배포 단위와 어떻게 대응되는지도 아직 원 레코드 원문 확인 없이 2차 전달로만 존재합니다. 수정 여부는 배포 채널이 아니라 각 호스트에서 확인된 버전 자체로 판단합니다.

점검 포인트: 스냅샷 유입·복원 경로와 영향 범위

  1. 버전 기준선 확보: 모든 호스트가 6.9, 5.21.5, 5.0.7 중 자신에 해당하는 수정 버전에 도달했는지 확인한다.
  2. 스냅샷 반입 경로 점검: 외부에서 제작된 인스턴스·스냅샷이 제한 프로젝트로 이동되고 복원될 수 있는 워크플로, 그리고 이동·복원을 수행할 수 있는 계정과 자동화를 점검한다.
  3. 신뢰 가정 재정의: 제한 프로젝트에 반입된 스냅샷이라도 출처가 신뢰되지 않으면 잠재적 위협으로 취급한다. 복원 단계에서 제한이 우회되면 결과는 호스트 root 권한의 임의 명령 실행이다.
  4. 호스트 단위 피해 가정: 단일 프로젝트의 침해가 호스트 root로 이어지면 동일 호스트의 다른 프로젝트·인스턴스도 함께 영향권에 들어간다는 전제로 대응 범위를 설정한다.
  5. Incus 병행 환경 분리: Incus 서버를 함께 운영한다면 LXD 권고와 Incus 권고를 별개 기록으로 구분해 각각 확인한다.

각 공격 단계에 요구되는 구체적 권한 조합은 공개 자료에 명시되어 있지 않습니다. 최소 권한만으로는 성립하지 않을 것이라는 낙관적 가정에 기대지 않고 보수적으로 점검하는 수밖에 없습니다.

아직 확인되지 않은 사항

이 글에서 사용한 공개 자료의 범위에서는 다음 사항이 확인되지 않았습니다. 아래 항목은 확정된 사실로 다루지 않는 편이 안전합니다.

  1. 실제 환경에서의 악용 여부와 공개 PoC·재현물의 존재 여부
  2. 로컬 제작·이동·복원 각 단계에 요구되는 구체적 권한과 전제조건
  3. 각 지원 계열별 취약 버전 상한
  4. Ubuntu 등 배포 채널 패키지에 수정이 반영되었는지 여부
  5. firstpatchedversion 문자열의 실제 빌드·배포 단위 대응 관계
  6. CVSS 3.1 9.9라는 점수가 GHSA-47w9-6r3f-938g 개별 항목의 점수인지 여부
  7. NVD CVE-2026-48751 원문의 영향 대상 기술 내용
  8. 탐지 규칙, 관련 로그 항목, 침해 지표(IoC)

확인된 기록이 가리키는 실무 조치는 단순합니다. 수정 버전(6.9, 5.21.5, 5.0.7) 확인, 그리고 제한 프로젝트로 유입되는 스냅샷의 이동·복원 경로 점검입니다. 그 결과가 호스트 root 수준의 임의 명령 실행으로 이어질 수 있다는 점에서 일반적인 컨테이너 설정 오류와는 결이 다릅니다. 확인되지 않은 세부 사항이 채워지기 전까지는 검증된 사실 위에서만 판단하고 나머지는 명시된 미확인 항목으로 남겨두는 것이 안전한 운영의 전제입니다.

댓글 남기기