← Back to Feed CACHED · 2026-10-06 13:57:49 · CACHE_KEY CVE-2026-15409
CVE-2026-15409 · CWE-918 · Disclosed 2026-07-14

SonicWall SMA1000 Work Place Unauthenticated SSRF via /wsproxy Leading to RCE

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

An unlocked tunnel from the internet straight through your VPN concentrator into Active Directory

CVE-2026-15409 is an unauthenticated server-side request forgery in the SonicWall SMA1000 Work Place web portal (/wsproxy endpoint, TCP/443). The flaw lets any remote attacker — no credentials, no user click — coerce the appliance into opening a WebSocket tunnel to localhost-only services, most critically an Erlang distribution node on port 1050 that accepts a hardcoded cookie (10ecad5b446e86864832904cd439b6b70262). Through that tunnel the attacker speaks native Erlang ETF, calls os:cmd/1, and achieves arbitrary command execution as the couchdb user. Chained with CVE-2026-15410 (a post-auth path-traversal code injection in the remove_hotfix workflow), the attacker escalates to root, extracts LDAP bind credentials encrypted with a static AES key, harvests TOTP MFA seeds, and pivots to Active Directory via secretsdump/DCSync. Affected firmware: SMA 6210, 7210, 8200v, and CMS on versions 12.4.3-03245 through 12.4.3-03434 and 12.5.0-02283 through 12.5.0-02800. Fixed in 12.4.3-03453 and 12.5.0-02835.

SonicWall's CVSS 10.0 / CRITICAL rating is entirely justified — arguably one of the few CVSS-10 scores in 2026 that genuinely earns the number. The SSRF is not the garden-variety 'scan an internal port' type: the hardcoded Erlang cookie turns it into an unauthenticated RCE with zero additional prerequisites, and the appliance's design role as a credential-bearing perimeter device means post-exploitation impact is domain-scale. Rapid7 MDR discovered active zero-day exploitation *before* disclosure on July 14, 2026. Within 48 hours a threat actor had scanned 2,197 Shodan-sourced targets, exploited 250 appliances, exfiltrated LDAP configs from 168 of them (534 records across 160 AD domains), and completed full DCSync against 5 domains. CISA added it to KEV the same day with a 3-day federal remediation deadline and confirmed ransomware association. This is not a paper tiger.

"Unauth SSRF-to-RCE on internet-facing SMA1000 — weaponized, KEV-listed, domain takeover documented in the wild."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Internet reconnaissance

