Back to Intelligence

CVE-2026-111497: Node2Shell OOB Write Threatens Siemens Desigo & Gridscale — Defense Guide

SA
Security Arsenal Team
November 12, 2026
8 min read

On October 21, 2026, the Node.js project disclosed a critical out-of-bounds write vulnerability in the Brotli decoder, tracked as CVE-2026-111497 and dubbed "Node2Shell." This flaw enables remote memory corruption and potential arbitrary code execution. Siemens has confirmed that multiple versions of its Desigo CC building management platform and Gridscale X DSA grid control system are affected.

For defenders, this is not a theoretical bug. Desigo CC manages HVAC, fire safety, and security systems in commercial and industrial facilities. Gridscale X DSA is used for dynamic security assessment in power transmission networks. Both are typically deployed in segmented but reachable zones of an OT/ICS environment. A successful exploit could give an attacker a foothold on a Windows-based HMI or data server, leading to loss of view, loss of control, or lateral movement into safety-critical processes.

This guide provides a technical breakdown, actionable detection rules, and remediation steps to help you identify and neutralize this threat before it is weaponized.

Technical Analysis

Affected Products & Versions

  • Desigo CC family V8: All versions (vers:all/*)
  • Desigo CC family V9: All versions (vers:all/*)
  • Gridscale X DSA: Versions >= 5.3 and < 5.4 (vers:intdot/>=5.3|<5.4)

Both products embed a vulnerable Node.js runtime that uses the Brotli compression library for HTTP(S) API handling and internal data serialization. The vulnerability is triggered when the Brotli decoder processes a malformed stream, causing an out-of-bounds write on the heap. Depending on memory layout and mitigations, this can lead to a crash or controlled code execution.

CVE & Scoring

  • CVE ID: CVE-2026-111497
  • CVSS v3.1: 9.8 (Critical) — Network exploitable, low complexity, no privileges or user interaction required.
  • CWE: CWE-787 (Out-of-bounds Write)

Attack Chain (Defender's Perspective)

  1. Delivery: The attacker sends a crafted HTTP(S) request or MQTT/WebSocket payload containing a malicious Brotli-compressed body to a Node.js service endpoint exposed by Desigo CC or Gridscale X DSA.
  2. Trigger: The Brotli decoder allocates a buffer based on attacker-controlled size fields, then writes past the boundary during decompression.
  3. Impact: Memory corruption in the Node.js process (typically node.exe running under a service account). If the attacker can groom the heap, they may overwrite function pointers or vtable entries to achieve arbitrary code execution.
  4. Post-Exploitation: On Windows hosts, this commonly results in the Node.js process spawning cmd.exe, powershell.exe, or rundll32.exe to establish persistence, dump credentials, or move laterally via SMB/RDP.

Exploitation Status

As of this writing, no public proof-of-concept code has been released, and the vulnerability is not yet listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. However, given the criticality, network exposure of these systems, and history of Node.js decoder flaws being rapidly weaponized, defenders should assume active scanning and exploit development are underway. Siemens has released fixed versions; organizations running affected builds are urged to patch immediately.

Detection & Response

The following detections focus on the most reliable post-exploitation behaviors: anomalous child processes spawned by the Node.js runtime and unexpected network connections originating from Desigo/Gridscale servers.

YAML
---
title: Node2Shell Post-Exploitation - Node.js Spawning Shell
id: 8f4e2d1c-3b7a-4e9f-a2c8-5d6e1f9b0a3c
status: experimental
description: Detects node.exe spawning command interpreters or script hosts, a common indicator of successful exploitation of CVE-2026-111497 in Siemens Desigo CC or Gridscale X DSA.
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-316-02
  - https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/10/21
tags:
  - attack.execution
  - attack.t1059
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith: '\node.exe'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\mshta.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Legitimate administrative scripts executed by Desigo CC or Gridscale X DSA maintenance tasks. Whitelist known service accounts and scheduled tasks.
level: high
---
title: Node2Shell Network Beaconing - Unexpected Outbound from ICS Host
id: 2a1c5e8f-9d4b-4c7e-b3f1-6a8d0e2c5f7b
status: experimental
description: Detects network connections from Desigo CC or Gridscale X DSA servers to external IP addresses on non-standard ports, indicating potential C2 communication after exploitation.
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-316-02
  - https://attack.mitre.org/techniques/T1071/
author: Security Arsenal
date: 2026/10/21
tags:
  - attack.command_and_control
  - attack.t1071
logsource:
  category: network_connection
  product: windows
detection:
  selection_image:
    Image|endswith:
      - '\node.exe'
      - '\DesigoCC.exe'
      - '\GridscaleX.exe'
  selection_dest:
    DestinationIp|cidr:
      - '0.0.0.0/0'
  filter_private:
    DestinationIp|cidr:
      - '10.0.0.0/8'
      - '172.16.0.0/12'
      - '192.168.0.0/16'
      - '169.254.0.0/16'
  filter_ports:
    DestinationPort:
      - 80
      - 443
  condition: selection_image and selection_dest and not filter_private and not filter_ports
falsepositives:
  - Cloud-based telemetry or update services. Tune by adding known Siemens FQDNs/IP ranges to the filter.
level: medium
KQL — Microsoft Sentinel / Defender
// Hunt for Node.js child process anomalies on Desigo CC / Gridscale X DSA hosts
// Ingest via Microsoft Defender for Endpoint or Sentinel Sysmon connector
let suspiciousParents = dynamic([@"\node.exe", @"\DesigoCC.exe", @"\GridscaleX.exe"]);
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName in~ (suspiciousParents)
| where FileName in~ (@"cmd.exe", @"powershell.exe", @"pwsh.exe", @"wscript.exe", @"cscript.exe", @"rundll32.exe", @"mshta.exe", @"reg.exe", @"sc.exe", @"net.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, AccountName, InitiatingProcessAccountName
| order by TimeGenerated desc;
VQL — Velociraptor
-- Hunt for suspicious child processes spawned by Node.js or Siemens services
-- Artifact: Windows.System.Pslist or a custom hunt
SELECT Pid, Name, Exe, CommandLine, Username, CreateTime,
       parent.Name as ParentName, parent.Exe as ParentExe
FROM pslist()
WHERE ParentExe =~ '(?i)node\.exe$|DesigoCC\.exe$|GridscaleX\.exe$'
  AND Name =~ '(?i)cmd|powershell|pwsh|wscript|cscript|rundll32|mshta|reg|sc|net'
PowerShell
# Verify and mitigate CVE-2026-111497 exposure on Siemens hosts
# Run as Administrator on Desigo CC / Gridscale X DSA servers

# 1. Identify installed Siemens product versions
$desigoPath = "HKLM:\SOFTWARE\Siemens\DesigoCC"
$gridscalePath = "HKLM:\SOFTWARE\Siemens\GridscaleX"

if (Test-Path $desigoPath) {
    $ver = Get-ItemProperty -Path $desigoPath -Name "Version" -ErrorAction SilentlyContinue
    Write-Host "[+] Desigo CC detected: $($ver.Version)" -ForegroundColor Yellow
    if ($ver.Version -match "^8\.|^9\.") {
        Write-Host "[-] VULNERABLE: Desigo CC V8/V9 requires update to latest patched build." -ForegroundColor Red
    }
}

if (Test-Path $gridscalePath) {
    $ver = Get-ItemProperty -Path $gridscalePath -Name "Version" -ErrorAction SilentlyContinue
    Write-Host "[+] Gridscale X detected: $($ver.Version)" -ForegroundColor Yellow
    if ($ver.Version -ge "5.3" -and $ver.Version -lt "5.4") {
        Write-Host "[-] VULNERABLE: Gridscale X DSA 5.3-5.3.x requires update to 5.4 or later." -ForegroundColor Red
    }
}

# 2. Temporary mitigation: Restrict outbound traffic from Node.js process
# Note: Test in a lab before applying to production ICS
$nodePath = Get-Process node -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path
if ($nodePath) {
    Write-Host "[+] Creating outbound firewall block for node.exe (review before enabling)" -ForegroundColor Cyan
    # Uncomment after validation
    # New-NetFirewallRule -DisplayName "Block Node.js Outbound - CVE-2026-111497 Mitigation" -Direction Outbound -Program $nodePath -Action Block
}

# 3. Audit for suspicious child processes in last 24 hours
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1; StartTime=(Get-Date).AddDays(-1)} -ErrorAction SilentlyContinue |
    Where-Object { $_.Properties[4].Value -match 'node\.exe|DesigoCC\.exe|GridscaleX\.exe' -and $_.Properties[5].Value -match 'cmd|powershell|rundll32|mshta' } |
    Select-Object TimeCreated, @{N='Parent';E={$_.Properties[4].Value}}, @{N='Child';E={$_.Properties[5].Value}}, @{N='CmdLine';E={$_.Properties[10].Value}} |
    Format-List

Remediation

  1. Patch Immediately

    • Siemens has released fixed versions for Desigo CC V8/V9 and Gridscale X DSA. Upgrade to the latest versions as specified in Siemens ProductCERT Advisory SSA-XXXXXX (linked via the CSAF document referenced in CISA ICSA-26-316-02).
    • For Gridscale X DSA, ensure you are on version 5.4 or later.
    • For Desigo CC V8/V9, apply the hotfix or cumulative update provided by your Siemens support channel.
  2. Network Segmentation & Exposure Reduction

    • Place Desigo CC and Gridscale X DSA servers behind a firewall with strict ingress/egress rules.
    • Block inbound HTTP/HTTPS from untrusted networks to the Node.js service ports (typically 443, 8443, or custom API ports).
    • Disable any unnecessary Node.js endpoints or plugins in the application configuration.
  3. Application Hardening

    • Run the Node.js service under a dedicated low-privilege service account with no interactive logon rights.
    • Enable Windows Defender Exploit Guard (WDEG) or Microsoft Defender for Endpoint attack surface reduction rules to block Office and script child processes from spawning node.exe.
    • Deploy application whitelisting (e.g., AppLocker, WDAC) to prevent unauthorized binaries from executing on ICS servers.
  4. Monitoring & Threat Hunting

    • Deploy the Sigma rules above to your SIEM and tune for known legitimate administrative scripts.
    • Run the KQL hunt daily for the next 30 days or until all systems are patched.
    • Use the Velociraptor VQL artifact to sweep for anomalous process trees on Desigo/Gridscale hosts during threat hunting exercises.
  5. Incident Response Readiness

    • If you detect suspicious child processes or network connections from these hosts, isolate the system from the network immediately.
    • Capture volatile memory (RAM) and a full disk image before applying patches or rebooting.
    • Review Node.js application logs (often located in C:\ProgramData\Siemens\DesigoCC\logs or similar) for malformed Brotli payloads or unexpected API requests.
  6. Vendor Coordination

    • Subscribe to Siemens ProductCERT and CISA ICS-CERT alerts for updates on CVE-2026-111497.
    • If your organization cannot patch immediately due to operational constraints, contact Siemens support for guidance on temporary mitigations and compensating controls.

Do not wait for public exploit code to appear. The combination of critical severity, network accessibility, and the presence of these systems in building automation and power grid environments makes them a high-value target. Patch, segment, and monitor aggressively.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.