Back to Intelligence

CVE-2026-69108 & CVE-2026-69109: Siemens License Server Privilege Escalation and Arbitrary File Read — Detection and Remediation Guide

SA
Security Arsenal Team
August 13, 2026
12 min read

CISA has published ICS advisory ICSA-26-225-07 covering multiple vulnerabilities in the Siemens License Server (SLS) — a component that sits quietly in the background of countless engineering, automation, and industrial environments, often installed as a dependency of Siemens engineering software and then forgotten about. That is precisely what makes this advisory dangerous.

Two CVEs are in play: CVE-2026-69108 and CVE-2026-69109, carrying a combined CVSS v3 score of 7.5 (High). Successful exploitation allows an attacker to elevate privileges and read arbitrary files from the underlying system. Siemens has released fixed versions and is urging customers to update immediately.

If you run Siemens engineering workstations, license servers on OT-adjacent networks, or any host where SLS was installed to support Siemens software activation, you are in scope. License servers are high-value targets: they typically run with elevated service privileges, they are reachable on the network by design, and they are almost never monitored. An arbitrary file read on a license server means SAM hives, configuration secrets, and credential material are on the table. A privilege escalation on the same host turns a foothold into full control.

Act on this one this week, not this quarter.

Technical Analysis

Affected Products and Versions

Per the Siemens advisory (distributed via CISA ICSA-26-225-07), the following versions of Siemens License Server are affected:

  • Siemens License Server (SLS) — all versions prior to 5.1
  • Siemens License Server (SLS) — all versions prior to 5.3 (the advisory enumerates two vulnerable version branches, each addressed by its respective fixed release)

SLS is deployed worldwide, with Siemens headquartered in Germany, and the advisory maps the affected product to the Information Technology critical infrastructure sector. In practice, SLS shows up wherever Siemens engineering and automation software is licensed — which means IT, OT, and engineering environments across manufacturing, energy, and critical infrastructure.

Vulnerability Details

CVECWEImpactCVSS v3
CVE-2026-69108Incorrect Permission Assignment for Critical Resource (CWE-732)Privilege escalation7.5 (combined)
CVE-2026-69109Path Traversal: '.../...//' (CWE-35)Arbitrary file read7.5 (combined)

CVE-2026-69109 — Path Traversal / Arbitrary File Read. The traversal sequence .../...// is notable. This is a filter-evasion variant of classic directory traversal: naïve sanitizers strip or block ../ sequences, but nested or doubled patterns like .../...// collapse into valid parent-directory references after a single-pass filter runs. A vulnerable component of the license server accepts a file path (via a network-facing interface or local request) without canonicalizing it, allowing an attacker to escape the intended directory and read arbitrary files from the filesystem. On a Windows host running SLS as a privileged service, that means reading files as the service account — often SYSTEM.

CVE-2026-69108 — Incorrect Permission Assignment for Critical Resource. This class of flaw (CWE-732) means a critical resource — an installation directory, executable, configuration file, or service object — was deployed with overly permissive ACLs. When a privileged service loads or executes from a directory writable by lower-privileged users, any local attacker (or a remote attacker who has gained arbitrary file write / initial code execution) can replace or tamper with that resource and have it executed in the service's security context. That is the privilege escalation path.

Chained together, these are a classic one-two punch: the traversal bug provides information disclosure and potential credential theft from a remote or low-privilege position; the permission misassignment converts that foothold into elevated code execution.

Exploitation Status

As of publication, CISA and Siemens report these vulnerabilities through coordinated disclosure — there is no confirmed in-the-wild exploitation and the CVEs are not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. That is a window, not a comfort. License server components historically attract post-disclosure attention because they are internet-researchable, rarely patched, and consistently over-privileged. Assume exploit code will follow and treat "not yet exploited" as your remediation deadline.

Detection & Response

