Siemens Software Center CVE-2026-110936 (Romulus ClickFix DLL side-loading)

DLL side-loading of a genuine signed Siemens Software Center 3.5.8.7 delivered as AllMyBasic.msi through ClickFix lures. Source: Siemens ProductCERT, with CISA KEV and independent press coverage.
Threat
CVE-2026-110936, Romulus ClickFix campaign
Severity
EXPLOITED ITW
Type
CVE / signed-binary DLL side-load
CVSS
8.4 (v4.0), CWE-427
Fixed in
Siemens Software Center 4.0.9.8
Version
v0.1 (Draft) · 2026-10-21
Author
HuntPack
Confidence
High on exploitation, medium on IOCs (single upstream)
01

Executive Summary

On 2026-10-19 Siemens ProductCERT confirmed active exploitation of CVE-2026-110936, a DLL side-loading flaw (CWE-427, uncontrolled search path element, CVSS v4.0 8.4) in Siemens Software Center. Attackers did not tamper with Siemens software. They bundled a genuine, validly signed Siemens Software Center 3.5.8.7 with their own DLLs in the same folder, distributed it outside official Siemens channels as AllMyBasic.msi through ClickFix lures, and let the vulnerable program load the attacker files when it started. Siemens attributes the activity to the Romulus multi-platform ClickFix campaign. CISA added the flaw to the KEV catalog on 2026-10-20 with a federal due date of 2026-11-03. All versions before 4.0.9.8 are affected.

The highest-value defensive angle is behaviour, not reputation. The Siemens executable is genuine and signed, so a hash or signature block on it would be both useless against the attacker and harmful to real users. Siemens itself says to detect on folder and behaviour: SiemensSoftwareCenter.exe running from AppData\Local\Programs after an msiexec launch (Q1), the SM Software Provisioning Service folder (Q4), a start-up entry or task for a product the host never had (Q6, Q7), and the three Siemens-published network indicators (Q8, Q9).

Defender priority: patching to 4.0.9.8 stops new side-loads but does not clean a host that already ran the bundle. Hunt the retention window for Q1, Q3, Q4 and Q8, treat any hit as a hands-on-keyboard-capable foothold running under a trusted signed process, and reset the user's credentials after isolation, as Siemens directs.
02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forwardSnapshot
1Siemens ProductCERT blog: Active Exploitation of CVE-2026-110936 (2026-10-19)Primary source. Confirms exploitation, Romulus attribution, the IP/domain table, both SHA-256 hashes, warning signs and detection guidanceYes01-siemens-productcert-blog.txt
1Siemens Security Advisory SSA-580366 (2026-10-15, V1.2)CWE-427, CVSS v3.1 6.7 and v4.0 8.4, affected range below V4.0.9.8, remediation, reporter creditYes02-siemens-ssa-580366.txt
1CISA Known Exploited Vulnerabilities Catalog entryDate added 2026-10-20, due date 2026-11-03, uncontrolled search path element wordingYes03-cisa-kev-catalog.txt
2SecurityOnline (2026-10-20)Restates Siemens guidance and IOCs. Says CISA had not yet added the CVE; the CISA entry supersedes thatPartial04-securityonline.txt
2The Hacker News: CISA orders federal agencies to patch (2026-10-21)KEV addition, ClickFix attacks using a platform called RomulusYes (KEV context)05-thn-cisa-kev.txt
2Infosecurity Magazine (2026-10-20)Describes Romulus as a server hosting panel identified by Forescout on 2026-10-14; lists warning signsYes06-infosecurity-magazine.txt
2heise online (2026-10-21)Names AllMyBasic.msi and Siemens Software Center 3.5.8.7; independent confirmation of the delivery fileYes07-heise.txt
2SOC Prime analysis (2026-10-20)Names archive.dll as a malicious component and the msiexec to AllMyBasic.msi to SiemensSoftwareCenter.exe chainYes (partial)08-socprime.txt

Decisions and discrepancies

  • Single upstream for every indicator. The IPs, the domain and both hashes originate in the Siemens ProductCERT blog. SecurityOnline, Infosecurity Magazine and SOC Prime republish them; heise and The Hacker News point to Siemens. Counting those outlets as independent sources would be wrong, so every atomic indicator ships at detect, none at prevent.
  • Disqualified source. The SC Media article returned HTTP 403 to every fetch, so no text could be snapshotted. It is not cited and nothing in this pack depends on it.
  • Malicious DLL names. Only archive.dll is named, and only its hash is published. Siemens and SOC Prime imply other attacker DLLs but name none. No further DLL name or hash is invented; Section 10 carries a labelled REPLACE_WITH placeholder.
  • CVSS. SSA-580366 scores 6.7 on CVSS v3.1 and 8.4 on CVSS v4.0. This pack uses 8.4, the figure the reporting and CISA coverage use.
  • Romulus scope. Romulus is a multi-platform ClickFix delivery panel that serves several payloads. This pack carries only the indicators Siemens ties to the Siemens Software Center bundle and takes nothing from other Romulus or ClickFix reporting.
03

Hunt Brief & Attack Chain

Hunt hypotheses

#HypothesisMITRETelemetryConfidenceQueries
H1A host ran the genuine Siemens binary from a per-user AppData path right after msiexec, loading attacker DLLs from its own folderT1574.002, T1218.007Process creation with parent and image path (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)HighQ1, Q2
H2A host installed the out-of-channel bundle AllMyBasic.msi or executed from the provisioning folderT1204.002, T1218.007Process creation with command line and image pathHighQ3, Q4
H3Attacker DLLs were written beside the carrierT1574.002, T1105Executable write events (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)MediumQ5, Q10
H4The bundle set persistence for a product the host never hadT1547.001, T1053.005Auto-start registry and scheduled task registration (CrowdStrike: AsepValueUpdate, ScheduledTaskRegistered. SentinelOne: Registry Value Modified, Task Register. Defender: DeviceRegistryEvents, DeviceEvents)MediumQ6, Q7
H5The carrier or the host talked to Siemens-published infrastructureT1071.001, T1071.004, T1105Outbound connection and DNS request with requesting process (CrowdStrike: NetworkConnectIP4, DnsRequest. SentinelOne: IP Connect, DNS Resolved. Defender: DeviceNetworkEvents)HighQ8, Q9, Q11
H6The side-loaded code spawned interpreters under the trusted signed parentT1059Process creation with parentLow (hypothesis)Q12

