Back to Intelligence

CVE-2026-13348: Schneider Electric PowerChute Serial Shutdown Brute-Force Gap — Detection and Remediation

SA
Security Arsenal Team
September 17, 2026
10 min read

Schneider Electric has disclosed an authentication-throttling weakness in PowerChute Serial Shutdown, tracked as CVE-2026-13348 and published through CISA as ICSA-26-260-07. The affected software is not a peripheral convenience tool: it is UPS management software that can issue graceful shutdown commands and expose power/energy state for desktops, servers, and workstations. In a data center, plant floor, hospital closet, or edge site, that makes it an operational-technology dependency with direct availability impact.

The weakness is CWE-307 — Improper Restriction of Excessive Authentication Attempts with a stated CVSS v3 score of 5.3. Do not let the medium score create medium urgency. If the management interface is reachable from flat networks, jump hosts, or worse, the internet, an attacker can repeatedly test credentials until weak or reused passwords give up control of shutdown workflows. The business risk is loss of availability first, and unauthorized visibility into power/system state second.

Technical Analysis

Affected products and versions

Per the CISA ICS advisory and the referenced Schneider Electric CSAF content, affected equipment is:

Because the version string in the advisory summary is terse, treat all deployed 1.x builds as in scope until your inventory confirms the exact installed build and the fixed release from the Schneider Electric CSAF.

Defender view of the attack chain

The defect is a missing or insufficient control around repeated authentication attempts against the PowerChute Serial Shutdown authentication path. A practical attack sequence looks like this:

  1. Discovery: Attacker identifies a reachable PowerChute Serial Shutdown host or management interface through network scanning, asset inventory leaks, or exposed service fingerprints.
  2. Credential access attempt: Because excessive attempts are not properly restricted, the attacker can perform password spraying, credential stuffing, or online brute force without effective lockout, throttling, alerting, or progressive delay.
  3. Authentication validation failure impact: If credentials are weak, default, reused, phished, or recovered from another breach, the attacker crosses from unauthenticated probing to authenticated access.
  4. Operational impact: Authenticated access to UPS management can enable shutdown actions, changes to power management behavior, reconnaissance of connected systems, and disruption of operations.

Exploitation requirements are typical for authentication-throttling bugs: network reachability to the authentication surface, knowledge or discovery of the endpoint, and credentials that can be guessed or validated. There is no requirement in the provided advisory text for a complex memory-corruption chain or local foothold.

Exploitation status

The provided CISA summary does not state public proof-of-concept code, confirmed in-the-wild exploitation, ransomware use, or CISA Known Exploited Vulnerabilities catalog inclusion. Treat exploitation as unconfirmed but straightforward to attempt if the interface is exposed. The absence of a public exploit is not a compensating control for an internet-reachable authentication endpoint.

Why this matters in OT and edge environments

UPS shutdown software often sits in the uncomfortable seam between IT and OT: Windows or Linux servers, out-of-band management VLANs, serial-attached UPS devices, and sometimes poorly governed remote access. A successful login can translate into coordinated shutdown of hosts, interrupted control systems, corrupted transactions, delayed recovery, and unsafe operational states. For environments under NIST CSF, CIS Controls, PCI-DSS, or HIPAA, this maps directly to identify/protect failures around asset inventory, boundary protection, credential management, and logging.

Detection & Response

Use detection in layers: host telemetry around PowerChute processes, authentication failure bursts from the management surface, network exposure of the service, and change control around the installation directory. The rules below are intentionally focused on behaviors that should be rare outside maintenance windows. Tune names and paths to your exact deployment after inventory.

YAML
---
title: PowerChute Serial Shutdown Spawning Command Shell or Script Interpreter
id: 9c7a4d12-8f3b-4c1e-a2d5-6e7f8a9b0c1d
status: experimental
description: Detects PowerChute Serial Shutdown processes launching shells, script interpreters, or system utilities that could indicate post-authentication abuse or unauthorized operational commands.
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-260-07
  - https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/09/17
tags:
  - attack.execution
  - attack.t1059
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|contains:
      - '\PowerChute'
      - '\Schneider Electric'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\net.exe'
      - '\shutdown.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Vendor update or maintenance activity during approved change windows
  - Legitimate UPS shutdown scripts explicitly launched by the product
level: high
---
title: Unauthorized Modification of PowerChute Serial Shutdown Installation Files
id: 4f6e2a81-7c0d-4b9e-9a31-2d3c4b5a6f70
status: experimental
description: Detects creation or modification of files in PowerChute Serial Shutdown installation paths by processes other than expected installers or updaters.
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-260-07
  - https://attack.mitre.org/techniques/T1543/
author: Security Arsenal
date: 2026/09/17
tags:
  - attack.persistence
  - attack.defense_evasion
