← Back to Feed CACHED · 2026-11-04 00:14:54 · CACHE_KEY CVE-2026-109594
CVE-2026-109594 · CWE-89 · Disclosed 2026-11-03

SonicWall GMS post-auth SQL injection in EOL 9.5.2

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

A master-keyed janitor finds an unpatched duct into the building's security blueprint room

CVE-2026-109594 is a post-authentication SQL injection in SonicWall Global Management System (GMS) 9.5.2 and earlier. Once an attacker has a valid high-privilege GMS account, they can submit crafted input to an unspecified management interface parameter that reaches a SQL query, allowing them to read arbitrary data from the backend database. The affected product is end-of-life, and no fixed version exists.

SonicWall's MEDIUM 6.8 rating reflects the PR:H requirement, but it misses the central role of GMS: a compromised GMS database can expose credentials and configuration data for managed SonicWall firewalls, turning a single authenticated read into a fleet-wide pivot. With no patch available for EOL software, the practical severity is higher than the vendor number suggests.

"Fleet-wide firewall secrets behind a single high-privilege SQLi — patch can't save EOL, so isolate or migrate."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Obtain a valid high-privilege GMS account

Attacker needs credentials for an account with administrative rights on the GMS web console. This can come from credential reuse, phishing, a compromised admin workstation, or a previous breach of the management network.
Conditions required:
  • Valid GMS administrator username/password or session token
  • Network access to the GMS management interface
Where this breaks in practice:
  • GMS should not be reachable from the internet
  • MFA on admin accounts can block reused/phished credentials if enforced
Detection/coverage: No vendor detection; check SIEM for anomalous admin logins.
STEP 02

Authenticate to the GMS web console

The attacker logs in to the HTTPS management interface and reaches the vulnerable function. The SQL injection likely sits behind an authenticated endpoint, so unauthenticated scans will not see it.
Conditions required:
  • Successful admin session established
  • Access to the vulnerable URL/parameter
Where this breaks in practice:
  • Internal segmentation or jump hosts may restrict access
  • Session timeouts and MFA re-auth reduce persistence
Detection/coverage: Web server access logs show admin login and subsequent POST requests.
STEP 03

Identify the injectable parameter

The attacker locates the SQLi by fuzzing form fields or API parameters visible to an authenticated admin. No public exploit exists, so this requires manual testing or a private tool.
Conditions required:
  • Ability to make requests to vulnerable endpoint
  • Knowledge of the application parameter
Where this breaks in practice:
  • No public PoC; exploit development effort needed
  • WAF may flag SQL metacharacters
Detection/coverage: WAF or RASP may catch ' OR 1=1 style payloads.
STEP 04

Inject malicious SQL to read database contents

A crafted SQL payload causes the backend database to return rows beyond the application's intended query, such as user tables, configuration data, and stored secrets.
Conditions required:
  • Backend database accepts injected syntax
  • No prepared statements or effective input validation
Where this breaks in practice:
  • Privilege context of DB user may limit some tables
  • WAF/database auditing may trigger
Detection/coverage: Database audit logs show suspicious queries from the GMS service account.
STEP 05

Extract managed firewall credentials and pivot

The attacker pulls stored credentials, pre-shared keys, or configuration templates for managed SonicWall appliances and uses them to log into firewalls across the enterprise.
Conditions required:
  • GMS database stores firewall credentials or secrets
  • Managed devices trust GMS or share credentials
Where this breaks in practice:
  • Secrets may be encrypted or hashed
  • Managed firewalls may have MFA or separate admin accounts not in GMS
Detection/coverage: SIEM may detect firewall logins from unusual GMS IP or concurrent sessions.
03 · Compensating Control

1
HIGH 7.8→LOW 2.0
SEVERITY REDUCED
Remove or isolate the EOL GMS server — Since no patch exists, the only true remediation is decommissioning the EOL GMS and migrating to a supported management platform (e.g., SonicWall NSM) or removing it from service. noisgate mitigation SLA for HIGH is 30 days; remediation SLA is 180 days, but for EOL 'patch' means replacement.
2
HIGH 7.8→MEDIUM 5.5
SEVERITY REDUCED
Restrict access to GMS to dedicated admin VLAN/jump hosts and enforce MFA — Break the attack path at step 1 and 2: only pre-authorized admin workstations can reach the GMS web UI, and MFA blocks reused/phished accounts. Deploy within 30 days.
3
HIGH 7.8→MEDIUM 5.0
SEVERITY REDUCED
Deploy WAF or database activity monitoring in front of GMS temporarily — If the EOL system must remain alive during migration, place a Web Application Firewall to filter SQLi payloads and enable database audit logging to detect abnormal queries. This is a stopgap within 30 days, not a fix.
4
HIGH 7.8→MEDIUM 5.8
SEVERITY REDUCED
Audit and reduce GMS admin accounts — Remove unused high-privilege accounts and enforce just-in-time admin access to shrink the set of users who could reach the injection point.
What doesn't work
  • Patching: no fixed version exists because product is EOL; patch management won't help.
  • Antivirus/EDR on the GMS server: SQL injection is application-layer; host AV cannot inspect SQL queries.
  • Network firewall rules allowing HTTPS to the GMS server: these only control who can connect, not what an authenticated admin can do.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo known exploitation; not in CISA KEV.