Attack chain

StepBehaviourTelemetryHunt angle
1Victim meets a ClickFix web lure and is told to run a commandBrowser and Run-dialog activity (outside endpoint telemetry for the web page itself)Known gap. Siemens guidance: never paste web commands into Win+R or PowerShell
2msiexec launches the bundle AllMyBasic.msi, distributed outside official Siemens channelsProcess creation with command lineQ3, then Q1 for the msiexec parent
3The package places a genuine signed Siemens Software Center 3.5.8.7 and attacker DLLs together, creating SM Software Provisioning Service, activate.bak, statinfosta.DB and FTSuite\ftc.umlExecutable writes, process creation with image pathQ4, Q5, Q10
4SiemensSoftwareCenter.exe starts from AppData\Local\Programs and loads the attacker DLLs from its own folder (CVE-2026-110936)Process creation; image-load telemetry is a native huntQ1, Q2
5Persistence as a start-up entry or scheduled task named Siemens Software CenterAuto-start registry, scheduled task registrationQ6, Q7
6Contact with payload hosting and C2 at 96.62.218.59 and wizardexpensive.comOutbound connection, DNSQ8, Q9, Q11
7Post-exploitation under the trusted signed processProcess creation with parentQ12 (hypothesis; no child process is named in the reporting)
04

Consolidated IOC Table

TypeValueConfidenceActionContext
sha256f4d7c5321bb0d1bda439304a753bcf9b467b98ca53c7e9493b9c2c3451092e4aMedium (single upstream)detectAllMyBasic.msi, the malware bundle. Source: Siemens ProductCERT
sha2563fdcc7d7d049a89711fb31fb236940a1c5a09d899143ffd20c3c41fb1f2cf491Medium (single upstream)detectarchive.dll, malicious DLL. Source: Siemens ProductCERT
ipv496.62.218.59Medium (single upstream)detectActive when published. Payload hosting and C2
domainwizardexpensive.comMedium (single upstream)detectActive when published. Payload hosting and C2
ipv42.27.248.127Medium (single upstream)detectInactive. Distribution channel of AllMyBasic.msi. Useful retrospectively
filenameAllMyBasic.msiMediumhuntOut-of-channel bundle name (Q3). Renameable
filenamearchive.dllMediumhuntGeneric name; pivot only (Q5)
filenameactivate.bak, statinfosta.DBMediumhuntFound beside SiemensSoftwareCenter.exe. Not covered by file-write telemetry; native filesystem sweep (PB1)
pathAppData\Local\Programs\SM Software Provisioning ServiceMediumhuntFolder the malware creates (Q4)
pathAppData\Local\FTSuite\ftc.umlMediumhuntWarning sign named by Siemens (PB1)
behaviourSiemensSoftwareCenter.exe from AppData\Local\Programs after msiexecHighhuntThe observed execution pattern (Q1)

The signed SiemensSoftwareCenter.exe and its hash are intentionally absent. It is a genuine Siemens binary; matching or blocking it produces false positives and does not stop the attack.

05

Affected Surface & Telemetry Matrix

SurfaceTelemetry (plain terms, then platforms)PriorityGap
Windows endpoints where users can run msiexec and install per-user softwareProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)HighNone for the launch pattern
Per-user AppData\Local\Programs foldersExecutable writes (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)HighNon-PE artefacts (activate.bak, statinfosta.DB, ftc.uml) are outside endpoint telemetry; use the filesystem sweep
DLL load by the signed carrierImage-load events (CrowdStrike: image-load events vary by sensor; SentinelOne: Module Load. Defender: DeviceImageLoadEvents)HighNot queried in CQL here; run the native image-load hunts in Section 7 where collected
PersistenceAuto-start registry and scheduled task registration (CrowdStrike: AsepValueUpdate, ScheduledTaskRegistered. SentinelOne: Registry Value Modified, Task Register. Defender: DeviceRegistryEvents, DeviceEvents)MediumStart-up folder shortcuts are not covered
Egress and DNSOutbound connections and DNS with requesting process (CrowdStrike: NetworkConnectIP4, DnsRequest. SentinelOne: IP Connect, DNS Resolved. Defender: DeviceNetworkEvents)HighBrowser-side ClickFix page and clipboard are outside endpoint telemetry
Software distributionSoftware inventory and package-source logsMediumOutside endpoint telemetry: where the MSI came from
06

ATT&CK Mapping

TacticTechniqueObserved behaviourQuery or control
Initial Access / ExecutionT1204.004 User Execution: Malicious Copy and PasteClickFix lure instructs the victim to run a commandTraining, restrict Run (Section 12); Q3 for the result
ExecutionT1204.002 User Execution: Malicious FileOut-of-channel AllMyBasic.msiQ3, Q10
Defense EvasionT1218.007 System Binary Proxy Execution: Msiexecmsiexec launches the bundle and the carrierQ1, Q3
Persistence / Defense EvasionT1574.002 Hijack Execution Flow: DLL Side-LoadingGenuine signed Siemens binary loads attacker DLLs from its own folder (CVE-2026-110936, CWE-427)Q1, Q2, Q4, Q5
PersistenceT1547.001 Registry Run Keys / Start-up FolderStart-up entry named Siemens Software CenterQ7
PersistenceT1053.005 Scheduled TaskTask named Siemens Software CenterQ6
Command and ControlT1071.001 / T1071.004 Application Layer ProtocolContact with 96.62.218.59 and wizardexpensive.comQ8, Q9, Q11
Command and ControlT1105 Ingress Tool TransferPayload hosting at the same infrastructureQ8, Q9
ExecutionT1059 Command and Scripting InterpreterHypothesis: interpreters under the carrierQ12
07

Native Audit-Log Hunts

