Mshta launching remote or inline script content
Matches the process-creation leg of AN1397: a `mshta.exe` start whose command line carries the two things that distinguish proxied execution from opening a local application — content fetched from off the host, or script handed to the HTA engine inline rather than as a file — plus a third arm for the parent processes MITRE's `SuspiciousParentProcesses` knob names, populated here with the Office applications and the WSH interpreters. A bare `mshta.exe` gate is deliberately not used on its own: mshta is a shipped Windows binary and an in-house `.hta` opened from a desktop shortcut produces the same image name, so every arm is a second gate applied on top of it. Three limits are worth stating plainly. The analytic's Sysmon EventID 3 and 22 legs describe the network fetch, and its EventID 11 leg the file the payload drops, but each is a separate event that MITRE's `TimeWindow` knob correlates with this one — a cross-event join lib/sigma cannot express — so this rule stops at the invocation. An HTA already staged on disk by an earlier stage and run as `mshta.exe C:\Users\Public\x.hta` matches no arm here unless its parent is one of the listed ones. And `AllowedHTASources` is a knob for an allowlist a site has to build, not something a shipped rule can populate. Vocabulary and prerequisite: this is written in the Sysmon-shaped `process_creation` vocabulary the brief specifies, and the brief feeds it from Security EventID 4688, where `Image` maps to `NewProcessName` and `ParentImage` to `ParentProcessName`. That feed needs *Audit Process Creation*, and two of the three arms read `CommandLine`, which needs the separate *Include command line in process creation events* policy — without it those arms return zero rows, and zero rows reads as quiet when it actually means blind. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0506, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full descriptionShow less
The detection
The 4 SIEM queries below are previews produced by Siemphony’s own translator, not pySigma, and none has been executed against a real backend — review before you deploy.
detection.yml
Sentinel · KQL
Run this as a search.
DeviceProcessEvents| where (FolderPath endswith "\\mshta.exe" and ((ProcessCommandLine contains "http://" or ProcessCommandLine contains "https://" or ProcessCommandLine contains "ftp://" or ProcessCommandLine contains "\\\\") or (ProcessCommandLine contains "vbscript:" or ProcessCommandLine contains "javascript:" or ProcessCommandLine contains "jscript:" or ProcessCommandLine contains "about:" or ProcessCommandLine contains "GetObject(" or ProcessCommandLine contains "RunHTMLApplication") or (InitiatingProcessFolderPath endswith "\\winword.exe" or InitiatingProcessFolderPath endswith "\\excel.exe" or InitiatingProcessFolderPath endswith "\\powerpnt.exe" or InitiatingProcessFolderPath endswith "\\outlook.exe" or InitiatingProcessFolderPath endswith "\\msaccess.exe" or InitiatingProcessFolderPath endswith "\\onenote.exe" or InitiatingProcessFolderPath endswith "\\visio.exe" or InitiatingProcessFolderPath endswith "\\wscript.exe" or InitiatingProcessFolderPath endswith "\\cscript.exe" or InitiatingProcessFolderPath endswith "\\eqnedt32.exe")))
Splunk · SPL
Run this as a search.
index=* (Image="*\\mshta.exe" AND ((CommandLine="*http://*" OR CommandLine="*https://*" OR CommandLine="*ftp://*" OR CommandLine="*\\\\*") OR (CommandLine="*vbscript:*" OR CommandLine="*javascript:*" OR CommandLine="*jscript:*" OR CommandLine="*about:*" OR CommandLine="*GetObject(*" OR CommandLine="*RunHTMLApplication*") OR (ParentImage="*\\winword.exe" OR ParentImage="*\\excel.exe" OR ParentImage="*\\powerpnt.exe" OR ParentImage="*\\outlook.exe" OR ParentImage="*\\msaccess.exe" OR ParentImage="*\\onenote.exe" OR ParentImage="*\\visio.exe" OR ParentImage="*\\wscript.exe" OR ParentImage="*\\cscript.exe" OR ParentImage="*\\eqnedt32.exe")))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE (TO_LOWER(process.executable) LIKE "*\\\\mshta.exe" AND ((TO_LOWER(process.command_line) LIKE "*http://*" OR TO_LOWER(process.command_line) LIKE "*https://*" OR TO_LOWER(process.command_line) LIKE "*ftp://*" OR TO_LOWER(process.command_line) LIKE "*\\\\\\\\*") OR (TO_LOWER(process.command_line) LIKE "*vbscript:*" OR TO_LOWER(process.command_line) LIKE "*javascript:*" OR TO_LOWER(process.command_line) LIKE "*jscript:*" OR TO_LOWER(process.command_line) LIKE "*about:*" OR TO_LOWER(process.command_line) LIKE "*getobject(*" OR TO_LOWER(process.command_line) LIKE "*runhtmlapplication*") OR (TO_LOWER(process.parent.executable) LIKE "*\\\\winword.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\excel.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\powerpnt.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\outlook.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\msaccess.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\onenote.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\visio.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\wscript.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\cscript.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\eqnedt32.exe")))
Wazuh · XML rule
Deploy to your manager — this is a rule, not a search.
<group name="sigma,windows,process_creation,"> <!-- Rule ids must be unique on your manager; 100000+ is the user range. --> <!-- 3 rules: the Sigma condition ORs across different fields, which one rule cannot express. Any one matching is a hit. --> <rule id="100000" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)\\mshta\.exe$</field> <field name="CommandLine" type="pcre2">(?i)(http://|https://|ftp://|\\\\)</field> <description>Mshta launching remote or inline script content (1/3)</description> <mitre> <id>T1218.005</id> </mitre> </rule> <rule id="100001" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)\\mshta\.exe$</field> <field name="CommandLine" type="pcre2">(?i)(vbscript:|javascript:|jscript:|about:|GetObject\(|RunHTMLApplication)</field> <description>Mshta launching remote or inline script content (2/3)</description> <mitre> <id>T1218.005</id> </mitre> </rule> <rule id="100002" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)\\mshta\.exe$</field> <field name="ParentImage" type="pcre2">(?i)(\\winword\.exe$|\\excel\.exe$|\\powerpnt\.exe$|\\outlook\.exe$|\\msaccess\.exe$|\\onenote\.exe$|\\visio\.exe$|\\wscript\.exe$|\\cscript\.exe$|\\eqnedt32\.exe$)</field> <description>Mshta launching remote or inline script content (3/3)</description> <mitre> <id>T1218.005</id> </mitre> </rule></group>
Verdicts · reactions · comments
Community
Verdicts from engineers who actually deployed it, and the conversation around it.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo verdicts reported yet. The first one is worth more than the tenth — say what you ran it against.
Log in to report a verdict.
Log in to join the discussion.
No comments yet. Someone who deploys this will have something to say about it.