KEV listedNo
PoC availabilityNo public exploit code; VulDB lists no exploit as of 2026-11-02.
EPSS score/percentileNot available / likely very low (post-auth, no PoC)
Affected versionsGMS 9.5.2 and earlier (Windows and Virtual Appliance)
Fixed versionsNone — product is end-of-life
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:N/A:N (vendor: MEDIUM 6.8)
Scanning/exposureGMS is typically internal network; internet-facing exposure not expected; no Shodan data available.
Disclosure date2026-11-03
Reporter/organizationSonicWall PSIRT (SNWLID-2026-0019)

Sources.

  1. SonicWall PSIRT Advisory SNWLID-2026-0019
  2. VulDB CVE-2026-109594
  3. Rapid7 Vulnerability Database
  4. OpenCVE CVE-2026-109594
  5. Launchpad CVE-2026-109594
  6. CVE.org Record
  7. NVD CVE-2026-109594
05 · The Call

Final Verdict
↑ UPGRADED to HIGH (7.8/10)

Why this verdict

  • Friction audit: requires valid high-privilege GMS admin account — attacker is already inside the management plane before exploiting this, which limits the reachable population.
  • Role multiplier: GMS is central management for SonicWall firewalls; a successful SQLi can dump stored credentials/configs and enable fleet-wide firewall compromise.
  • EOL/no patch: no patch or workaround exists, so any compromised deployment remains exploitable until decommissioned or migrated.

Why not higher?

Not unauthenticated: the attacker cannot trigger the SQLi without a valid high-privilege session, and no public exploit or in-the-wild activity exists. The added step of obtaining admin credentials substantially reduces the chance of mass opportunistic exploitation.

Why not lower?

The affected component sits in a high-value management role; database access can lead to fleet-scale credential exposure and firewall compromise. EOL status removes the usual patch remedy and raises the need for immediate isolation/migration.

06 · Verification

Crowdsourced verification payload.

Run this script on the GMS server itself (Windows or Linux) with local administrator/root privileges. Invoke with python check_gms_cve_2026_109594.py; it will check the installed GMS version and output VULNERABLE, PATCHED, or UNKNOWN. On Windows it reads the registry; on Linux it checks common installation paths.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
import sys, os, platform

def get_windows_version():
    import winreg
    keys = [
        (winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\SonicWall\GMS"),
        (winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\SonicWall\GMS"),
    ]
    for root, path in keys:
        try:
            with winreg.OpenKey(root, path) as k:
                ver, _ = winreg.QueryValueEx(k, "Version")
                return ver
        except Exception:
            continue
    return None

def get_linux_version():
    paths = ["/opt/sonicwall/gms/version", "/usr/local/sonicwall/gms/version", "/etc/sonicwall/gms/version"]
    for p in paths:
        if os.path.exists(p):
            with open(p) as f:
                return f.read().strip()
    return None

def main():
    ver = None
    if platform.system() == "Windows":
        ver = get_windows_version()
    else:
        ver = get_linux_version()
    if ver is None:
        print("UNKNOWN: GMS version not found")
        sys.exit(2)
    try:
        parts = ver.split(".")[:3]
        major = int(parts[0])
        minor = int(parts[1])
        patch = int(parts[2]) if len(parts) > 2 else 0
    except Exception:
        print(f"UNKNOWN: cannot parse version {ver}")
        sys.exit(2)
    if (major < 9) or (major == 9 and minor < 5) or (major == 9 and minor == 5 and patch <= 2):
        print(f"VULNERABLE: GMS version {ver} is 9.5.2 or earlier")
        sys.exit(1)
    else:
        print(f"PATCHED: GMS version {ver} is later than 9.5.2")
        sys.exit(0)

if __name__ == "__main__":
    main()