VMware Workspace ONE RCE 취약점(CVE-2022–22954)

쑤욱가앗·2025년 9월 29일

Vulnerability

목록 보기
1/6

CVE-2022–22954는 VMware Workspace ONE Access 및 Identity Manager 제품군에서 발견된 치명적인 원격 코드 실행(RCE) 취약점이다.
이 취약점은 서버 측 템플릿 삽입(SSTI)으로 인해 발생하며, 공격자가 인증 절차 없이 네트워크를 통해 악의적인 코드를 원격으로 실행할 수 있게 한다. 이 취약점은 CVSS v3.1 기준 9.8점으로, ‘치명적(CRITICAL)’ 등급을 부여받았다. 이러한 높은 점수는 공격자가 네트워크를 통해, 매우 낮은 복잡도로, 어떠한 권한이나 사용자 개입 없이 공격을 수행할 수 있음을 의미한다.

SSTI

SSTI(Server-Side Template Injection)템플릿 엔진을 사용하는 웹 애플리케이션에서 발생하는 심각한 취약점이다. 이 공격은 개발자가 동적 콘텐츠를 생성하는 과정에서 사용자 입력값을 적절히 검증하지 않고 템플릿에 직접 삽입할 때 발생한다.

템플릿(Template)은 웹 개발에서 정적인 구조(예: HTML)와 동적인 데이터(예: 사용자 이름)를 분리하는 미리 정의된 양식을 말한다. 이러한 분리는 개발의 효율성을 높인다.

이러한 작업을 자동화하는 것이 템플릿 엔진(Template Engine)이다. 템플릿 엔진은 데이터베이스 등에서 가져온 데이터를 템플릿에 채워 넣어 최종 웹 페이지를 완성한다. 예를 들어, Hello, ${user.name}!와 같은 템플릿 코드에서 ${user.name}에 실제 사용자의 이름을 삽입하는 방식이다.

SSTI 공격자는 바로 이 동적 데이터가 들어가는 지점을 노린다. 만약 템플릿 엔진이 사용자 입력값을 단순한 데이터가 아닌 코드로 해석할 수 있다면, 공격자는 악의적인 템플릿 코드를 삽입하여 서버에서 실행되도록 유도한다. 이러한 공격이 성공하면, 공격자는 서버의 파일 시스템을 읽거나, 시스템 명령어를 실행하는 등 서버 측에서 임의의 코드를 실행할 수 있게 된다.

취약점 원인

CVE-2022–22954Apache FreeMarker라는 템플릿 엔진의 구현 방식에서 비롯된다. FreeMarker는 Java 기반의 템플릿 엔진으로, 웹 애플리케이션에서 데이터와 템플릿을 결합하여 동적인 HTML 페이지를 생성하는 데 사용된다.

취약점의 핵심은 FreeMarker가 제공하는 강력한 기능이 부적절하게 사용된 데 있다. 일반적으로 템플릿 엔진은 데이터만 처리해야 하지만, FreeMarker는 freemarker.template.utility.Execute와 같은 유틸리티 클래스를 통해 템플릿 내부에서 시스템 명령을 직접 실행할 수 있는 기능을 제공한다. 이는 개발자가 필요에 따라 서버 측에서 외부 프로그램을 실행할 수 있도록 돕는 유용한 기능이다.

문제는 VMware Workspace ONE이 이 기능을 사용하면서, /catalog-portal/ui/oauth/verify 엔드포인트에 전달되는 deviceUdid라는 파라미터의 입력 데이터를 아무런 검증 절차 없이 FreeMarker 템플릿 엔진으로 직접 전달했다는 점이다. 개발자들은 deviceUdid가 단순한 디바이스 식별자일 것이라고 가정하고, 입력 값에 대한 보안 검증(sanitization)을 생략했다.

이러한 설계적 결함은 공격자가 deviceUdid 파라미터에 freemarker.template.utility.Execute("id")와 같은 악의적인 템플릿 코드를 주입하여 서버 측에서 임의의 명령어를 실행하도록 유도했다. 결과적으로 SSTI 취약점이 RCE로 이어지게 되는 것이다. 이는 외부로부터 들어오는 모든 입력 데이터는 잠재적으로 악의적일 수 있다는 보안 코딩 원칙을 간과한 결과이다.

공격 시나리오와 실제 사례 분석

CVE-2022–22954의 가장 위험한 특징은 공격의 용이성이다. 이 취약점은 단 한 줄의 HTTP 요청으로 RCE를 달성할 수 있을 만큼 매우 단순하다. 공격자는 취약한 서버의 특정 엔드포인트로 악의적으로 조작된 파라미터를 담은 HTTP GET 요청을 보낸다. 이 파라미터는 freemarker.template.utility.Execute 함수를 호출하여 원격 시스템 명령을 실행하도록 설계된다.

실제 공격 사례에서 이 취약점은 다양한 악성 페이로드를 드롭하는 데 사용되었다. 주요 페이로드 유형으로는 Mirai/Gafgyt 드로퍼, 웹셸(Webshells), 코인 마이너(Coinminers), 그리고 정찰/콜백 스크립트 등이 있다.

특히, CVE-2022–22954는 종종 CVE-2022–22960이라는 로컬 권한 상승(LPE) 취약점과 연쇄적으로 사용되었다. 공격자는 RCE를 통해 horizon이라는 낮은 권한을 가진 사용자로 시스템에 접근하고, 이 사용자가 가진 sudo 설정의 취약점을 악용하여 최고 관리자 권한인 root 권한을 탈취한다. 이러한 공격 연쇄는 단일 취약점의 위험을 넘어 '공격 사슬(Attack Chaining)'이 얼마나 치명적인 결과를 초래할 수 있는지 보여준다.

profile
Incident Response

0개의 댓글