This is a technical ICS advisory, so detection engineering is mandatory. The observable behaviors we can hunt for, derived directly from the vulnerability classes:

  1. Path traversal strings (.../...//, ../, URL-encoded variants) appearing in requests or logs associated with SLS components.
  2. The SLS service process reading files outside its installation and license directories — the hallmark of successful arbitrary file read.
  3. Writes or replacements of executables/DLLs inside the SLS installation path by non-administrative accounts — the CVE-2026-69108 privilege escalation precondition.

Sigma Rules

YAML
---
title: Path Traversal Sequence Targeting Siemens License Server
id: 3f9c1a72-8b4d-4e5a-a6c1-2d7e9f0b1c34
status: experimental
description: Detects classic and filter-evasion path traversal sequences (including the '.../...//' variant referenced in CVE-2026-69109) in process command lines or web request logs associated with license server activity.
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-225-07
  - https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/08/12
tags:
  - attack.initial_access
  - attack.t1190
logsource:
  category: process_creation
  product: windows
detection:
  selection_traversal:
    CommandLine|contains:
      - '.../...//'
      - '..\\..\\'
      - '../../'
      - '%2e%2e'
      - '..%2f'
      - '%252e%252e'
  selection_context:
    CommandLine|contains:
      - 'SLS'
      - 'LicenseServer'
      - 'Siemens License'
      - 'licensing'
  condition: selection_traversal and selection_context
falsepositives:
  - Rare; legitimate administrative scripts referencing relative paths near license tooling
level: high
---
title: Siemens License Server Process Reading Files Outside Install Directory
id: 7c2e5b91-4d6f-4a3b-9c8e-1f0a2b3d4e56
status: experimental
description: Detects the Siemens License Server service process accessing sensitive files outside its installation and license data directories, consistent with exploitation of the arbitrary file read vulnerability (CVE-2026-69109).
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-225-07
  - https://attack.mitre.org/techniques/T1005/
author: Security Arsenal
date: 2026/08/12
tags:
  - attack.collection
  - attack.t1005
logsource:
  category: file_event
  product: windows
detection:
  selection_process:
    Image|contains:
      - 'Siemens\\SLS'
      - 'Siemens License Server'
      - 'Licsrv'
  selection_target:
    TargetFilename|contains:
      - '\\Windows\\System32\\config\\'
      - '\\Windows\\NTDS'
      - '\\Users\\'
      - '.ssh'
      - 'web.config'
      - '.pem'
      - '.key'
      - 'unattend.xml'
  condition: selection_process and selection_target
falsepositives:
  - Backup or inventory software impersonating service context; validate process lineage
level: high
---
title: Writable Binary or DLL Replacement in Siemens License Server Path
id: 9a4d6e13-2b7c-4f5a-8d9e-0c1b2a3d4f67
status: experimental
description: Detects creation or modification of executables and DLLs inside the Siemens License Server installation directory by accounts other than SYSTEM or Administrators, consistent with CVE-2026-69108 permission misassignment abuse for privilege escalation.
references:
  - https://www.cisa.gov/news-events/ics-advisories/icsa-26-225-07
  - https://attack.mitre.org/techniques/T1574/
author: Security Arsenal
date: 2026/08/12
tags:
  - attack.privilege_escalation
  - attack.persistence
  - attack.t1574
logsource:
  category: file_event
  product: windows
detection:
  selection_path:
    TargetFilename|contains:
      - '\\Siemens\\SLS\\'
      - '\\Siemens License Server\\'
      - '\\Program Files (x86)\\Siemens\\'
  selection_ext:
    TargetFilename|endswith:
      - '.exe'
      - '.dll'
      - '.bat'
      - '.ps1'
  filter_user:
    User|contains:
      - 'SYSTEM'
      - 'Administrator'
      - 'S-1-5-18'
  condition: selection_path and selection_ext and not filter_user
falsepositives:
  - Software deployment tools (SCCM/Intune) writing under a service account; baseline expected updater identities
level: high

KQL Hunt (Microsoft Sentinel / Defender)

The following hunts look for traversal strings in inbound requests to SLS hosts (via Syslog/CEF ingestion if you front the server with a proxy or WAF) and for file access anomalies from SLS processes via Defender for Endpoint telemetry:

KQL — Microsoft Sentinel / Defender
// Hunt 1: Path traversal attempts in requests/logs mentioning Siemens License Server
let TraversalPatterns = dynamic([".../...//", "../..", "..\\..", "%2e%2e", "..%2f", "%252e%252e"]);
union isfuzzy=true (CommonSecurityLog | project TimeGenerated, DeviceName, SourceIP, DestinationIP, Message),
(Syslog | project TimeGenerated, Computer, HostIP, Message)
| where TimeGenerated > ago(7d)
| where Message has_any (TraversalPatterns)
| where Message has_any ("SLS", "LicenseServer", "Siemens", "licens")
| project TimeGenerated, DeviceName, Computer, SourceIP, DestinationIP, Message
| order by TimeGenerated desc;

// Hunt 2: SLS-related processes accessing sensitive paths (arbitrary file read behavior)
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFolderPath has_any ("Siemens", "SLS", "License Server")
   or InitiatingProcessFileName has_any ("licsrv", "sls", "lmgrd")
| where FileName has_any ("SAM", "SECURITY", "NTDS.dit", "unattend.xml", "web.config")
   or FolderPath has_any ("\\config\\SAM", "\\.ssh\\", "\\NTDS\\")
   or FileName endswith ".pem" or FileName endswith ".key"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath, FileName, AccountName
| order by TimeGenerated desc;

// Hunt 3: Binary/DLL writes into Siemens install paths by non-system accounts (CVE-2026-69108 precondition)
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where ActionType in ("FileCreated", "FileModified")
| where FolderPath has_any ("\\Siemens\\SLS\\", "Siemens License Server")
| where FileName endswith ".exe" or FileName endswith ".dll"
| where AccountName !in~ ("system", "administrator") and AccountName !startswith "s-1-5-18"
| project TimeGenerated, DeviceName, FileName, FolderPath, AccountName, InitiatingProcessFileName, SHA256
| order by TimeGenerated desc;

Velociraptor VQL Hunt

For IR teams validating fleet exposure, this artifact enumerates SLS installations, checks the installed version against the fixed releases, and surfaces binaries with weak ACLs in the install path — the exact precondition CVE-2026-69108 describes:

VQL — Velociraptor
-- Siemens License Server: version discovery, process state, and weak-ACL binary audit
-- Deploy as a hunt across engineering/OT-adjacent Windows hosts

LET installs = SELECT FullPath, parse_pe(file=FullPath).FileVersion AS FileVersion
FROM glob(globs=[
  'C:/Program Files/Siemens/**/*.exe',
  'C:/Program Files (x86)/Siemens/**/*.exe',
  'C:/Siemens/**/*.exe'
])
WHERE FullPath =~ '(?i)(sls|licsrv|licens)'

SELECT * FROM installs

-- Running SLS processes and their service accounts
SELECT Pid, Name, Exe, CommandLine, Username
FROM pslist()
WHERE Exe =~ '(?i)siemens'
   OR Name =~ '(?i)(sls|licsrv|licens)'

-- Flag world-writable or user-writable executables in SLS install paths
SELECT FullPath, stat(file=FullPath).Mode.String AS Mode
FROM glob(globs=[
  'C:/Program Files/Siemens/**/*.exe',
  'C:/Program Files/Siemens/**/*.dll',
  'C:/Program Files (x86)/Siemens/**/*.exe'
])
WHERE Mode =~ 'w'

Pair the VQL output with a targeted ACL review (icacls) on every discovered SLS directory — any executable in a service path writable by BUILTIN\Users or Everyone is a live privilege escalation waiting for a trigger.

Remediation & Verification Script

Run this on suspected license server hosts to inventory the SLS installation, capture the running version, and audit ACLs on the install directory for the misassignment condition described in CVE-2026-69108. It is read-only by design — the actual fix is the vendor update.

PowerShell
# Siemens License Server (SLS) exposure audit - CVE-2026-69108 / CVE-2026-69109
# Run elevated on each candidate license server host. READ-ONLY audit.

$report = @()

# 1) Locate SLS installations
$paths = @(
  "$env:ProgramFiles\Siemens",
  "${env:ProgramFiles(x86)}\Siemens",
  "C:\Siemens"
) | Where-Object { Test-Path $_ }

foreach ($p in $paths) {
  Get-ChildItem -Path $p -Recurse -Include *.exe -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -match '(?i)(sls|licsrv|licens)' } |
    ForEach-Object {
      $report += [pscustomobject]@{
        Type    = 'Binary'
        Path    = $_.FullName
        Version = $_.VersionInfo.FileVersion
        Issue   = if ([version]($_.VersionInfo.FileVersion) -lt [version]'5.1') { 'VULNERABLE - below 5.1' } else { 'Verify against vendor fixed branch (5.1 / 5.3)' }
      }
    }
}