#SourceHunt
N1Sysmon Event ID 7 (Image loaded)Image = SiemensSoftwareCenter.exe from a path containing AppData\Local\Programs and ImageLoaded in the same folder with Signed = false or a DLL name such as archive.dll. This is the direct side-load signal
N2Sysmon Event ID 1 (Process create)ParentImage ends msiexec.exe and Image ends SiemensSoftwareCenter.exe, mirroring Q1
N3Sysmon Event ID 11 (File create)TargetFilename ending activate.bak, statinfosta.DB, or ftc.uml under FTSuite, which endpoint executable-write telemetry does not cover
N4Windows Application log, source MsiInstaller (11707 or 11708)Product name or package for AllMyBasic on hosts with no Siemens software in your inventory
N5Task Scheduler Operational log (106) and Security 4698Task named Siemens Software Center registered by a standard user
N6Proxy, DNS and firewall logsAny request to wizardexpensive.com, 96.62.218.59 or 2.27.248.127 over the full retention; downloads of an MSI from a non-Siemens host
N7Defender XDR DeviceImageLoadEvents (where licensed)InitiatingProcessFileName = SiemensSoftwareCenter.exe with FolderPath under AppData\Local\Programs and a non-Siemens signer
N8Software inventory (RMM, Intune, SCCM)Installed Siemens Software Center versions below 4.0.9.8, and installs on hosts with no business need
08

Hunt Queries: CrowdStrike CQL, SentinelOne PowerQuery and Defender XDR KQL

Show all queries in
Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Signed Siemens Software Center started by msiexec from AppData\Local\Programs
CONF HIGHFP MEDIUMCOST LOW

Looks for: SiemensSoftwareCenter.exe running from a per-user AppData\Local\Programs path with msiexec as its parent: the observed execution pattern of the Romulus side-load bundle (T1574.002, T1218.007). FP: A sanctioned per-user install launched once by msiexec at install time looks identical. Confirm the file version: 3.5.8.7 is the abused build, 4.0.9.8 or later is fixed.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery assumes: Image paths are reported with backslash separators on Windows endpoints.
  • PowerQuery assumes: in:anycase and contains are case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process.
// HUNT: Siemens Software Center launched by msiexec from AppData\Local\Programs (CVE-2026-110936 carrier)
// MITRE: T1574.002, T1218.007, T1204.002
// CONF: high  FP: medium  COST: low | REQUIRES: process creation with parent and image path
// TUNING: exclude ComputerName values of a sanctioned per-user rollout and the packaging UserName; confirm FileVersion is 4.0.9.8 or later before closing a hit.
// NOTE: the binary is genuine and signed. Never hash-match or block it; the signal is the path plus the msiexec parent.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^SiemensSoftwareCenter(\.exe)?$/i
| ImageFileName=/\\AppData\\Local\\Programs\\/i
| ParentBaseFileName=/^msiexec(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData, aid])
Q2 · Siemens Software Center running from AppData\Local\Programs, any parent (baseline)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Every host where the genuine Siemens binary runs from a per-user AppData path regardless of parent. Use it to baseline legitimate per-user installs and to catch relaunches after the first msiexec start (for example from the start-up entry). FP: Legitimate per-user installs and the auto-updater also run from AppData. Rank by rare ParentBaseFileName and by hosts that never had Siemens software provisioned.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A launch with no hash populated still groups, with an empty hash column.
  • PowerQuery assumes: The hash is a group key instead of a collected list, so one row per distinct hash.
  • PowerQuery assumes: in:anycase and contains are case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: SHA256 is not collected because it is often unpopulated; the set holds SHA1 values.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process.
// HUNT: Siemens Software Center per-user path baseline (any parent)
// MITRE: T1574.002
// CONF: medium  FP: medium  COST: low | REQUIRES: process creation with parent and image path
// TUNING: drop ParentBaseFileName values you see on sanctioned installs (for example your software-deployment agent); keep rows whose host never had Siemens software provisioned.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^SiemensSoftwareCenter(\.exe)?$/i
| ImageFileName=/\\AppData\\Local\\Programs\\/i
| groupBy([ComputerName, UserName, ParentBaseFileName, ImageFileName], function=[count(as=Launches), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen), collect([SHA256HashData])], limit=1000)
| sort(Launches, order=desc, limit=200)
Q3 · msiexec installing AllMyBasic.msi
CONF HIGHFP LOWCOST LOW

Looks for: msiexec.exe whose command line names AllMyBasic.msi, the bundle Siemens reports was distributed outside official channels. A renamed package will not match; pair with Q1 and Q4.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: An MSI renamed before execution is not matched.
  • PowerQuery assumes: contains is case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: An MSI renamed before execution is not matched.
  • KQL – Defender XDR assumes: ProcessCommandLine carries the full msiexec argument string.
// HUNT: msiexec running AllMyBasic.msi (out-of-channel Romulus bundle)
// MITRE: T1218.007, T1204.002
// CONF: high  FP: low  COST: low | REQUIRES: process creation with command line
// NOTE: filename-only signal, so an attacker who renames the MSI evades it. Q1 and Q4 do not depend on the MSI name.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^msiexec(\.exe)?$/i
| CommandLine=/AllMyBasic\.msi/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData, aid])
Q4 · Execution from the SM Software Provisioning Service folder
CONF HIGHFP LOWCOST LOW

Looks for: A process image under a folder named SM Software Provisioning Service, which Siemens says the malware creates inside AppData\Local\Programs.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A payload moved out of the folder before it runs is not matched.
  • PowerQuery assumes: Image paths are reported with backslash separators on Windows endpoints.
  • PowerQuery assumes: contains is case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: A payload moved out of the folder before it runs is not matched.
  • KQL – Defender XDR assumes: FolderPath holds the folder of the created process, so the folder name appears inside it.