Attacker queries Shodan, Censys, or FOFA for SonicWall SMA1000 Work Place portals on TCP/443. The campaign documented by Hunt.io maintained a target list of 2,197 Shodan entries covering 1,517 unique hosts, plus broader inventories of ~197,000 SonicWall-branded addresses. The Work Place interface is internet-facing by design — it is the remote-access portal end-users connect to. Tool: Shodan CLI / cve-2026-15409-check.py (bulk scanner found in the campaign's open directory).
Conditions required:
  • Internet access to SMA1000 Work Place portal on TCP/443
Where this breaks in practice:
  • None — the portal is internet-facing by design; Shodan indexes it automatically
Detection/coverage: Shodan/Censys/FOFA queries for http.html:"SMA1000" or ssl.cert.subject.CN:"sma". GreyNoise tags for SMA1000 scanning activity.
STEP 02

SSRF via /wsproxy WebSocket tunnel

The attacker sends a crafted WebSocket upgrade request to /wsproxy with a forged bmID parameter (prefix -3389) and a host parameter pointing to localhost:1050 (the internal Erlang distribution port). The Work Place service upgrades the connection (HTTP 101) and begins proxying raw TCP between the attacker and the localhost-only Erlang node. No authentication check is performed. Tool: cve-2026-15409-exploit.py (Ch4120N PoC, Metasploit module exploit/linux/http/sonicwall_sma1000_ssrf_rce).
Conditions required:
  • Network reach to /wsproxy on the Work Place interface
Where this breaks in practice:
  • None — endpoint is exposed on the same port as the legitimate user portal
Detection/coverage: Log pattern: extraweb_access.log entries with wsproxy AND =-3389 AND HTTP 101 status. Nuclei template available.
STEP 03

Erlang distribution handshake with hardcoded cookie

Once the WebSocket tunnel is established, the attacker performs a standard Erlang distribution handshake against the [email protected] node using the hardcoded cookie 10ecad5b446e86864832904cd439b6b70262. This cookie is identical across all tested SMA1000 appliances — it is compiled into the firmware and not configurable. The handshake authenticates the attacker as a trusted Erlang peer. Tool: Ch4120N PoC implements the full ETF handshake over wss://.
Conditions required:
  • Active WebSocket tunnel from step 2
  • Knowledge of the hardcoded Erlang cookie (public since July 15, 2026)
Where this breaks in practice:
  • None — the cookie is static and publicly documented
Detection/coverage: Network-level: unusual Erlang EPMD traffic on localhost. Appliance-level: new peer connections to [email protected] in Erlang logs.
STEP 04

Arbitrary command execution as couchdb

With an authenticated Erlang distribution session, the attacker sends an RPC call to os:cmd/1 on the remote node, executing arbitrary OS commands as the couchdb user (UID 1010, group daemon). This is a low-privileged but fully functional shell with read access to appliance configuration files including policy_file.xml (LDAP bind credentials encrypted with a static 32-byte AES key). Tool: os:cmd/1 via Erlang RPC, automated in Ch4120N PoC and Metasploit module.
Conditions required:
  • Authenticated Erlang session from step 3
Where this breaks in practice:
  • couchdb user is low-privileged — cannot directly modify system configs or install persistence as root
Detection/coverage: Process monitoring: unexpected child processes of beam.smp (Erlang VM). File access: reads of /etc/sonicwall/policy_file.xml or writes to /tmp/.
STEP 05

Privilege escalation to root via CVE-2026-15410

The attacker leverages CVE-2026-15410, a path-traversal code injection in the remove_hotfix workflow accessible on the internal AMC port 8188. From the couchdb shell, the attacker reaches AMC on localhost (port 8188 is bound to 127.0.0.1) and triggers the vulnerable endpoint with traversal sequences to execute a malicious script as root. This gives full control of the appliance. Tool: Custom exploit script targeting /usr/local/bin/remove_hotfix with ../ traversal.
Conditions required:
  • Shell access from step 4
  • CVE-2026-15410 present (same affected versions)
Where this breaks in practice:
  • Requires the companion CVE — but both ship in the same firmware and both are unpatched together
Detection/coverage: Log pattern: ctrl-service.log entries showing remove_hotfix invocations with path traversal sequences (../). File integrity monitoring on /usr/local/bin/.
STEP 06

Credential harvest and domain compromise

As root, the attacker extracts policy_file.xml containing LDAP bind credentials (decryptable with a static AES key shipped in firmware), TOTP MFA seeds, and session databases from /tmp/temp.db*. The documented campaign deployed a standalone Linux Impacket binary (secretsdump) to /tmp, extracted SAM/LSA secrets from 9 AD environments, and executed full DCSync replication against 5 domains. The attacker now holds every password hash in those forests. Tools: ldap_extract.py, decrypt_ldap_password.py, auto_secretsdump.py, auto_dcsync.py / dcsync_domains.py (all found in the campaign's open directory by Hunt.io).
Conditions required:
  • Root access from step 5
  • Appliance configured with LDAP/AD integration (standard deployment)
Where this breaks in practice:
  • Requires AD-integrated deployment — but SMA1000's primary use case is enterprise remote access backed by AD/LDAP
Detection/coverage: Windows: Event ID 4624 type 3 (NTLM logon) from appliance internal IP without correlated VPN session. AD: DCSync detection via Event ID 4662 with Replicating Directory Changes rights. Network: outbound connections from SMA to domain controllers on non-standard patterns.
03 · Compensating Control

1
CRITICAL 10.0→IGNORE 0.0
SEVERITY REDUCED
Apply firmware hotfix 12.4.3-03453 or 12.5.0-02835 immediately — This is the only reliable remediation. SonicWall confirms no workaround exists. Per the noisgate mitigation SLA for CRITICAL, deploy within 3 days. Given KEV listing and active exploitation, treat this as an emergency change — patch within hours, not days. Schedule the firmware upgrade in your next maintenance window or invoke emergency change procedures. After patching, rotate all admin and LDAP credentials, reset TOTP seeds, and review logs for IoCs per SNWLID-2026-0008.
2
CRITICAL 10.0→HIGH 7.5
SEVERITY REDUCED
Restrict Work Place portal access via upstream firewall geo/IP ACL — If immediate patching is impossible (e.g., change control delay), place an ACL on your perimeter firewall or cloud WAF that restricts TCP/443 on the SMA1000 to known employee source IP ranges or VPN egress IPs only. This breaks step 1 of the attack path by removing the appliance from broad internet scanning. This is a temporary bridge measure only — it degrades the remote-access use case and does not protect against attackers already inside your network or within allowed IP ranges. Deploy within hours of reading this advisory.
3
CRITICAL 10.0→HIGH 8.0
SEVERITY REDUCED
Block /wsproxy URI pattern at WAF or reverse proxy — If a WAF or reverse proxy sits in front of the SMA1000, add a rule to deny any request whose URI path contains /wsproxy. This breaks step 2 of the attack path. However, this is fragile — path normalization bypasses, encoding tricks, or WAF rule ordering issues may allow evasion. Do NOT rely on this as the sole control. Treat as defense-in-depth alongside the IP ACL above.
4
CRITICAL 10.0→CRITICAL 10.0
Hunt for compromise indicators now — Regardless of patch status, perform an immediate compromise hunt. Check extraweb_access.log for /wsproxy requests with =-3389 and HTTP 101 status. Check ctrl-service.log for remove_hotfix with path traversal. Check /var/lib/unit/conf.json for /__api__/login or /__api__/logout routes. Check Windows DCs for Event ID 4624 type 3 logons from the SMA1000's internal IP without correlated VPN sessions. Check for Event ID 4662 indicating DCSync. If any IoC is found, treat the appliance and downstream AD environment as compromised — re-image the appliance, reset all domain passwords, revoke all TOTP seeds.
5
CRITICAL 10.0→HIGH 8.5
SEVERITY REDUCED
Isolate SMA1000 management interface (port 8188) from appliance data plane — Ensure the AMC/CMC management interface on port 8188 is not reachable from the SMA1000's own localhost — though this is difficult since the SSRF tunnels to 127.0.0.1. On deployments where a separate management VLAN exists, ensure no routing path allows the data-plane interface to reach 8188. This breaks step 5 (privilege escalation via CVE-2026-15410) but does NOT prevent steps 1-4 (RCE as couchdb). Partial mitigation only.
What doesn't work
  • MFA on the Work Place portal does not help — the SSRF bypasses all authentication, including MFA. The attacker never logs in as a user; they exploit the proxy layer beneath the auth stack.
  • IDS/IPS signatures for known exploit payloads are unreliable — the attack uses a legitimate WebSocket upgrade (HTTP 101) followed by Erlang binary protocol inside the encrypted tunnel. Standard network IDS cannot inspect the post-upgrade traffic without TLS termination and protocol-aware parsing.
  • SonicWall Capture ATP / sandboxing does not help — this is not a file-based or malware-delivery attack. The exploit is protocol-level abuse of a legitimate service endpoint.
  • Disabling unused SMA1000 features is not possible — the /wsproxy endpoint cannot be disabled independently of the Work Place portal, which IS the product's primary function.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusConfirmed zero-day exploitation prior to July 14, 2026 disclosure. Rapid7 MDR discovered active attacks. CISA KEV confirms ransomware association. Hunt.io documented a campaign that compromised 168 appliances across France, India, Italy, US, UK, Canada, Germany — extracting 534 LDAP configs from 160 AD domains and completing DCSync against 5.
CISA KEVAdded July 14, 2026. Federal remediation deadline: July 17, 2026 (3 days). Known ransomware use: Yes.
EPSS0.06795 (6.8% probability of exploitation in next 30 days) — estimated ~97th percentile. For context, any score above 0.05 typically indicates a top-3% risk CVE. This aligns with confirmed mass exploitation.
PoC availabilityMultiple public exploits. Ch4120N/CVE-2026-15409 — full Python PoC automating WebSocket→Erlang→RCE chain. Metasploit module (exploit/linux/http/sonicwall_sma1000_ssrf_rce). Nuclei template for detection. Campaign tooling (bulk scanner, LDAP extractor, auto-DCSync) found in attacker open directory per Hunt.io.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — 10.0. Network attack vector, low complexity, no privileges, no interaction, scope change (reaches beyond the vulnerable component into internal services/AD), full CIA impact. The scope-change and full-impact scores are justified by the documented SSRF→localhost→Erlang→RCE→AD chain.
Affected versionsSMA 6210, 7210, 8200v, CMS: 12.4.3-03245, -03387, -03434 and 12.5.0-02283, -02624, -02800. SMA 100 series and SonicWall SSL-VPN firewalls are not affected.
Fixed versions12.4.3-03453 or later, 12.5.0-02835 or later. Available via mysonicwall.com. No workaround exists — SonicWall advisory SNWLID-2026-0008 explicitly states patching is the only remediation.
Exposure dataShodan: ~1,517 unique SMA1000 hosts (2,197 entries) visible at time of campaign. Broader SonicWall footprint: ~197,000 addresses. Campaign scanner identified 250 exploitable and 163 confirmed vulnerable from the primary list. These appliances are internet-facing by design.
Disclosure timelinePre-July 14: zero-day exploitation in the wild. July 14, 2026: SonicWall advisory SNWLID-2026-0008, CISA KEV addition, Rapid7 disclosure. July 15: Rapid7 detailed analysis, authenticated scanner plugins. July 16: campaign weaponization with multithreaded tooling observed. July 17: UK Borough Council of King's Lynn breach detected.
Credited researchersRapid7 MDR team (discovery of in-the-wild exploitation), Scott Caveza (Tenable Research Special Operations — analysis), Ch4120N (public PoC author), Hunt.io (campaign forensics and open-directory analysis).

Sources.

  1. SonicWall Advisory SNWLID-2026-0008
  2. Rapid7 MDR Zero-Day Discovery & Analysis
  3. Hunt.io — UK Council Attack & Campaign Forensics
  4. Tenable — CVE-2026-15409 & 15410 Zero-Day Analysis
  5. CISA KEV Addition Alert (July 14, 2026)
  6. Ch4120N Public PoC — GitHub
  7. BleepingComputer — SonicWall Zero-Day Coverage
  8. Arctic Wolf Security Bulletin
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (10.0/10)

Why this verdict

  • Zero friction in the attack chain. The SSRF requires zero authentication, zero user interaction, and targets an endpoint (/wsproxy) on the same TCP/443 port that end-users must reach — there is no configuration that exposes the VPN portal without exposing the vulnerable endpoint. The hardcoded Erlang cookie eliminates the only remaining gate between SSRF and RCE. Every prerequisite is met by default in every deployment.
  • Weaponization is complete and commoditized. A full PoC (Ch4120N), a Metasploit module, a Nuclei template, and campaign-grade automation tooling (bulk scanner, LDAP extractor, auto-DCSync) are all publicly available. The bar for exploitation is script-kiddie level. Time from disclosure to mass exploitation was 48 hours.
  • Role multiplier: SMA1000 is canonically a network edge appliance — 100% of installs occupy the high-value role by definition. The SMA1000 exists solely as an internet-facing secure remote access gateway. It stores LDAP bind credentials, TOTP MFA seeds, and session tokens for every user who authenticates through it. The documented chain succeeds in this canonical role and the blast radius is domain-scale to fleet-scale: the Hunt.io campaign demonstrated credential extraction from 168 appliances → 160 AD domains → full DCSync on 5 domains. This is not a theoretical high-value scenario; it is the measured outcome.
  • KEV-listed with ransomware association and 3-day federal deadline. CISA added both CVE-2026-15409 and CVE-2026-15410 on disclosure day with a July 17 remediation deadline — the shortest window CISA assigns. The KEV entry confirms known ransomware use, indicating the chain feeds directly into ransomware deployment after domain compromise.
  • No compensating control breaks the chain without patching. SonicWall explicitly states there are no workarounds. The vulnerable endpoint cannot be disabled independently of the Work Place portal. WAF rules might filter the specific bmID pattern but the attacker controls the full WebSocket negotiation. The only reliable mitigation is firmware upgrade.

Why not higher?

CVSS 10.0 is the mathematical ceiling — it cannot go higher. The vendor score is exactly correct: unauthenticated, remote, low-complexity, no user interaction, scope change, full CIA impact. There is no dimension left to increase.

Why not lower?

Every downgrade criterion fails. Friction: none — the target surface is internet-facing by design, no auth required, hardcoded secrets, public exploits. Role narrowing: impossible — 100% of SMA1000 installs ARE the high-value network edge role. Exploit maturity: fully weaponized with Metasploit, PoC, and documented mass-exploitation campaigns. Blast radius: domain-scale compromise demonstrated against 160 AD environments. Installed base: SonicWall SMA1000 is a widely deployed enterprise VPN platform with ~1,500+ internet-visible instances. Any score below 10.0 would misrepresent the risk to defenders.

06 · Verification

Crowdsourced verification payload.

Run this script from any Linux/macOS workstation with curl and network access to the target SMA1000 appliance. Usage: bash check_cve_2026_15409.sh <target_host> where <target_host> is the FQDN or IP of the SMA1000 Work Place portal. No special privileges required — it performs only an HTTP probe, no exploitation.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_15409.sh — Remote vulnerability check for CVE-2026-15409
# SonicWall SMA1000 Work Place SSRF via /wsproxy
# Safe, non-exploitative probe: checks for WebSocket upgrade on /wsproxy
# Exit codes: 0=VULNERABLE, 1=PATCHED, 2=UNKNOWN

set -euo pipefail

if [ $# -lt 1 ]; then
  echo "Usage: $0 <target_host> [port]"
  echo "Example: $0 sma.example.com 443"
  exit 2
fi

TARGET="$1"
PORT="${2:-443}"
URL="https://${TARGET}:${PORT}/wsproxy?host=127.0.0.1&port=1050&bmID=-3389test"
TIMEOUT=10

echo "[*] CVE-2026-15409 Check — SonicWall SMA1000 /wsproxy SSRF"
echo "[*] Target: ${TARGET}:${PORT}"
echo "[*] Date: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo ""

# Step 1: Check if the host is reachable and looks like SMA1000
echo "[*] Step 1: Checking if target is reachable..."
HTTP_CODE=$(curl -sk -o /dev/null -w '%{http_code}' --connect-timeout "$TIMEOUT" "https://${TARGET}:${PORT}/" 2>/dev/null || echo "000")

if [ "$HTTP_CODE" = "000" ]; then
  echo "[-] Target unreachable or connection refused."
  echo "UNKNOWN"
  exit 2
fi

echo "[+] Target responded with HTTP ${HTTP_CODE}"

# Step 2: Probe /wsproxy with WebSocket upgrade headers
echo "[*] Step 2: Probing /wsproxy endpoint..."
RESPONSE=$(curl -sk -i --connect-timeout "$TIMEOUT" --max-time 15 \
  -H "Upgrade: websocket" \
  -H "Connection: Upgrade" \
  -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
  -H "Sec-WebSocket-Version: 13" \
  "$URL" 2>/dev/null || echo "CURL_FAILED")

if echo "$RESPONSE" | grep -q "CURL_FAILED"; then
  echo "[-] Failed to probe /wsproxy endpoint."
  echo "UNKNOWN"
  exit 2
fi

# Step 3: Analyze the response
WSPROXY_STATUS=$(echo "$RESPONSE" | head -1 | grep -oP '\d{3}' | head -1 || echo "000")

echo "[*] /wsproxy responded with HTTP ${WSPROXY_STATUS}"

if [ "$WSPROXY_STATUS" = "101" ]; then
  echo ""
  echo "[!] ============================================"
  echo "[!] VULNERABLE — CVE-2026-15409"
  echo "[!] The /wsproxy endpoint accepted a WebSocket"
  echo "[!] upgrade to localhost:1050 without auth."
  echo "[!] Patch IMMEDIATELY to 12.4.3-03453+ or"
  echo "[!] 12.5.0-02835+."
  echo "[!] ============================================"
  echo ""
  echo "VULNERABLE"
  exit 0
elif [ "$WSPROXY_STATUS" = "403" ] || [ "$WSPROXY_STATUS" = "404" ] || [ "$WSPROXY_STATUS" = "400" ]; then
  echo ""
  echo "[+] PATCHED — /wsproxy returned ${WSPROXY_STATUS}"
  echo "[+] The endpoint appears to reject the SSRF"
  echo "[+] proxy request. Verify firmware version is"
  echo "[+] >= 12.4.3-03453 or >= 12.5.0-02835."
  echo ""
  echo "PATCHED"
  exit 1
else
  echo ""
  echo "[?] UNKNOWN — Unexpected response code ${WSPROXY_STATUS}"
  echo "[?] Manually verify the SMA1000 firmware version."
  echo "[?] Check AMC > System > Status for hotfix version."
  echo "[?] Vulnerable: 12.4.3-03434 and below, 12.5.0-02800 and below"
  echo "[?] Patched: 12.4.3-03453+, 12.5.0-02835+"
  echo ""
  echo "UNKNOWN"
  exit 2
fi