# 2) Check running SLS services and their logon accounts
Get-CimInstance Win32_Service |
  Where-Object { $_.PathName -match '(?i)siemens' -and $_.PathName -match '(?i)(sls|licens)' } |
  ForEach-Object {
    $report += [pscustomobject]@{
      Type    = 'Service'
      Path    = $_.PathName
      Version = ''
      Issue   = "Running as: $($_.StartName) — flag if LocalSystem/NetworkService (excessive privilege)"
    }
  }

# 3) ACL audit: find executables/DLLs writable by non-admin principals (CVE-2026-69108 pattern)
foreach ($p in $paths) {
  Get-ChildItem -Path $p -Recurse -Include *.exe,*.dll -ErrorAction SilentlyContinue | ForEach-Object {
    try {
      $acl = Get-Acl $_.FullName
      $weak = $acl.Access | Where-Object {
        $_.FileSystemRights -match 'Write|Modify|FullControl' -and
        $_.IdentityReference -match 'Users|Everyone|Authenticated Users' -and
        $_.AccessControlType -eq 'Allow'
      }
      if ($weak) {
        $report += [pscustomobject]@{
          Type    = 'WeakACL'
          Path    = $_.FullName
          Version = ''
          Issue   = ('Writable by: ' + (($weak.IdentityReference | Select-Object -Unique) -join ', '))
        }
      }
    } catch {}
  }
}

