CVE-2026-100721: vm2 샌드박스 경계 우회 취약점이란?

vm2 라이브러리로 게스트 코드를 실행 중인 환경에서 CVE-2026-100721 취약점이 발견되면, 공격자가 정규식 검증 미흡을 악용해 허용 목록에 없는 호스트 파일에 접근하고, 샌드박스 격리 체계를 무너뜨린 뒤 호스트 프로세스에서 임의 코드를 실행할 위험이 있습니다.

CVE-2026-100721 취약점 개요 및 위험도

CVE-2026-100721은 vm2 3.12.2 미만 버전의 NodeVM 외부 모듈 리졸버에서 발생하는 권한 우회 취약점입니다. 샌드박스 내부에서 실행되는 코드가 외부 모듈을 호출할 때 허용된 경로인지 검증하는 과정에 허점이 있는데, 이 취약점은 바로 그 지점을 노립니다.

위험도는 매우 심각한 수준입니다. CVE Project 기록을 보면 CVSS v4.0 기준 9.5(CRITICAL), CVSS v3.1 기준 9.0(CRITICAL)로 평가되었습니다. 샌드박스 경계를 우회해 호스트 시스템에 직접적인 영향을 미칠 수 있는 치명적인 결함이라는 뜻입니다. 다만 지금까지 조사한 범위에서는 실제 야생(In-the-wild) 악용 사례나 CISA KEV(Known Exploited Vulnerabilities) 등재 여부가 확인되지 않았습니다.

취약점 발생 원인 및 기술적 메커니즘

핵심 원인은 LegacyResolver.customResolve가 해석된 경로를 기록하고 검증할 때 쓰는 정규식의 설계 결함에 있습니다.

1. 정규식의 경계 검증 누락

LegacyResolver.customResolve는 해석된 경로를 this.externals에 기록할 때 다음 정규식을 사용합니다.

  • 정규식 형태: new RegExp('^' + escapeRegExp(resolvedPath))

이 정규식은 문자열의 시작 부분(^)만 고정할 뿐, 경로 구분자(/)나 문자열의 끝 경계(end-of-string boundary)를 요구하지 않습니다.

2. 인가 범위의 확대

경로 경계 검증이 빠져 있다 보니 실제 허용된 경로보다 더 넓은 범위의 경로가 인가 대상으로 인식됩니다. 공격자는 경로를 정교하게 구성해 허용 목록에 포함되지 않은 호스트 파일까지 인가받아 로드할 수 있게 됩니다.

공격 성립 조건 및 영향 범위

모든 vm2 사용자가 이 취약점에 노출되는 것은 아닙니다. 취약점이 성립하려면 다음 세 가지 필수 조건이 모두 충족돼야 합니다.

  1. 버전 조건: vm2 3.12.2 미만 버전을 사용하는 서비스여야 합니다.
  2. 구성 조건: NodeVM 설정 중 require.external에 커스텀 리졸버를 구성한 임베딩 서비스여야 합니다.
  3. 실행 환경: NodeVM이 context: 'host' 설정으로 실행되는 구성이어야 합니다.

위 조건이 충족된 환경에서는 공격자가 아래와 같은 피해를 입힐 수 있습니다.

샌드박스 탈출 및 호스트 코드 실행

공개된 PoC(Proof of Concept)가 이 취약점의 위험성을 입증했습니다. 공격자가 제어하는 JavaScript 코드가 NodeVM 내에서 실행되면 허용 목록에 없는 호스트 파일을 로드하고 child_process를 실행해 최종적으로 호스트 프로세스에서 임의의 코드를 실행하는 경로가 확인되었습니다.

취약점의 주요 특성은 다음 표와 같습니다.

구분 상세 내용
취약점 식별 번호 CVE-2026-100721
영향을 받는 버전 vm2 3.12.2 미만
위험도 (CVSS v4.0) 9.5 (CRITICAL)
핵심 원인 경로 경계가 없는 접두사 정규식 사용
최종 영향 호스트 프로세스 내 임의 코드 실행

대응 방안 및 패치 방법

이 취약점에 대응하려면 라이브러리를 최신 보안 패치가 적용된 버전으로 업데이트하는 것이 가장 확실합니다.

1. 최신 버전 업데이트

vm2를 3.12.2 이상 버전으로 업데이트하면 됩니다. 3.12.2 버전에는 이 취약점을 해결하는 보안 수정이 포함되어 있습니다.

2. 수정 사항 분석

패치된 버전의 수정 커밋(6ac3916)에서는 외부 모듈 인가 시 경로 경계를 엄격하게 요구하도록 specifier 측의 검증 로직을 보강했습니다. 경로의 접두사만 일치해서는 모듈을 로드할 수 없고, 정확한 경로 경계가 확인돼야만 로드가 가능하도록 개선되었습니다. 인가 우회 가능성은 이렇게 차단했습니다.

백엔드 개발자와 인프라 보안 담당자는 현재 운영 중인 서비스의 vm2 버전과 NodeVM 설정을 즉시 점검해야 할 때입니다. 특히 context: 'host'와 커스텀 리졸버를 사용하는 경우라면 업데이트를 최우선으로 진행하는 편이 안전합니다.

댓글 남기기