// HUNT: process running from SM Software Provisioning Service folder
// MITRE: T1574.002, T1036.005
// CONF: high  FP: low  COST: low | REQUIRES: process creation with image path
// NOTE: folder name taken from the Siemens ProductCERT warning signs; the legitimate product does not create it.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ImageFileName=/\\SM Software Provisioning Service\\/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData, aid])
Q5 · archive.dll written under AppData\Local
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: A PE write named archive.dll under a user AppData\Local path. Siemens names archive.dll as a malicious file in this campaign; the name is generic, so this is a pivot and not proof. FP: archive.dll is a common library name for unrelated per-user applications. Check the writer (ContextBaseFileName) and compare SHA256HashData with Q10.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analyticProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The PE-content verdict of the CQL is not available, so non-PE files named archive.dll also match.
  • PowerQuery assumes: File Creation and File Modification stand in for the executable-write events; no PE-content check is applied.
  • PowerQuery assumes: On a file event the acting process is src.process.*.
  • PowerQuery assumes: File paths are reported with backslash separators on Windows endpoints.
  • KQL – Defender XDR: The PE-content verdict of the CQL is not available, so non-PE files named archive.dll also match.
  • KQL – Defender XDR assumes: FileCreated and FileModified stand in for the executable-write events; no PE-content check is applied.
  • KQL – Defender XDR assumes: FolderPath holds the folder of the written file.
// HUNT: archive.dll PE write under AppData\Local
// MITRE: T1574.002, T1105
// CONF: medium  FP: medium  COST: low | REQUIRES: executable write telemetry
// TUNING: exclude writers and folders of applications you own that legitimately ship archive.dll; keep hits written by msiexec or next to SiemensSoftwareCenter.exe.
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| FileName=/^archive\.dll$/i
| TargetFileName=/\\AppData\\Local\\/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData, aid])
Q6 · Scheduled task registered for Siemens Software Center or the provisioning folder
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: A scheduled task whose name contains Siemens Software Center, SiemensSoftwareCenter or SM Software Provisioning. Matching on the task name keeps the query to fields in the Falcon reference; a task with an unrelated name needs the task action path from native logs (Section 7, N5). Siemens lists a task or start-up entry on a PC that never had the product as a warning sign. FP: A managed install may register a task of its own. Expect a few hits on sanctioned installs; the signal is a task on a host that never had the product.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analytic, equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Tasks registered through the Task Scheduler API, COM or an imported XML file without the task name on a command line are not seen.
  • PowerQuery assumes: A task created through the schtasks command line carries its name in the command line.
  • PowerQuery assumes: contains is case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: If the tenant does not record ScheduledTaskCreated, the query returns nothing; the readiness test shows which keys are populated.
  • KQL – Defender XDR assumes: ScheduledTaskCreated is recorded on the tenant and carries the task name under the TaskName key of AdditionalFields.
  • KQL – Defender XDR assumes: contains is case-insensitive, which reproduces the CQL case-insensitive intent.
// HUNT: scheduled task for Siemens Software Center on hosts that never had it
// MITRE: T1053.005
// CONF: medium  FP: medium  COST: low | REQUIRES: scheduled task registration events
// TUNING: exclude hosts in your sanctioned Siemens software group and tasks you can tie to a managed install; keep tasks on hosts with no Siemens software.
#event_simpleName=ScheduledTaskRegistered
| TaskName=/Siemens Software Center|SiemensSoftwareCenter|SM Software Provisioning/i
| table([@timestamp, ComputerName, UserName, TaskName, aid])
Q7 · Run-key start-up entry for Siemens Software Center under a user profile
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: An auto-start registry value named Siemens Software Center, or one pointing at the carrier or the provisioning folder under AppData\Local\Programs. FP: A legitimate per-user install may set its own start-up entry. Require a host with no sanctioned Siemens software.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The CQL's ordering of path before carrier name is relaxed, which can only widen the match.
  • PowerQuery assumes: Registry Value Modified covers Run-key writes the CQL sees as auto-start updates.
  • PowerQuery assumes: The path and carrier name are matched as two substrings without order.
  • PowerQuery assumes: Key paths are reported with backslash separators.
  • KQL – Defender XDR: Values written through a path the sensor does not log as RegistryValueSet are not captured.
  • KQL – Defender XDR assumes: RegistryValueSet covers the Run-key writes the CQL sees as auto-start updates.
  • KQL – Defender XDR assumes: RegistryKey holds the full key path including the CurrentVersion\Run segment.
// HUNT: Run-key persistence for the Siemens carrier
// MITRE: T1547.001
// CONF: medium  FP: medium  COST: low | REQUIRES: auto-start registry telemetry
// TUNING: exclude hosts in your sanctioned Siemens software group; keep values that point at AppData.
#event_simpleName=AsepValueUpdate
| RegObjectName=/\\CurrentVersion\\Run/i
| RegValueName=/Siemens Software Center/i or RegStringValue=/AppData\\Local\\Programs\\.*SiemensSoftwareCenter\.exe|SM Software Provisioning Service/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, aid])
Q8 · Connections to the Siemens-published campaign IP addresses
CONF HIGHFP LOWCOST LOW

Looks for: Any outbound IPv4 connection to 96.62.218.59 (active, payload hosting and C2) or 2.27.248.127 (inactive distribution channel). Siemens asks defenders to search logs for both, because hosts that downloaded before takedown may still be infected.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Connections made through a proxy show the proxy address, not the campaign address.
  • PowerQuery assumes: IP Connect events carry the remote address in dst.ip.address for outbound connections.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days, so older historic hits are visible only on the CQL tab.
  • KQL – Defender XDR: Connections made through a proxy show the proxy address, not the campaign address.
  • KQL – Defender XDR assumes: RemoteIP holds the destination address of outbound connections.
// HUNT: connections to Siemens-published Romulus bundle IPs
// MITRE: T1071.001, T1105
// CONF: high  FP: low  COST: low | REQUIRES: outbound IPv4 connection telemetry
// NOTE: single upstream (Siemens ProductCERT). Run over the longest retention; the distribution IP is inactive so only historic hits matter.
#event_simpleName=NetworkConnectIP4
| in(field=RemoteAddressIP4, values=["96.62.218.59", "2.27.248.127"])
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, aid])
Q9 · DNS lookups for wizardexpensive.com
CONF HIGHFP LOWCOST LOW

Looks for: DNS requests for the Siemens-published payload hosting and C2 domain, including subdomains.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: If the tenant populates dns.request instead, the query returns nothing until the field is swapped.
  • PowerQuery assumes: The request name is held in event.dns.request on this tenant; the vendor docs name dns.request, so the readiness test prints both.
  • PowerQuery assumes: matches is case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days, so older hits are visible only on the CQL tab.
  • KQL – Defender XDR assumes: The tenant records DnsQueryResponse and keeps the name under DnsQueryString or QueryName in AdditionalFields.
