Siemens has confirmed that customers using the Siemens Software Center — the distribution and update mechanism used to deliver Siemens industrial and engineering software — are being actively targeted by the Romulus multi-platform ClickFix campaign. The attackers are exploiting a DLL side-loading flaw in the Software Center to execute malicious payloads under the guise of a legitimate, signed Siemens process. Siemens has released an update and is urging all Software Center users to apply it immediately.
This is a serious convergence of two trends we've tracked closely across our IR engagements in 2025 and into 2026: the industrialization of ClickFix social engineering (fake CAPTCHA / "verify you're human" lures that trick users into pasting attacker-controlled commands) and the abuse of trusted, signed binaries as execution vehicles via DLL side-loading (MITRE ATT&CK T1574.002). For organizations running Siemens software — which includes an enormous footprint of engineering, manufacturing, and OT-adjacent environments — a compromise here isn't just an IT event. It's a potential bridge into engineering workstations and the operational technology environments they manage.
No CVE identifier has been published for this flaw at the time of writing, and Siemens has not publicly attributed a CVSS score. That does not lower the urgency: exploitation is confirmed in the wild as part of an active, multi-platform campaign.
Technical Analysis
What is affected
- Product: Siemens Software Center (the update/delivery client used across Siemens Digital Industries Software product lines)
- Platforms: Primarily Windows engineering workstations; the Romulus campaign is described as multi-platform, so defenders should not assume macOS or Linux engineering systems are out of scope
- Threat actor / campaign: Romulus ClickFix campaign
How the attack chain works
Based on Siemens' characterization of the activity and the known ClickFix tradecraft, the chain defenders should model is:
-
Lure delivery (ClickFix stage). The victim lands on a compromised or attacker-controlled page presenting a fake error, CAPTCHA, or "fix this issue" prompt. The page instructs the user to copy a command and paste it into the Run dialog (
Win+R), Terminal, or PowerShell. This is the signature ClickFix behavior — the user becomes the execution mechanism, bypassing most email and browser-based payload inspection (MITRE ATT&CK T1204, User Execution). -
Stager execution. The pasted command typically invokes
powershell.exe,mshta.exe, orcurl/iwrto pull down a second-stage payload and drop a malicious DLL alongside — or into the search path of — a trusted application. -
DLL side-loading via Siemens Software Center. The malicious DLL is placed where the legitimate, signed Siemens Software Center binary will load it (application directory, or a path resolved ahead of the legitimate DLL in the search order). When the Software Center next executes, the attacker's code runs inside the trusted process — inheriting its reputation, its allow-list status, and in many environments its network permissions.
-
Post-exploitation. From inside a signed process, the malware can establish C2, harvest credentials, and stage lateral movement with dramatically reduced detection surface. Application control solutions that trust the Siemens signer certificate will not intervene.
Why DLL side-loading in an update client is especially dangerous
- Signed parent process: EDR and application whitelisting frequently grant signed vendor binaries broad latitude. Malicious code executing inside
SoftwareCenter-related processes rides that trust. - Privileged context: Software distribution/update clients routinely run elevated. A side-loaded DLL may inherit SYSTEM or Administrator context.
- OT adjacency: Siemens Software Center lives on engineering workstations — machines with PLC programming software, historian access, and network paths into OT segments. Initial access here is a high-value pivot point for espionage and pre-positioning, consistent with what we've seen in supply-chain and ICS-targeting intrusions.
Exploitation status
- Confirmed active exploitation — Siemens attributes real-world activity to the Romulus ClickFix campaign
- CVE / CVSS: None published at time of writing; monitor the Siemens ProductCERT advisory feed for assignment
- CISA KEV: Not listed at time of writing — but given Siemens' footprint in critical manufacturing (a CISA-designated critical infrastructure sector), defenders should treat this with KEV-level urgency
Detection & Response
Hunt on two axes: (1) ClickFix user-execution behaviors (clipboard-driven command execution from Run dialog / explorer context) and (2) DLL side-loading artifacts in and around Siemens Software Center installation paths.
---
title: ClickFix Clipboard-Style Command Execution via Run Dialog
description: Detects suspicious commands launched through the Windows Run dialog (explorer.exe as parent spawning script interpreters or download cradles), consistent with ClickFix social engineering lures used in the Romulus campaign against Siemens Software Center users.
references:
- https://www.infosecurity-magazine.com/news/siemens-clickfix-exploiting-side/
- https://attack.mitre.org/techniques/T1204/
author: Security Arsenal
id: 3f8a2c91-7b4d-4e6a-9c1f-2d5e8a0b7c3d
status: experimental
date: 2026/04/06
tags:
- attack.execution
- attack.t1204
- attack.t1059.001
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith: '\explorer.exe'
selection_child:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\mshta.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\cmd.exe'
- '\curl.exe'
- '\rundll32.exe'
selection_cmd:
CommandLine|contains:
- 'http://'
- 'https://'
- 'iwr '
- 'irm '
- 'Invoke-Expression'
- 'IEX'
- 'DownloadString'
- 'mshta http'
- 'certutil'
- '-enc '
- '-e '
condition: selection_parent and selection_child and selection_cmd
falsepositives:
- Rare; legitimate software installs from the Run dialog with remote URLs are uncommon in enterprise environments
level: high
---
title: Suspicious DLL Written to Siemens Software Center Directory
description: Detects creation of DLL files in Siemens Software Center installation paths by processes other than the Siemens installer/updater, indicating potential DLL side-loading staging used by the Romulus campaign.
references:
- https://www.infosecurity-magazine.com/news/siemens-clickfix-exploiting-side/
- https://attack.mitre.org/techniques/T1574.002/
author: Security Arsenal
id: 9b1d4e62-5a3f-4c8d-b2e7-6f0a1c9d4e8b
status: experimental
date: 2026/04/06
tags:
- attack.persistence
- attack.defense_evasion
- attack.t1574.002
logsource:
category: file_event
product: windows
detection:
selection_path:
TargetFilename|contains:
- '\Siemens\SoftwareCenter\'
- '\Siemens\Siemens Software Center\'
- '\Program Files\Siemens\'
- '\Program Files (x86)\Siemens\'
selection_ext:
TargetFilename|endswith: '.dll'
filter_legit:
Image|contains:
- '\Siemens\'
- '\msiexec.exe'
- '\TiWorker.exe'
condition: selection_path and selection_ext and not filter_legit
falsepositives:
- Legitimate Siemens updates (filtered); third-party plugins installed by engineers
level: high
---
title: Siemens Software Center Process Loading Unsigned or Unsigned-Path Module
description: Detects Siemens Software Center executables loading DLLs from user-writable or anomalous locations (AppData, Temp, Public, user profile), a hallmark of DLL side-loading into a signed binary.
references:
- https://www.infosecurity-magazine.com/news/siemens-clickfix-exploiting-side/
- https://attack.mitre.org/techniques/T1574.002/
author: Security Arsenal
id: 4c7e9f13-2d8b-4a5e-8f6c-1b3d7a9e0c52
status: experimental
date: 2026/04/06
tags:
- attack.defense_evasion
- attack.t1574.002
logsource:
category: image_load
product: windows
detection:
selection_image:
Image|contains:
- '\Siemens\'
selection_dll:
ImageLoaded|contains:
- '\AppData\'
- '\Temp\'
- '\Public\'
- '\Users\'
- '\ProgramData\'
filter_siemens_signed:
Signed: 'true'
Signature|contains: 'Siemens'
condition: selection_image and selection_dll and not filter_siemens_signed
falsepositives:
- Developer/test builds of Siemens components; verify signer before escalating
level: high
// Hunt: ClickFix-style execution + Siemens Software Center DLL staging
// Part 1: User-driven execution consistent with ClickFix lures (Run dialog / explorer parent)
let ClickFix = DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName =~ "explorer.exe"
| where FileName in~ ("powershell.exe","pwsh.exe","mshta.exe","wscript.exe","cscript.exe","cmd.exe","curl.exe","rundll32.exe")
| where ProcessCommandLine has_any ("http://","https://","iwr","irm","IEX","Invoke-Expression","DownloadString","certutil","-enc")
| project ClickFixTime=TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, SHA256, ReportId;
// Part 2: DLL writes into Siemens Software Center paths by non-Siemens processes
let DllStaging = DeviceFileEvents
| where TimeGenerated > ago(14d)
| where FolderPath has "\\Siemens\\" and FileName endswith ".dll"
| where InitiatingProcessFolderPath !has "\\Siemens\\"
and InitiatingProcessFileName !in~ ("msiexec.exe","TiWorker.exe","TrustedInstaller.exe")
| project DllWriteTime=TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, FolderPath, SHA256;
// Correlate hosts showing both behaviors
ClickFix
| join kind=inner DllStaging on DeviceName
| project DeviceName, AccountName, ClickFixTime, ProcessCommandLine, DllWriteTime, DllPath=FolderPath, FileName, InitiatingProcessFileName
| order by DeviceName asc;
-- Hunt for unsigned/recently modified DLLs in Siemens Software Center paths
-- and suspicious child processes of Siemens executables (side-load execution)
SELECT * FROM foreach(
row={
SELECT FullPath, Mtime, Size
FROM glob(globs=[
'C:/Program Files/Siemens/**/*.dll',
'C:/Program Files (x86)/Siemens/**/*.dll',
'C:/ProgramData/Siemens/**/*.dll'
])
WHERE Mtime > now() - 1209600 -- modified in last 14 days
},
query={
SELECT FullPath AS RecentDll, Mtime AS Modified,
Pid, Name AS ProcessName, Exe, CommandLine, Username
FROM pslist()
WHERE Exe =~ '(?i)Siemens'
OR CommandLine =~ '(?i)Siemens.*SoftwareCenter'
})
# Siemens Software Center DLL Side-Loading — Verification & Hardening Script
# Run elevated on engineering workstations. Reviews Siemens install paths for
# unsigned or recently modified DLLs and checks ClickFix execution artifacts.
$ErrorActionPreference = 'SilentlyContinue'
$lookback = (Get-Date).AddDays(-14)
$siemensPaths = @(
"$env:ProgramFiles\Siemens",
"${env:ProgramFiles(x86)}\Siemens",
"$env:ProgramData\Siemens"
) | Where-Object { Test-Path $_ }
if (-not $siemensPaths) {
Write-Host "[+] No Siemens installation directories found on this host." -ForegroundColor Green
} else {
Write-Host "[*] Scanning Siemens paths for unsigned or recently modified DLLs..." -ForegroundColor Cyan
$suspicious = foreach ($path in $siemensPaths) {
Get-ChildItem -Path $path -Recurse -Filter *.dll | ForEach-Object {
$sig = Get-AuthenticodeSignature $_.FullName
$isSiemensSigned = ($sig.Status -eq 'Valid') -and ($sig.SignerCertificate.Subject -match 'Siemens')
if (-not $isSiemensSigned -or $_.LastWriteTime -gt $lookback) {
[PSCustomObject]@{
Path = $_.FullName
LastWriteTime = $_.LastWriteTime
SigStatus = $sig.Status
Signer = $sig.SignerCertificate.Subject
}
}
}
}
if ($suspicious) {
Write-Host "[!] SUSPICIOUS DLLs found — investigate immediately:" -ForegroundColor Red
$suspicious | Format-Table -AutoSize
$suspicious | Export-Csv "$env:TEMP\siemens_suspicious_dlls.csv" -NoTypeInformation
} else {
Write-Host "[+] All Siemens DLLs are validly signed by Siemens and unmodified in last 14 days." -ForegroundColor Green
}
}
# Check for ClickFix-style execution: Run dialog (RunMRU) containing URLs or script interpreters
Write-Host "[*] Checking Run dialog history (RunMRU) for ClickFix indicators..." -ForegroundColor Cyan
Get-ChildItem 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU' |
ForEach-Object {
$_.Property | ForEach-Object {
$val = (Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU' -Name $_).$_
if ($val -match 'http|iwr|irm|mshta|powershell|certutil|iex') {
Write-Host "[!] ClickFix indicator in RunMRU: $val" -ForegroundColor Red
}
}
}
# Confirm installed Siemens Software Center version against the patched release
Write-Host "[*] Installed Siemens Software Center version(s):" -ForegroundColor Cyan
Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' |
Where-Object { $_.DisplayName -match 'Siemens Software Center' } |
Select-Object DisplayName, DisplayVersion, InstallDate | Format-Table -AutoSize
Write-Host "[!] Verify DisplayVersion against the fixed version in the Siemens ProductCERT advisory." -ForegroundColor Yellow
Remediation
-
Apply the Siemens Software Center update immediately. Siemens has released a fix and is explicitly urging customers to update. Pull the patched version only through Siemens' official update channel or the Siemens ProductCERT portal — never from third-party mirrors. Review the advisory at Siemens ProductCERT (https://www.siemens.com/global/en/products/services/cert.html) and confirm the exact fixed version string for your product line before validating deployment.
-
Verify integrity before and after patching. Run the verification script above across your engineering workstation fleet. Any DLL in a Siemens install path that is unsigned, signed by a non-Siemens entity, or modified outside a maintenance window should be treated as a side-load staging artifact and triaged as an incident, not a ticket.
-
Hunt retroactively. Run the KQL correlation query over at least the last 30 days (extend further if the campaign predates disclosure in your telemetry). Prioritize hosts showing both ClickFix-style user execution and DLL writes into Siemens paths — that intersection is your highest-fidelity compromise signal.
-
Disrupt ClickFix at the human layer. The ClickFix technique only works if a user pastes the command. Push an immediate advisory to engineers: no legitimate website, CAPTCHA, or "fix it" prompt will ever ask you to paste a command into Run, Terminal, or PowerShell. Consider GPO/MDM controls to disable the Run dialog for standard users (
NoRunpolicy) on engineering workstations where operationally feasible. -
Constrain interpreter abuse. Enforce PowerShell Constrained Language Mode via WDAC/AppLocker for non-admin users, block
mshta.exefrom making network connections via Windows Defender Firewall or ASR rules, and enable Attack Surface Reduction rule "Block executable content from email client and webmail" plus "Block Office communication applications from creating child processes" equivalents for browsers. -
Segment engineering workstations from OT. This incident class is precisely why IEC 62443 / NIST CSF segmentation guidance exists. Validate that Siemens engineering stations cannot directly reach PLCs, historians, or OT management planes without brokered, monitored access. If a side-loaded implant lands on one of these machines, segmentation is what prevents an IT incident from becoming an OT incident.
-
Monitor for KEV inclusion and CVE assignment. Given Siemens' critical manufacturing footprint, a CVE and CISA KEV entry are plausible follow-ons. Subscribe to Siemens ProductCERT and CISA KEV feeds and treat assignment as a forcing function for any systems not yet patched.
If you find evidence of side-loaded DLLs executing within Siemens Software Center processes, treat it as confirmed initial access: isolate the host, acquire memory and disk before reimaging, and review authentication and network egress from that machine — particularly toward OT assets.
Related Resources
Security Arsenal Managed SOC Services AlertMonitor Platform Book a SOC Assessment soc-mdr Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.