logsource:
  category: file_event
  product: windows
detection:
  selection_path:
    TargetFilename|contains:
      - '\PowerChute'
      - '\Schneider Electric\PowerChute'
  filter_installers:
    Image|endswith:
      - '\msiexec.exe'
      - '\setup.exe'
      - '\installer.exe'
    CommandLine|contains:
      - 'install'
      - 'update'
      - 'patch'
  condition: selection_path and not filter_installers
falsepositives:
  - Authorized Schneider Electric upgrades
  - Configuration management or backup agents touching application directories
level: medium
KQL — Microsoft Sentinel / Defender
// Identify hosts with PowerChute Serial Shutdown telemetry, then look for suspicious child processes.
let lookback = 7d;
let pcs_hosts = DeviceProcessEvents
| where TimeGenerated >= ago(lookback)
| where FileName has_any ("powerchute", "pcss") or ProcessCommandLine has "PowerChute" or FolderPath has "PowerChute"
| summarize by DeviceId;
DeviceProcessEvents
| where TimeGenerated >= ago(lookback)
| join kind=inner pcs_hosts on DeviceId
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "rundll32.exe", "regsvr32.exe", "net.exe", "shutdown.exe")
| summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Count=count(), SampleCommand=any(ProcessCommandLine)
  by DeviceName, FileName, InitiatingProcessFileName, InitiatingProcessCommandLine, AccountName
| order by LastSeen desc;

// Hunt authentication failure bursts involving likely UPS/PowerChute hosts ingested via Syslog/CEF.
let lookback = 7d;
Syslog
| where TimeGenerated >= ago(lookback)
| where Computer has_any ("ups", "powerchute", "pcss") or ProcessName has_any ("powerchute", "pcss") or SyslogMessage has "PowerChute"
| where SyslogMessage has_any ("Failed password", "authentication failure", "Invalid user", "failed login", "Login failed")
| summarize FailedAttempts=count(), Users=dcount(UserName), SourceIPs=make_set(HostIP, 10), Sample=any(SyslogMessage)
  by Computer, Facility, SeverityLevel, bin(TimeGenerated, 5m)
| where FailedAttempts >= 10 or Users >= 5
| order by FailedAttempts desc;

// Windows hosts: failed logon bursts on servers that appear to run PowerChute.
let lookback = 7d;
let pcs_windows_hosts = DeviceProcessEvents
| where TimeGenerated >= ago(lookback)
| where ProcessCommandLine has "PowerChute" or FolderPath has "PowerChute"
| summarize by DeviceName;
SecurityEvent
| where TimeGenerated >= ago(lookback)
| where Computer in (pcs_windows_hosts)
| where Activity has "4625" or EventID == 4625
| summarize FailedLogons=count(), Accounts=dcount(TargetUserName), Sources=dcount(IpAddress), SampleSource=any(IpAddress)
  by Computer, bin(TimeGenerated, 5m)
| where FailedLogons >= 10 or Accounts >= 5 or Sources >= 3
| order by FailedLogons desc;
VQL — Velociraptor
-- Velociraptor hunt: find PowerChute Serial Shutdown processes and command lines that reference shutdown or UPS management.
SELECT Pid,
       Name,
       Exe,
       CommandLine,
       Username,
       CreateTime
FROM pslist()
WHERE Name =~ '(?i)(powerchute|pcss|ups)'
   OR Exe =~ '(?i)(Schneider Electric|PowerChute)'
   OR CommandLine =~ '(?i)(powerchute|pcss|graceful shutdown|ups shutdown)'
PowerShell
# Security Arsenal - CVE-2026-13348 inventory, exposure check, and hardening verification
# Run elevated on Windows servers/workstations that may host Schneider Electric PowerChute Serial Shutdown.

