Cosmonic은 취약한 코드를 기본적으로 권한이 없는 샌드박스에서 실행해 원격 코드 실행(RCE)이 발생해도 피해 범위를 제한하는 데모를 소개했다. Rust의 zip 크레이트에서 발견된 취약점 두 건을 패치하지 않은 채 실행하고, 파일·네트워크·프로세스 접근 권한을 제한해 공격이 호스트에 미치는 영향을 막는 방식이다.
Rust의 zip 크레이트에서는 권한 비트를 잘못 처리하는 취약점 RUSTSEC-2026-0367과, ZIP 파일의 두 헤더가 서로 다른 경로를 가리킬 수 있는 CVE-2026-115905가 공개됐다. 후자는 CVSS 10.0으로 평가된 원격 코드 실행 취약점이다. 두 문제 모두 zip 9.0.5에서 수정됐다.
첫 번째 취약점은 압축을 풀 때 아카이브에 저장된 setuid·setgid 같은 특수 권한 비트를 그대로 적용하는 문제다. 공격자가 권한이 높은 프로세스가 악성 아카이브를 풀도록 만들면 setuid가 설정된 파일을 심을 수 있다. 두 번째 취약점은 ZIP 중앙 디렉터리의 파일명과 각 파일 앞부분의 로컬 헤더에 기록된 이름이 달라도 이를 대조하지 않는 문제다. 검사 도구에는 무해한 파일처럼 보이지만 압축 해제 과정에서 다른 경로에 파일을 덮어쓸 수 있다.
Cosmonic은 알려진 취약점을 패치해야 하지만, 패치와 취약점 검사만으로는 아직 발견되지 않은 결함까지 막을 수 없다고 주장한다. 대신 입력을 처리하는 코드를 신뢰할 수 없다고 가정하고, 필요한 권한만 명시적으로 부여하는 기본 거부(deny-by-default) 샌드박스를 함께 적용하자는 접근이다. 기능과 보안 효과는 Cosmonic이 소개한 데모와 제품 설명에 따른 것이다.
데모에서는 웹 구성요소가 업로드를 받고 압축 해제 구성요소에 데이터를 스트리밍한다. 웹 구성요소에는 파일 시스템과 외부 네트워크 접근 권한이 없고, 압축 해제 구성요소에는 /tmp/unzip 디렉터리만 허용된다. 두 구성요소는 각각 별도의 샌드박스에서 실행된다. 따라서 취약한 코드가 권한 비트나 숨겨진 경로를 읽더라도 호스트의 파일이나 네트워크에 접근할 권한은 없다.
제작진이 제시한 데모 결과는 MITIGATED: 3 privileged (setuid/setgid/sticky) entries in the archive, 0 applied; 3 zip-slip symlinks neutralized; 1 cloaked entry (CVE-2026-115905) honored but confined. Everything stayed inside /tmp/unzip.다. 권한 비트는 적용되지 않고, 경로 이탈을 노린 심볼릭 링크는 일반 파일로 처리되며, 숨겨진 경로에 쓰는 취약점은 남아 있어도 쓰기 작업이 임시 디렉터리 안에 한정됐다는 설명이다.
데모를 실행하고 적용할 때
데모 코드는 GitHub 저장소에 있다. Cosmonic Desktop을 설치하고 저장소의 매니페스트로 워크로드를 배포하면 취약한 zip 8.6.0을 패치하지 않은 상태로 두 개의 격리된 샌드박스에서 실행할 수 있다. 데모 페이지에서 공격 사례를 실행하거나 직접 ZIP 파일을 올릴 수 있다. 저장소에는 샌드박스 없이 macOS와 Linux에서 같은 공격을 실행하는 native-demo CLI도 포함돼 있다. 단계별 안내는 압축 해제 샌드박스 가이드에서 확인할 수 있다.
Cosmonic은 같은 워크로드를 Kubernetes의 Cosmonic Control에서도 실행할 수 있다고 설명한다. 권한을 매니페스트에 적어 두면 클러스터 정책으로 배포 전에 검사할 수 있다. 예를 들어 Kubernetes 1.30 이상에 포함된 ValidatingAdmissionPolicy나 Kyverno를 사용해 볼륨이 임시 볼륨인지 확인하는 정책을 적용할 수 있다. 제작진은 정책을 처음에는 경고와 감사 모드로 운영해 기존 위반을 확인한 뒤 거부 모드로 전환하는 방식을 제시한다.
다만 WebAssembly가 모든 작업에 적합한 것은 아니다. 원문은 Rust·C·C++는 대체로 바로 컴파일할 수 있지만 Go와 Python 지원은 개선 중이며, 그 밖의 언어 도구 지원은 초기 단계이거나 발전 중이라고 설명한다. 또 Cosmonic이 제시한 성능 수치인 메모리 2GB에서 스케일 투 제로 워크로드 17만5,000개 또는 대기 상태 워크로드 약 1만 개는 업체의 자체 벤치마크 결과다.
핵심은 패치를 대신하는 것이 아니라 패치와 샌드박스를 함께 쓰는 것이다. 알려진 취약점은 수정하고, 신뢰할 수 없는 입력을 처리하는 코드는 필요한 파일·호스트·인터페이스만 허용해 실행하면 취약점이 악용되더라도 피해 범위를 줄일 수 있다는 것이 Cosmonic의 제안이다. 자세한 설명은 보안 에이전트 플랫폼 원칙, 기본 거부 정책, 최소 권한 원칙, 기능 권한 설명에서 볼 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요