$report | Format-Table -AutoSize -Wrap
$report | Export-Csv -Path "$env:TEMP\SLS_Audit_$(Get-Date -Format yyyyMMdd).csv" -NoTypeInformation
Write-Host "`nAudit complete. Remediate by upgrading SLS per Siemens advisory (ICSA-26-225-07) and tightening flagged ACLs."

Remediation

  1. Upgrade SLS immediately. Siemens has released fixed versions of Siemens License Server and explicitly recommends updating to the latest release. Move all installations below the 5.1 branch to the fixed 5.1 line, and all installations below the 5.3 branch to the fixed 5.3 line. Obtain the update and installation instructions from the official Siemens ProductCERT advisory referenced in CISA ICSA-26-225-07: https://www.cisa.gov/news-events/ics-advisories/icsa-26-225-07

  2. Inventory first — SLS hides. The license server is frequently installed as a bundled dependency of Siemens engineering software and may exist on workstations, dedicated license hosts, and jump servers nobody documents as such. Sweep your asset inventory for Siemens installations before assuming you know your exposure.

  3. Fix the permission misassignment even after patching. Audit ACLs on the SLS installation directory and service binaries. No executable or DLL loaded by a privileged service should be writable by BUILTIN\Users, Everyone, or Authenticated Users. Rebaseline with icacls and enforce through Group Policy or your endpoint management plane.

  4. Run SLS with least privilege. Where operationally possible, reconfigure the SLS service to run under a dedicated low-privilege service account rather than SYSTEM/LocalSystem. This directly blunts the impact of both the arbitrary file read and any post-exploitation escalation.

  5. Segment and restrict network access. License servers should only be reachable from the hosts that actually check out licenses. Apply host firewall rules and network ACLs to restrict the SLS listening ports to authorized engineering subnets. SLS should never be reachable from general user VLANs, guest networks, or the internet.

  6. Deploy the detections above and retro-hunt. Because the traversal filter-evasion pattern (.../...//) is distinctive, run historical log reviews on any proxy, WAF, or application logs covering SLS hosts for the past 90 days. On hosts showing weak ACLs, treat them as potentially compromised and check for unauthorized binary replacements.

  7. Monitor CISA KEV. These CVEs are not in KEV today. If either is added, federal civilian agencies will receive a binding remediation deadline under BOD 22-01, and the exploitation clock for everyone else accelerates accordingly. Add ICSA-26-225-07 to your KEV watch process.

Do not let the "no known exploitation" status slow you down. A network-reachable arbitrary file read chained with a local privilege escalation on an unmonitored, over-privileged service is exactly the kind of quiet bug that ends up in an incident report six months later — usually during the ransomware post-mortem.

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.