// HUNT: DNS requests for the Siemens-published Romulus domain
// MITRE: T1071.004, T1105
// CONF: high  FP: low  COST: low | REQUIRES: DNS request telemetry with requesting process
// NOTE: single upstream (Siemens ProductCERT).
#event_simpleName=DnsRequest
| DomainName=/(^|\.)wizardexpensive\.com$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, DomainName, aid])
Q10 · Siemens-published SHA-256 hashes (AllMyBasic.msi, archive.dll)
CONF HIGHFP LOWCOST LOW

Looks for: Exact SHA-256 matches for the two hashes in the Siemens ProductCERT table. The MSI is not a PE file, so a sensor may never hash it; the DLL hash is the more reliable half. Never hash-match the Siemens executable itself.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptions, telemetry-gapProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Hosts or event types where the agent does not compute SHA-256 return nothing.
  • PowerQuery assumes: SHA-256 is populated on the tenant for process images and written files.
  • KQL – Defender XDR: A process started from a file with one of these hashes is not matched, because the process-start table is not read.
  • KQL – Defender XDR: SHA256 is often unpopulated, so a clean result is weaker than the CQL tab's.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; older hits are visible only on the CQL tab.
  • KQL – Defender XDR assumes: SHA256 is populated on file events for the tenant.
