
Cisco Unified Communications Manager의 CVE-2026-20230 SSRF에서 임의 파일 쓰기 및 RCE를 분석하고, PoC 도출, 탐지 로직, 방어 지침을 제공합니다.
적용 범위: 로컬 실습 환경, 승인된 재현 환경, 취약점 검증 및 보호 규칙 분석에만 사용한다. 승인되지 않은 대상에는 사용하지 말 것. 본 문서는 CVE-2026-20230의 악용 체인, 검증 가능한 현상, 판단 로직 및 방어 관점을 주로 분석하며, 직접 복사하여 실행할 수 있는 공격 패킷, WebShell 내용 또는 명령 실행 페이로드는 제공하지 않는다.
CVE-2026-20230은 Cisco Unified Communications Manager(Unified CM / CUCM) 및 Cisco Unified Communications Manager Session Management Edition(Unified CM SME)에서 발생하는 서버 측 요청 위조(SSRF) 취약점이다. 이 취약점은 특정 HTTP 요청 처리 흐름에서 입력 검증이 충분하지 않아 발생하며, 공격자는 인증 없이 요청을 구성하여 영향받는 장비가 공격자를 대신해 내부 인터페이스나 로컬 리소스에 접근하도록 만들 수 있다.
이 취약점의 영향은 일반적인 SSRF 탐지 수준에 그치지 않는다. 공개된 기술 분석에 따르면 특정 버전과 서비스 활성화 조건에서 SSRF는 임의 파일 쓰기 능력으로 추가 연쇄될 수 있으며, 공격자는 통제 가능한 내용을 기본 운영체제 경로에 쓴 다음 Web 컨테이너 접근 가능 디렉터리 또는 서버 측 컴포넌트 로딩 메커니즘을 활용하여 파일 쓰기를 코드 실행으로 전환할 수 있다.
Cisco는 이 취약점에 대해 CVSS v3.1 점수 8.6을 부여했으며, 벡터는 다음과 같다:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N
CVSS 점수는 High로 표시되지만, Cisco는 이 취약점의 Security Impact Rating을 Critical로 표시했다. 그 이유는 성공적으로 악용할 경우 기본 운영체제 파일을 쓸 수 있고, 나아가 root 권한으로 승격될 가능성이 있기 때문이다.
특히 주의해야 할 점은 이 취약점의 핵심 선행 조건이 WebDialer 서비스가 반드시 활성화되어 있어야 한다는 것이다. WebDialer는 기본적으로 꺼져 있으므로, CUCM 자산을 확인했다고 해서 바로 취약점이 악용 가능하다고 판단해서는 안 된다. 실제 위험 판단은 제품 버전, 패치 상태, WebDialer 서비스 상태 및 관련 인터페이스 접근 가능 여부를 동시에 확인해야 한다.
이 취약점은 일반적인 "특정 고정 URL에 접근하여 200이 반환되면 존재한다"는 형태의 Web 취약점이 아니다. 그 악용 체인은 최소한 세 가지 계층을 포함한다:
따라서 특정 인터페이스에 단독으로 접근하여 HTTP 200, 302, 401, 404 또는 500을 얻었다고 해서 취약점의 존재 여부를 직접 증명할 수는 없다.
예를 들어, WebDialer WSDL 인터페이스에 접근 가능하다는 것은 대상이 WebDialer 관련 기능을 노출했음을 보여줄 뿐, 이후 SSRF가 반드시 필터링을 통과할 수 있다는 것을 증명하지는 못한다. installClusterStatusExecute 인터페이스에 접근 가능한 것도 관련 진입점이 존재함을 보여줄 뿐, 임의 파일 쓰기가 성립되었음을 단독으로 증명하지는 못한다. 반대로 특정 단계에서 예외가 반환되더라도 이는 대상 버전, 패치, hostname 해석, 경로 권한, 프록시 장비 또는 서비스 상태 때문일 수 있으며, 반드시 전체 취약점 체인이 존재하지 않는다는 것을 의미하지는 않는다.
보다 안정적인 판단은 다단계 증거 조합을 사용해야 한다:
"WebDialer 활성화 + 영향받는 버전 + SSRF 동작 성립 + 통제된 파일 쓰기 성립"이 동시에 나타나야 비로소 신뢰도 높은 악용 가능으로 판단해야 한다.
현재 공개된 악용 체인의 핵심은 단순한 SSRF가 아니라, SSRF와 Axis/Java Web 서비스 메커니즘, 로그 쓰기 또는 배포 설명 파일 처리 로직 간의 조합 악용이다.
전체적인思路는 다음과 같이 요약할 수 있다:
WebDialer 정보 획득
↓
대상 실제 hostname 획득
↓
cmplatform 관련 인터페이스를 통한 SSRF 트리거
↓
내부 WebDialer / Axis 관리 경로 접근
↓
통제 가능한 서비스 설명 내용 쓰기 또는 배포
↓
새로운 호출 가능 서비스 또는 파일 쓰기 능력 형성
↓
파일 쓰기 능력을 Web 접근 가능 스크립트로 전환
↓
특정 환경에서 명령 실행까지 도달
체인 설계 관점에서 hostname은 핵심 요소이다. 일부 필터링 로직은 127.0.0.1, localhost 등 일반적인 로컬 주소를 차단하지만, 대상의 실제 hostname은 이후 요청 흐름에 허용될 수 있다. 따라서 PoC는 먼저 WebDialer의 WSDL 정보에서 실제 호스트 이름을 추출한 다음, 이를 SSRF 체인의 내부 접근 접두어로 사용한다.
두 번째 핵심 요소는 Axis 서비스 관련 로직이다. PoC는 Web 디렉터리에 직접 파일을 업로드하는 것이 아니라, 내부 서비스 처리 체인을 통해 서버 측 컴포넌트가 공격자 통제 내용을 특정 경로에 쓰도록 만든다. 이 과정은 본질적으로 "서버 측 내부 요청 + 컴포넌트 구성/로그 쓰기 동작 + 경로 이동/경로 제어"의 조합이다.
세 번째 핵심 요소는 2단계 쓰기이다. 첫 번째 단계는 일반적으로 더 안정적인 파일 쓰기 진입점을 구축하는 데 사용되고, 두 번째 단계에서 명령 실행 스크립트를 Web 접근 가능 디렉터리에 쓴다. 이렇게 하는 이유는 SSRF를 통해 한 번에 완전한 명령 실행 로직을 쓰려고 하면 인코딩, 길이, XML 구조, 경로 권한 및 서버 측 파싱 동작의 영향을 받을 수 있기 때문이며, 2단계 방식은 복잡한 페이로드를 분리하기 easier 때문이다.
본 문서는 완전한 악용 패킷과 WebShell 내용을 제공하지 않는다. 방어와 검증 시 다음 핵심 특징만 이해하면 된다:
외부 요청 진입점: cmplatform 설치 상태 관련 인터페이스
정보 획득 진입점: WebDialer WSDL / services 관련 인터페이스
내부 전달 대상: WebDialer / Axis / AdminService 관련 경로
핵심 동작: SSRF, 서버 측 내부 요청, 통제 가능한 파일 쓰기, Web 접근 가능 파일 생성
최종 위험: 임의 파일 쓰기, WebShell 생성, 명령 실행, root 권한 승격 경로
PoC는 먼저 대상의 실제 hostname을 획득해야 하며, IP 주소나 외부 도메인만 사용해서는 안 된다.
그 이유는 SSRF 필터링 로직이 반드시 최종 연결 대상만 판단하는 것이 아니라, hostname 필드, URL 문자열, 로컬 주소 키워드 등을 함께 검증할 수 있기 때문이다. 일반적인 127.0.0.1, localhost 같은 로컬 주소는 차단될 수 있지만, 장비의 실제 hostname은 특정 시나리오에서 합법적인 노드 이름으로 간주될 수 있다.
판단에 도움이 될 수 있는 인터페이스는 일반적으로 WebDialer WSDL 정보와 관련이 있다. 해당 WSDL에 접근하면 응답에 서비스 주소, location 필드 또는 기타 파싱 가능한 호스트 식별자가 포함될 수 있다. PoC는 응답 텍스트에서 URL의 hostname을 추출하여 다음 단계 SSRF의 내부 접근 대상으로 사용한다.
이 단계의 판단 기준은 다음과 같아야 한다:
hostname 파싱에 실패하면 PoC는 대상 IP로 폴백할 수 있지만, 이는 성공률을 현저히 낮춘다. 실제 환경에서 hostname 파싱 실패의 일반적인 원인은 WebDialer 미활성화, 인터페이스 접근 제어 제한, 응답이 리버스 프록시에 의해 변조됨, 인증서 또는 서비스 구성 불완전 등이다.
SSRF 트리거 지점은 cmplatform 관련 설치 상태 조회 로직에 있다. 이 기능은 원래 클러스터 노드 설치 상태를 조회하는 데 사용되며, 서버는 사용자가 제출한 노드 식별자 또는 hostname을 기반으로 내부 요청을 구성한다.
취약점의 핵심 문제는 공격자가 통제할 수 있는 hostname 매개변수가 합법적인 노드 이름이나 신뢰된 호스트로 엄격히 제한되지 않아, 이 매개변수가 더 복잡한 내부 접근 경로로 구성될 수 있다는 점이다. 이후 서버는 공격자를 대신해 내부 인터페이스에 요청을 보낸다.
이 단계의 핵심은 "외부 URL에 접근할 수 있는가"가 아니라 "CUCM 장비 자체가 내부에서만 접근 가능한 WebDialer / Axis 관리 인터페이스에 접근하게 만드는가"이다. 따라서 SSRF의 가치는 두 가지 측면에서 나온다:
승인된 검증에서 HTTP 상태 코드만으로 SSRF 성공을 판단해서는 안 된다. 더 신뢰할 수 있는 증거는 다음과 같다:
공개 체인에서 SSRF는 Axis 관련 서비스 인터페이스에 접근하고 서비스 배포 설명 내용을 쓰는 데进一步 사용된다. 공격자는 특수한 XML/WSDD 구조를 구성하여 서버 측 컴포넌트가 처리 과정에서 통제 가능한 내용을 지정된 경로에 쓰도록 만든다.
이 단계의 본질은 전통적인 파일 업로드가 아니라 서버 측 컴포넌트의 처리 로직을 남용하는 것이다:
사용자 통제 매개변수
↓
SSRF 내부 요청
↓
Axis / Web 서비스 처리
↓
통제 가능한 배포 설명 또는 로그 쓰기
↓
지정 경로 파일 생성
보안 분석 관점에서 몇 가지 핵심 요소가 있다:
따라서 CVE-2026-20230의 고위험 지점은 단순히 SSRF가 아니라, SSRF가 신뢰 경계를 넘어 내부 관리/서비스 배포 체인에 진입하고 최종적으로 통제 가능한 파일 쓰기를 트리거할 수 있다는 점이다.
PoC 설계에서는 일반적으로 한 번에 명령 실행을 완료하는 대신 2단계 쓰기를 채택한다.
첫 번째 단계는 간단한 파일 쓰기 능력을 생성하는 데 사용된다. 이 단계의 목표는 공격자가 Web 접근 가능 경로를 통해 서버의 지정된 위치에 내용을 쓸 수 있게 하는 것이다.
두 번째 단계에서는 첫 번째 단계의 쓰기 능력을 활용하여 명령 실행 스크립트를 Web 접근 가능 디렉터리에 쓴다. 이후 공격자는 HTTP 매개변수를 통해 시스템 명령 실행을 트리거할 수 있다.
2단계 설계의 장점은:
그러나 방어 관점에서 2단계 쓰기는 더 명확한 탐지 표면을 제공한다:
현재 PoC의 흐름은 다음과 같이 요약할 수 있다:
악용 성공률 관점에서 가장 중요한 실패 지점은 일반적으로 다음에集中된다:
따라서 이 PoC는 특정 영향받는 버전과 기본 경로가 일치할 때 악용 가능성이 높지만, 모든 CUCM 자산에 대해 안정적으로 통과되는 것은 아니다.
CVE-2026-20230의 성공 판단은 스크립트가 끝까지 실행되었는지만 볼 수 없다. 더 합리적인 판단은 4단계로 나누어야 한다.
조건:
WebDialer WSDL 접근 가능
또는 services 페이지 접근 가능
또는 cmplatform 관련 인터페이스 접근 가능
이는 대상에 관련 공격 표면이 존재함을 보여줄 뿐, 취약점 악용 가능성을 증명하지는 못한다.
조건:
대상 버전이 영향 범위 내에 있음
WebDialer가 활성화되어 있음
hostname을 파싱할 수 있음
SSRF 진입점이 비정상적이지만 합리적인 서버 측 응답을 반환함
이 경우 서버 측 로그 또는 승인된 실습 환경을 결합하여 계속 검증해야 한다.
조건:
SSRF 후 서버 측에 통제된 파일이 나타남
또는 Web 디렉터리에 서버 측 프로세스가 생성한 비정상적인 파일이 나타남
또는 services 페이지에 비정상적으로 새로 추가된 서비스가 나타남
또는 로그에 통제 가능한 배포 설명 내용이 나타남
이 단계에 도달하면 취약점 체인이 일반 SSRF 단계를 돌파하여 임의 파일 쓰기 위험에 진입했음을 확인할 수 있다.
조건:
쓴 Web 접근 가능 스크립트가 성공적으로 파싱되어 실행됨
그리고 승인된 테스트 명령을 통해 서버 측 실행 결과를 관찰할 수 있음
오직 이 단계에서만 원격 명령 실행이 성립되었다고 판단할 수 있다. 파일 쓰기 성공이 반드시 RCE 성공을 의미하지는 않지만, CUCM과 같은 고권한 서비스 환경에서 파일 쓰기만으로도 심각한 위험을 구성하기에 충분하다.
본 문서는 공격에 직접 사용할 수 있는 exploit 실행 예시를 제공하지 않는다.
승인된 환경에서는 "읽기 전용 검사" 또는 "비파괴적 검증" 방식을 우선 사용하는 것을 권장한다. 예:
python3 CVE-2026-20230-check.py https://127.0.0.1 --check
권장 검사 항목:
운영 시스템에서 전체 파일 쓰기 또는 명령 실행 검증을 수행하는 것은 권장하지 않는다. 승인된 테스트라도 격리된 실습 환경, 스냅샷 환경 또는 벤더가 권장하는 검증 절차에서 우선 수행해야 한다.
이러한 PoC의 보안 경계는 명확해야 한다.
첫째, 기본적으로 명령을 실행해서는 안 된다. 명령 실행 단계는 고위험 검증으로, 시스템 상태 변경, 로그 오염, 서비스 이상 또는 보안 장비 연동 대응을 쉽게 초래할 수 있다.
둘째, 기본적으로 WebShell을 써서는 안 된다. 테스트 파일이라도 EDR, WebShell 탐지, 파일 무결성 모니터링 또는 규정 준수 감사 시스템이 실제 침입 행위로 판단할 수 있다.
셋째, 공개 인터넷 대상을 대상으로 대량 탐지를 수행해서는 안 된다. 이 취약점은 인증이 필요 없으며 대상이 대부분 기업 통신 인프라스트럭처이므로, 승인되지 않은 스캔과 악용의 위험이 매우 높다.
넷째, 검사 모드와 악용 모드를 분리해야 한다. PoC를 두 개의 스크립트로 분리할 것을 권장한다. 하나는 자산 식별과 서비스 상태 판단에만 사용하고, 다른 하나는 로컬 실습 환경 또는 명시적으로 승인된 환경에서만 파일 쓰기를 검증한다.
다섯째, 대상 범위를 제한해야 한다. PoC에 로컬 주소, 사설 네트워크 대역, 화이트리스트 도메인, 승인 확인 매개변수 등의 보호 메커니즘을 추가하여 제3자 시스템을 오탐하지 않도록 해야 한다.
여섯째, RCE 단계를 기본적으로 비활성화해야 한다. 연구 코드를 유지하더라도 사용자가 명시적으로 승인 확인 매개변수를 전달해야만 파일 쓰기 또는 명령 실행 검증에 진입할 수 있도록 해야 한다.
트래픽 탐지 관점에서 특정 고정 파일 이름, 고정 서비스 이름 또는 고정 JSP 이름만 매칭해서는 안 된다. 공개 PoC의 서비스 이름, 파일 이름 및 경로는 모두 수정될 수 있으므로 단일 문자열 규칙은 누락되기 쉽다.
더 합리적인 탐지思路는 공격 체인 단계를 중심으로 특징을 추출하는 것이다.
중점 관찰:
/webdialer/Version.jws?wsdl
/webdialer/services
WebDialer WSDL
Axis services listing
짧은 시간 내에 외부 클라이언트가 WSDL에 접근한 후 cmplatform 설치 상태 인터페이스에 접근하면 위험 등급을 높여야 한다.
중점 관찰:
/cmplatform/installClusterStatusExecute
action=clusterNodeInstallStatus
hostname 매개변수의 비정상적인 길이 증가
hostname 매개변수에 URL 인코딩된 경로 구분자가 나타남
hostname 매개변수에 webdialer, services, AdminService, platformcom, installstages 등의 내부 경로 특징이 포함됨
이 단계의 핵심은 hostname 매개변수가 더 이상 일반적인 호스트 이름처럼 보이지 않고 경로화, URL화, 인코딩화, XML화된 특징이 나타난다는 것이다.
중점 관찰:
deployment
wsdd
java:RPC
requestFlow
LogHandler
allowedMethods
className
fileName
writeToConsole
이러한 필드가 동시에 나타나면 공격자가 Axis 서비스 배포 설명 파일을 통해 통제 가능한 내용을 쓰려고 시도하고 있음을 높은 의심으로 판단해야 한다.
중점 관찰:
axis2-web
platform-services
JSP 파일 쓰기
매개변수에 파일 이름과 파일 내용 조합이 나타남
Web 디렉터리 경로 이동
common/log/taos-log-a
tomcat/webapps
공격 트래픽에 대량의 ../, URL 인코딩된 경로 이동, JSP 확장자 및 Tomcat WebApp 경로가 나타나면 고위험으로 판단해야 한다.
중점 관찰:
새로 추가된 JSP에 접근
요청 매개변수에 pwd, cmd, command, exec, i 등의 명령 매개변수가 나타남
응답에 시스템 명령 출력 형식이 나타남
동일한 소스 IP가 짧은 시간 내에 WSDL 획득, SSRF, 쓰기, 실행 연속 동작을 완료함
규칙 설계 관점에서 단계별 탐지를 권장한다:
응급 조사 시 다음 위치와 현상을 중점적으로 확인할 것을 권장한다:
installClusterStatusExecute 비정상 요청이 있는지./tmp, WebApp 디렉터리, 로그 디렉터리에 테스트 파일 또는 알 수 없는 파일이 나타났는지.이미 악용되었다고 의심되면 관리면 접근을 우선 격리하고, 로그와 파일 시스템 증거를 보존한 다음 패치 업그레이드, WebShell 정리, 비정상 서비스 정리 및 계정/자격 증명 교체를 수행해야 한다.
근본적인 수정 방법은 Cisco 공식 수정 버전으로 업그레이드하거나 공식 임시 수정 패키지를 적용하는 것이다.
일반적인 처리 권장 사항:
CVE-2026-20230의 핵심은 단일 인터페이스 노출이 아니라, CUCM WebDialer, cmplatform 설치 상태 조회 로직, 내부 Axis 서비스 처리 및 파일 쓰기 능력 사이에 직렬화 가능한 신뢰 경계 실패가 형성되었다는 점이다.
이 체인은 다음과 같이 요약할 수 있다:
인증 없는 외부 요청
↓
WebDialer 노출면 확인
↓
실제 hostname 획득
↓
cmplatform SSRF
↓
내부 Axis 서비스 접근
↓
통제 가능한 서비스 설명 또는 로그 쓰기
↓
Web 접근 가능 파일 생성
↓
명령 실행 및 root 권한 승격 위험
실제 악용 가능성은 WebDialer 활성화 여부, 대상 버전의 영향 여부, hostname 필터링 우회 가능 여부, 경로 착점 일치 여부, Web 컨테이너가 쓴 파일을 실행하는지 여부, 그리고 대상이 이미 패치를 적용했는지 여부에 달려 있다.
방어 관점에서 "특정 JSP 파일이 존재하는지"만으로 공격을 판단해서는 안 된다. 더 안정적인 방법은 다단계 체인을 중심으로 연관 탐지를 수행하는 것이다: WSDL 정보 획득, cmplatform 비정상 hostname, Axis/WSDD 특징, 경로 이동 쓰기, JSP 생성 접근 및 명령 매개변수 접근. 이 중 여러 단계가 짧은 시간 내에 동일한 출처에서 연속적으로 나타나면 고위험 침입 이벤트로 처리해야 한다.