$fixedVersionHint = "Confirm the fixed build in the Schneider Electric CSAF linked from CISA ICSA-26-260-07"
$uninstallRoots = @(
  "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
  "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)

$installs = foreach ($root in $uninstallRoots) {
  Get-ItemProperty $root -ErrorAction SilentlyContinue |
    Where-Object { $_.DisplayName -match "PowerChute Serial Shutdown|PowerChute" } |
    Select-Object DisplayName, DisplayVersion, Publisher, InstallLocation, UninstallString
}

$report = foreach ($app in $installs) {
  $parsed = $null
  $isAffected = $null
  if ([version]::TryParse(($app.DisplayVersion -replace '[^0-9\.]', ''), [ref]$parsed)) {
    $isAffected = ($parsed -le [version]'1.5') -or ($parsed -eq [version]'1.6')
  }
  [pscustomobject]@{
    DisplayName      = $app.DisplayName
    DisplayVersion   = $app.DisplayVersion
    ParsedVersion    = $parsed
    AffectedPerCISA  = $isAffected
    Publisher        = $app.Publisher
    InstallLocation  = $app.InstallLocation
    Action           = if ($isAffected -eq $true) { "UPGRADE/ISOLATE NOW" } elseif ($isAffected -eq $false) { "Verify against vendor fixed release" } else { "Manual version validation required" }
    FixedVersionHint = $fixedVersionHint
  }
}

$services = Get-CimInstance Win32_Service -ErrorAction SilentlyContinue |
  Where-Object { $_.Name -match "powerchute|pcss|ups" -or $_.DisplayName -match "PowerChute|UPS" -or $_.PathName -match "PowerChute|Schneider Electric" } |
  Select-Object Name, DisplayName, State, StartMode, StartName, PathName, ProcessId

$processes = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
  Where-Object { $_.Name -match "powerchute|pcss|ups" -or $_.ExecutablePath -match "PowerChute|Schneider Electric" -or $_.CommandLine -match "PowerChute|shutdown" } |
  Select-Object ProcessId, Name, ExecutablePath, CommandLine, ParentProcessId

$pids = @($processes.ProcessId + $services.ProcessId | Where-Object { $_ } | Select-Object -Unique)
$listeners = if ($pids.Count -gt 0) {
  Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
    Where-Object { $pids -contains $_.OwningProcess } |
    Select-Object LocalAddress, LocalPort, OwningProcess, State
}

[pscustomobject]@{
  ComputerName = $env:COMPUTERNAME
  CheckedAt    = (Get-Date).ToUniversalTime().ToString("o")
  Installs     = @($report)
  Services     = @($services)
  Processes    = @($processes)
  Listeners    = @($listeners)
  Advisory     = "https://www.cisa.gov/news-events/ics-advisories/icsa-26-260-07"
  NextSteps    = @(
    "Apply the Schneider Electric fixed release from the CSAF for CVE-2026-13348.",
    "Restrict PowerChute management listeners to approved jump-host subnets only.",
    "Block internet exposure and validate no public IP maps to the host or interface.",
    "Centralize application, OS authentication, firewall, and shutdown-event logs.",
    "Alert on repeated authentication failures and any PowerChute-spawned shell/process."
  )
} | ConvertTo-Json -Depth 6

Remediation

Immediate actions

  1. Inventory every instance. Search endpoints, servers, workstation images, virtual appliances, and backup/DR sites for PowerChute Serial Shutdown. Confirm exact installed versions and flag <= 1.5 and 1.6 per the advisory.
  2. Remove exposure. PowerChute management should never be internet-facing. Verify externally with attack-surface management and internally with firewall exports, NAT rules, cloud security groups, and EDR network telemetry.
  3. Apply the vendor fix. Deploy the Schneider Electric remediation specified in the CSAF referenced by CISA ICSA-26-260-07. If your installed branch does not map cleanly to a fixed build, open a vendor support case and document the interim risk acceptance.
  4. Segment and allowlist. Restrict management listeners to a small set of jump hosts or monitoring systems. Deny user VLANs and general server VLANs from initiating authentication to UPS management unless there is a documented operational need.
  5. Credential hygiene. Remove defaults, enforce unique local/service credentials, rotate any credential that may have been sprayed, and require phishing-resistant MFA at upstream remote access layers where the product itself cannot enforce MFA.
  6. Centralize logs. Forward application logs, Windows Security events, Syslog/auth logs, firewall accepts/denies, and shutdown events to the SIEM. Alert on bursts of failed authentication, authentication from new source IPs, and PowerChute processes spawning shells or shutdown utilities.

If you cannot patch immediately

  • Take the management interface offline if graceful shutdown automation is not required for the current operational state.
  • Put the service behind a VPN or jump host with device compliance and MFA; do not rely on the application as the only authentication barrier.
  • Enforce upstream throttling and lockout at the IdP, reverse proxy, firewall, or host firewall where possible.
  • Add temporary network deny rules for all non-management sources and monitor for denied connection spikes.
  • Increase logging verbosity and shorten log review cadence to daily until patched.
  • Pre-stage and test recovery procedures so a malicious or accidental shutdown does not become a prolonged outage.

Validation checklist

  • Fixed release is installed and version matches Schneider Electric guidance for CVE-2026-13348.
  • No public IP, port forward, or cloud inbound rule reaches the PowerChute host/interface.
  • Only approved jump hosts can authenticate; all other sources are denied and logged.
  • Failed authentication bursts trigger SIEM alerts within five minutes.
  • PowerChute spawning cmd.exe, powershell.exe, shutdown.exe, or script interpreters generates a high-severity alert outside change windows.
  • A controlled graceful-shutdown test was performed after patching to confirm business continuity behavior.

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.