// HUNT: Siemens-published campaign file hashes
// MITRE: T1574.002, T1204.002
// CONF: high  FP: low  COST: low | REQUIRES: file hash on process and executable-write events
// NOTE: single upstream (Siemens ProductCERT). Detect only. The genuine SiemensSoftwareCenter.exe hash is deliberately absent.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(field=SHA256HashData, values=["f4d7c5321bb0d1bda439304a753bcf9b467b98ca53c7e9493b9c2c3451092e4a", "3fdcc7d7d049a89711fb31fb236940a1c5a09d899143ffd20c3c41fb1f2cf491"])
| table([@timestamp, #event_simpleName, ComputerName, UserName, FileName, TargetFileName, ImageFileName, SHA256HashData, aid])
Q11 · Network egress from SiemensSoftwareCenter.exe to non-private destinations
CONF LOWFP HIGHCOST MEDIUM

Looks for: Rare external destinations contacted by the Siemens carrier process. The real product talks to Siemens services, so this ranks destinations by how few hosts reach them instead of alerting on any one. FP: The legitimate updater and download features connect to Siemens infrastructure on every host. Baseline first; investigate destinations reached by one or two hosts only.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Only a single sample host is listed per destination.
  • PowerQuery assumes: The distinct-host count is an estimate (estimate_distinct).
  • PowerQuery assumes: Only one sample host name is shown per destination instead of the full list.
  • KQL – Defender XDR: Host names are capped at 20 per destination.
  • KQL – Defender XDR assumes: InitiatingProcessFileName holds the connecting process name.
// HUNT: rare external destinations of the Siemens carrier process
// MITRE: T1071.001
// CONF: low  FP: high  COST: medium | REQUIRES: outbound IPv4 connection telemetry with process name
// TUNING: build an allowlist of Siemens destinations from 30 days of clean hosts and subtract it; escalate any destination with Hosts=1 that is not on it.
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^SiemensSoftwareCenter(\.exe)?$/i
| !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8", "169.254.0.0/16"])
| groupBy([RemoteAddressIP4, RemotePort], function=[count(as=Conns), count(aid, distinct=true, as=Hosts), collect([ComputerName])], limit=500)
| sort(Hosts, order=asc, limit=100)
Q12 · Script or shell interpreters spawned by SiemensSoftwareCenter.exe
CONF LOWFP MEDIUMCOST LOW

Looks for: Command or script interpreters, rundll32 or regsvr32 whose parent is the Siemens carrier. A hypothesis-level post-exploitation signal: the report does not name child processes. FP: The legitimate product launches its own installers. Only the interpreters listed here are matched, so benign installer children do not fire; a Siemens setup wrapper that calls cmd.exe is the expected exception.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Interpreters launched by a child of the carrier rather than the carrier itself are not matched.
  • PowerQuery assumes: in:anycase is case-insensitive, which reproduces the CQL case-insensitive intent.
  • KQL – Defender XDR: Interpreters launched by a child of the carrier rather than the carrier itself are not matched.
  • KQL – Defender XDR assumes: InitiatingProcessFileName holds the creator process name.
// HUNT: shell or script interpreter child of the Siemens carrier
// MITRE: T1059, T1574.002
// CONF: low  FP: medium  COST: low | REQUIRES: process creation with parent and command line
// TUNING: exclude CommandLine values of the Siemens installer wrapper after you baseline it; any interpreter on a host with no sanctioned Siemens software stays in scope.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^SiemensSoftwareCenter(\.exe)?$/i
| FileName=/^(cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|regsvr32)(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData, aid])
09

Detection Rules by Platform

CrowdStrike: Custom IOA

IOA namePatternExclusionsPath
Siemens carrier launched by msiexec from user AppDataParentBaseFileName msiexec, FileName SiemensSoftwareCenter.exe, image under AppData\Local\Programs (Promote Q1)Sanctioned per-user rolloutsDetect only (legitimate signed binary, never Prevent)
Out-of-channel AllMyBasic.msi installmsiexec command line contains AllMyBasic.msi (Promote Q3)None expectedDetect
Execution from SM Software Provisioning ServiceImage path contains the folder name (Promote Q4)None expectedDetect
Siemens-named persistence under a user profileTask or Run value naming Siemens Software Center pointing at AppData (Promote Q6, Q7)Sanctioned Siemens software groupDetect
Network contact with Siemens-published infrastructureRemoteAddressIP4 or DomainName matches the published IPs or domain (Promote Q8, Q9)None expectedDetect (single upstream, so not Prevent)

No IOA in this pack ships at Prevent or Critical. Every indicator traces to one upstream (Siemens ProductCERT) and the central binary is legitimate signed software.

SentinelOne: custom detection rules

RuleSource queryRun asNotes
Siemens carrier launched by msiexec from user AppDataQ1, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
Out-of-channel AllMyBasic.msi installQ3, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
Execution from SM Software Provisioning ServiceQ4, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
Siemens-named persistence under a user profileQ6, Q7, PowerQuery tabHunt only until the gap is closedQ6 is only an approximation here. No scheduled-task registration event is attested in the SentinelOne field model. This pivots on the schtasks command line that creates a task, which catches command-line registration only.
Network contact with Siemens-published infrastructureQ8, Q9, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"

Create the rule with POST /web/api/v2.1/cloud-detection/rules, queryType: "scheduled" and queryLang: "2.0", with the query in data.scheduledParams.query. Use 2.0 operator spellings: a rule written with the 1.0 token ContainsCIS was accepted and never fired on a tenant. The API does not warn, so lint the body before deploying.

Microsoft Defender: custom detection rules

RuleSource queryRun asNotes
Siemens carrier launched by msiexec from user AppDataQ1, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
Out-of-channel AllMyBasic.msi installQ3, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
Execution from SM Software Provisioning ServiceQ4, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
Siemens-named persistence under a user profileQ6, Q7, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
Network contact with Siemens-published infrastructureQ8, Q9, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself

Q2, Q5, Q10, Q11 and Q12 stay a hunt in this pack, not a rule. A rule can generate only 150 alerts per run. Continuous (NRT) frequency needs a single table and no comment lines, so delete the generated comment header from the query first.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import (all detect)
type,value,action,severity,expiration,description,tags
sha256,f4d7c5321bb0d1bda439304a753bcf9b467b98ca53c7e9493b9c2c3451092e4a,detect,high,2027-04-21,AllMyBasic.msi malware bundle (Siemens ProductCERT),campaign:Romulus-ClickFix;cve:CVE-2026-110936
sha256,3fdcc7d7d049a89711fb31fb236940a1c5a09d899143ffd20c3c41fb1f2cf491,detect,high,2027-04-21,archive.dll malicious DLL (Siemens ProductCERT),campaign:Romulus-ClickFix;cve:CVE-2026-110936
domain,wizardexpensive.com,detect,high,2027-04-21,payload hosting and C2 (Siemens ProductCERT),campaign:Romulus-ClickFix;cve:CVE-2026-110936
ipv4,96.62.218.59,detect,high,2027-04-21,payload hosting and C2 (Siemens ProductCERT),campaign:Romulus-ClickFix;cve:CVE-2026-110936
ipv4,2.27.248.127,detect,medium,2027-04-21,inactive AllMyBasic.msi distribution channel (Siemens ProductCERT),campaign:Romulus-ClickFix;cve:CVE-2026-110936
Microsoft Defender indicators CSVSettings, Endpoints, Indicators, Import: audit only
indicatorType,indicatorValue,action,title,description,expirationTime,severity,recommendedActions,rbacGroups,category,mitretechniques,GenerateAlert
FileSha256,f4d7c5321bb0d1bda439304a753bcf9b467b98ca53c7e9493b9c2c3451092e4a,Audit,AllMyBasic.msi malware bundle,AllMyBasic.msi malware bundle (Siemens ProductCERT),2027-04-21T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,3fdcc7d7d049a89711fb31fb236940a1c5a09d899143ffd20c3c41fb1f2cf491,Audit,archive.dll malicious DLL,archive.dll malicious DLL (Siemens ProductCERT),2027-04-21T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,wizardexpensive.com,Audit,payload hosting and C2,payload hosting and C2 (Siemens ProductCERT),2027-04-21T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,96.62.218.59,Audit,payload hosting and C2,payload hosting and C2 (Siemens ProductCERT),2027-04-21T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,2.27.248.127,Audit,inactive AllMyBasic.msi distribution channel,inactive AllMyBasic.msi distribution channel (Siemens ProductCERT),2027-04-21T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True

Column names and allowed values are from Microsoft's documented parameter table. Check each expirationTime before importing: an indicator whose date has passed is already expired. Download the sample CSV from the Import page to confirm the column order before a bulk import. Each file takes at most 500 indicators. Learn describes the import per entity type, so if a mixed file is rejected, split it by indicatorType. An imported indicator does nothing unless the matching Advanced features are on (for example Custom network indicators and Allow or block file).

SentinelOne IOC importnot included

This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.

Behavioral Signatureshunt, do not import
# Behavioral signatures (detect on these, not on the signed Siemens file)
SiemensSoftwareCenter.exe running from %LOCALAPPDATA%\Programs, parent msiexec.exe
Folder:  %LOCALAPPDATA%\Programs\SM Software Provisioning Service
Files:   activate.bak and statinfosta.DB beside SiemensSoftwareCenter.exe
Folder:  %LOCALAPPDATA%\FTSuite containing ftc.uml
Start-up entry or scheduled task named "Siemens Software Center" on a host that never had it
Out-of-channel package: AllMyBasic.msi
Vulnerable range: all versions below 4.0.9.8 (abused build: 3.5.8.7)
Analyst Fill-insplaceholders
# Analyst fill-ins: NOT published by any snapshotted source. Do not import until replaced.
REPLACE_WITH_ADDITIONAL_ATTACKER_DLL_NAME
REPLACE_WITH_ADDITIONAL_ATTACKER_DLL_SHA256
Patch and Exposure Auditchecklist
# Patch / exposure audit
Installed Siemens Software Center version must be 4.0.9.8 or later
Search every user profile for SiemensSoftwareCenter.exe under AppData\Local\Programs (PB1)
Search for: SM Software Provisioning Service, activate.bak, statinfosta.DB, FTSuite\ftc.uml
Search proxy, DNS and firewall logs for all three network indicators, including the inactive IP
Confirm Siemens software is only installed from official Siemens sources
11

Detection Validation Gates

GateRequirementEvidence
1 · Telemetry readyProcess creation with parent, command line and image path (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents), executable writes, auto-start registry and scheduled task registration, outbound connections and DNS flowing from user endpoints; longest available retentionEvent counts per source for a sample of user endpoints
2 · Benign baselineRun Q1, Q2, Q11 and Q12 in hunt mode for 14 days; list sanctioned Siemens Software Center installs and their parentsPer-query exclusion list
3 · Positive testsIn a lab, copy a harmless renamed executable into a folder named SM Software Provisioning Service under a test AppData path and run it (Q4); run msiexec against a harmless MSI named AllMyBasic.msi (Q3); register a test task named Siemens Software Center (Q6)Q3, Q4, Q6 fire
4 · PromotionPromote IOA candidates after zero unexplained hits over the baseline window; keep every legitimate-binary IOA at Detect; never promote a Siemens executable hashChange record
12

Hardening: Tiered

Immediate (this week)
  • Update Siemens Software Center to 4.0.9.8 or later and verify the version, because automatic update happens only when the application is started. Authority: MITRE M1051 Update Software; Siemens SSA-580366; CISA KEV due date 2026-11-03. Verify: PB1 version listing.
  • Block 96.62.218.59, wizardexpensive.com and 2.27.248.127 at DNS, proxy and firewall, and search logs back for all three. Authority: MITRE M1037 Filter Network Traffic; Siemens recommendation. Verify: PB2 and a failed test connection.
  • Restrict Siemens software installs to official sources (managed deployment only). Authority: M1051 and Siemens recommendation. best-practice, no formal benchmark.
  • Run the ASR prevalence rule in audit mode to see unknown executables and DLLs that would be blocked. Authority: M1038 Execution Prevention; Microsoft ASR rules reference. Verify: PB3.
Near term (1 to 4 weeks, pilot first)
  • Allow Siemens Software Center only from approved install locations with an AppLocker or WDAC rule, so a signed copy running from a user profile is not trusted. Authority: M1038; Microsoft WDAC and AppLocker guidance. Verify: audit-mode events first.
  • Limit who can run MSI installs with the Windows Installer policy for non-managed applications. Authority: M1038 and M1026 Privileged Account Management. Verify: PB4.
  • Remove or restrict the Run dialog for users who do not need it, as a ClickFix control. Authority: M1038 and M1017 User Training. best-practice, no formal benchmark. Verify: PB4.
Strategic (1 to 3 months)
  • User training on ClickFix: a real verification check never asks to paste a command into Win+R, Run or PowerShell. Authority: M1017 User Training; Siemens guidance.
  • Egress control by category and destination, denying newly seen domains by default for user endpoints. Authority: M1037.
  • Application inventory with signer and path baselines, so a trusted signer in an untrusted path raises an alert. Authority: M1047 Audit. best-practice, no formal benchmark.

Folder-search hardening such as CWDIllegalInDllSearch addresses current-directory loads and does not stop a DLL placed in the application's own folder, which is this attack. The effective controls are patching, install-source control and path-aware application control.

13

Deployable Playbooks

PB1 · Inventory versions and warning-sign artefacts

# PB1 - Inventory Siemens Software Center versions and warning-sign artefacts (read-only)
# Prerequisites: local administrator, PowerShell 5.1 or later. Reboot required: no. Rollback: none required, read-only.
$hits = foreach ($u in Get-ChildItem C:\Users -Directory -ErrorAction SilentlyContinue) {
  $p = Join-Path $u.FullName 'AppData\Local\Programs'
  Get-ChildItem $p -Recurse -Filter SiemensSoftwareCenter.exe -ErrorAction SilentlyContinue |
    ForEach-Object { [pscustomobject]@{ User=$u.Name; Path=$_.FullName; Version=$_.VersionInfo.FileVersion; Signer=(Get-AuthenticodeSignature $_.FullName).SignerCertificate.Subject } }
}
$hits | Format-Table -AutoSize
# Warning-sign folders and files named by Siemens
Get-ChildItem C:\Users -Directory | ForEach-Object {
  Get-ChildItem (Join-Path $_.FullName 'AppData\Local\Programs\SM Software Provisioning Service') -ErrorAction SilentlyContinue
  Get-ChildItem (Join-Path $_.FullName 'AppData\Local\FTSuite\ftc.uml') -ErrorAction SilentlyContinue
}
Get-ChildItem C:\Users -Recurse -Include activate.bak,statinfosta.DB -ErrorAction SilentlyContinue | Select-Object FullName

PB2 · Host firewall block for the published IPs

# PB2 - Block Siemens-published campaign IPs on the host firewall (domain blocking belongs in DNS or proxy)
# Prerequisites: local administrator, Windows Defender Firewall enabled. Reboot required: no.
# Rollback: Remove-NetFirewallRule -DisplayName 'HuntPack-CVE-2026-110936-Block'
New-NetFirewallRule -DisplayName 'HuntPack-CVE-2026-110936-Block' -Direction Outbound -Action Block `
  -RemoteAddress 96.62.218.59,2.27.248.127 -Profile Any
Get-NetFirewallRule -DisplayName 'HuntPack-CVE-2026-110936-Block' | Get-NetFirewallAddressFilter
# Verify: Test-NetConnection 96.62.218.59 -Port 443   (expect failure)

PB3 · ASR prevalence rule in audit mode

# PB3 - ASR prevalence rule in AUDIT mode (no blocking)
# Prerequisites: Microsoft Defender Antivirus active, administrator. Reboot required: no.
# Rollback: Remove-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25
Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 -AttackSurfaceReductionRules_Actions AuditMode
# Verify
(Get-MpPreference).AttackSurfaceReductionRules_Ids
(Get-MpPreference).AttackSurfaceReductionRules_Actions
# Review audit events: Microsoft-Windows-Windows Defender/Operational, Event ID 1122

PB4 · Windows Installer and Run dialog restriction

# PB4 - Restrict Windows Installer and the Run dialog for standard users (pilot ring first)
# Prerequisites: administrator; pilot on a test OU; confirm no business app needs user MSI installs. Reboot required: no (sign-out for NoRun).
# Rollback: delete the two values below (or set them to 0), then gpupdate /force.
# Step 1: Windows Installer, "Turn off Windows Installer" = For non-managed applications only
New-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer' -Name DisableMSI -Type DWord -Value 1
# Step 2: remove Run from the Start menu for users who do not need it (ClickFix control)
New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' -Name NoRun -Type DWord -Value 1
# Verify
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer' -Name DisableMSI
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' -Name NoRun
# Note: NoRun hides the Run dialog, it does not block PowerShell or cmd. Treat it as friction, not a boundary.
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateIsolate the PC from the network first. Then stop the SiemensSoftwareCenter.exe process before removing anything, as Siemens directsSOCIsolation timestamp, process list
ScopeRun Q1 to Q12 over the full retention; sweep for the SM Software Provisioning Service folder, activate.bak, statinfosta.DB and FTSuite\ftc.uml (PB1); search logs for all three network indicators including the inactive IPThreat huntHost list with first-seen times
EradicateRemove the start-up entry and the scheduled task, then the provisioning folder and attacker DLLs. Preserve copies of the DLLs and the MSI first for analysisIRRemoval log, preserved samples, hashes
CredentialsReset passwords for the affected user and any account used on the host, as Siemens directs; review sessions and tokensIdentity teamReset tickets
RecoverReinstall Siemens Software Center only from official Siemens sources at 4.0.9.8 or later; confirm the version with PB1ITVersion evidence
Prevent recurrenceApply the Immediate and Near term hardening tiers and ClickFix awareness trainingSecurity engineeringChange record
15

Detection Coverage Map

Technique / behaviourCQLIOACrowdStrike coverageSentinelOneDefender XDR
Signed carrier started by msiexec from AppData (T1574.002, T1218.007)Q1, Q2YesGoodGood, with assumptionsGood, with assumptions
Out-of-channel AllMyBasic.msi (T1204.002)Q3, Q10YesPartialPartial: same limit as CrowdStrikePartial: Q10 telemetry gap
Provisioning folder execution (T1574.002)Q4YesGoodGood, with assumptionsGood, with assumptions
Attacker DLL written beside carrier (T1574.002, T1105)Q5, Q10NoPartialPartial: Q5 approximatePartial: Q5 approximate, Q10 telemetry gap
Attacker DLL actually loaded by the carrier (image load)NoGAPGAPGAP
Scheduled task persistence (T1053.005)Q6YesGoodPartial: Q6 approximateGood, with assumptions
Run-key persistence (T1547.001)Q7YesGoodGood, with assumptionsGood, with assumptions
Network IOCs, IP and DNS (T1071, T1105)Q8, Q9YesGoodGood, with assumptionsGood, with assumptions
Rare egress from the carrier (T1071.001)Q11NoPartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
Interpreters under the carrier (T1059)Q12NoPartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
ClickFix lure and clipboard command (T1204.004)NoGAPGAPGAP

Gaps: the ClickFix web page and clipboard paste are outside endpoint telemetry, and the DLL load itself is a native hunt (Section 7, N1 and N7). Validation gates are in Section 11; run the benign baseline before any promotion.

16

Hunt Summary Ticket

TITLE:        Siemens Software Center CVE-2026-110936 (Romulus ClickFix DLL side-loading)
SEVERITY:     HIGH (exploited in the wild, CISA KEV 2026-10-20, due 2026-11-03)
SCOPE:        Windows endpoints with user-writable AppData where msiexec can run; any host that ever ran AllMyBasic.msi
HYPOTHESIS:   A user followed a ClickFix lure, msiexec installed an out-of-channel bundle holding a genuine signed
              Siemens Software Center 3.5.8.7 plus attacker DLLs, and the carrier loaded them from its own folder.
QUERIES RUN:  Q1 msiexec carrier | Q2 carrier baseline | Q3 AllMyBasic.msi | Q4 provisioning folder | Q5 archive.dll |
              Q6 task | Q7 Run key | Q8 IPs | Q9 DNS | Q10 hashes | Q11 rare egress | Q12 interpreters   (+8 native hunts)
DATA SOURCES: Process creation, executable writes, auto-start registry, scheduled task registration, outbound
              connections and DNS (CrowdStrike: ProcessRollup2, PeFileWritten, AsepValueUpdate,
              ScheduledTaskRegistered, NetworkConnectIP4, DnsRequest. SentinelOne and Defender equivalents in section 5)
DO FIRST:     Verify installed versions are 4.0.9.8 or later (PB1); run Q1, Q3, Q4, Q8, Q9 over the longest retention.
FINDINGS:     <pending analyst execution>
GAPS:         ClickFix web page and clipboard paste are outside endpoint telemetry; the DLL image load is a native hunt.
              Only archive.dll is named; no other attacker DLL name or hash is published.
ACTIONS:      Patch to 4.0.9.8; block the three network indicators; ASR audit; promote Q1, Q3, Q4 to Custom IOA (Detect).
              Never hash-match or block the genuine Siemens executable. No prevent: single upstream for all indicators.
OWNER:        HuntPack
VERSION:      v0.1 (Draft) - 2026-10-21
17

Changelog

v0.12026-10-21Initial HuntPack: 12 CQL queries, 8 native hunts, 5 IOA candidates, tiered hardening, 4 deployable playbooks, 8 source snapshots. 5 atomic indicators in the Falcon CSV, each traced to a snapshot; all set to detect (single upstream). No prevent rows. SentinelOne PowerQuery and Microsoft Defender KQL tabs added to Q1-Q12: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

TierSourceUsed forAccessed
1Siemens ProductCERT: Active Exploitation of CVE-2026-110936 in Siemens Software CenterExploitation confirmation, IOCs, hashes, warning signs, detection guidance2026-10-21
1Siemens SSA-580366CWE, CVSS, affected and fixed versions2026-10-21
1CISA Known Exploited Vulnerabilities CatalogKEV date and due date2026-10-21
2SecurityOnlineCorroboration of guidance2026-10-21
2The Hacker NewsKEV and Romulus context2026-10-21
2Infosecurity MagazineRomulus description, warning signs2026-10-21
2heise onlineAllMyBasic.msi and version 3.5.8.72026-10-21
2SOC Primearchive.dll and the chain2026-10-21
2MITRE ATT&CK and mitigationsTechnique and mitigation mapping2026-10-21
2Microsoft: Attack surface reduction rules referenceASR rule used in PB32026-10-21