Browser writing executable content outside its download folder
Matches the unexpected file drop leg of MITRE's AN0498 — a browser process itself creating an executable, script or shortcut file somewhere other than the user's download directory and the browser's own program and profile directories. That framing is deliberate: a rule on the browser spawning a child process would be indistinguishable from the client-exploitation rule already authored for T1203, and a write into the download folder is the user-initiated download that belongs to T1204. What remains is content the page placed on disk without a save dialog. The analytic's other legs — the suspicious fetch, the correlation window, the entropy of the payload — are a multi-source join with numeric thresholds that Sigma has no construct for. Requires Sysmon file creation logging with a configuration that does not exclude these extensions or the browsers; the widely used community configs narrow EventID 11 sharply, and a narrowed config makes this rule silent rather than clean. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0176, 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
title: Browser writing executable content outside its download folderid: 8d7edd5f-1ba4-45c8-ba4f-da2dc08de910status: experimentaldescription: | Matches the unexpected file drop leg of MITRE's AN0498 — a browser process itself creating an executable, script or shortcut file somewhere other than the user's download directory and the browser's own program and profile directories. That framing is deliberate: a rule on the browser spawning a child process would be indistinguishable from the client-exploitation rule already authored for T1203, and a write into the download folder is the user-initiated download that belongs to T1204. What remains is content the page placed on disk without a save dialog. The analytic's other legs — the suspicious fetch, the correlation window, the entropy of the payload — are a multi-source join with numeric thresholds that Sigma has no construct for. Requires Sysmon file creation logging with a configuration that does not exclude these extensions or the browsers; the widely used community configs narrow EventID 11 sharply, and a narrowed config makes this rule silent rather than clean. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0176, not hand-written and not tested by its author. Any lab result is on this rule's own page.references: - https://attack.mitre.org/techniques/T1189 - https://attack.mitre.org/detectionstrategies/DET0176author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags: - attack.initial-access - attack.t1189logsource: category: file_event product: windowsdetection: selection_browser: Image|endswith: - '\chrome.exe' - '\msedge.exe' - '\firefox.exe' - '\iexplore.exe' - '\brave.exe' - '\opera.exe' selection_payload: TargetFilename|endswith: - '.exe' - '.dll' - '.scr' - '.hta' - '.js' - '.jse' - '.vbs' - '.vbe' - '.wsf' - '.ps1' - '.lnk' - '.jar' filter_expected_paths: TargetFilename|contains: - '\Downloads\' - '\Google\Chrome\Application\' - '\Google\Chrome\User Data\' - '\Google\Update\' - '\Microsoft\Edge\Application\' - '\Microsoft\Edge\User Data\' - '\Microsoft\EdgeUpdate\' - '\Mozilla Firefox\' - '\Mozilla\Firefox\Profiles\' condition: selection_browser and selection_payload and not filter_expected_pathsfalsepositives: - "A user whose download directory is not the default one. Redirecting downloads to the desktop, to Documents or to a synced folder puts every ordinary download outside the filter and makes this rule fire on normal browsing. This is the first thing to check when tuning, and the filter path list is where the estate's real download locations belong." - "Save-as and drag-out. Choosing a location in the save dialog, or dragging an attachment out of a webmail page, writes the file wherever the user pointed and is recorded against the browser process exactly as a silent drop would be." - "Portable browser installs and per-user or non-standard install paths, which place the browser's own executables and libraries outside the program directories listed in the filter, so self-update rewrites them into an unfiltered path." - "Extension and plugin installation, which writes script files into profile subdirectories that vary by browser build and may not be covered by the profile paths filtered here. MITRE's ExtensionInstallPolicy knob for the macOS analytic is the same idea — a strict install policy is what makes these predictable enough to exclude."level: mediumSentinel · KQL
Run this as a search.
DeviceFileEvents| where (((InitiatingProcessFolderPath endswith "\\chrome.exe" or InitiatingProcessFolderPath endswith "\\msedge.exe" or InitiatingProcessFolderPath endswith "\\firefox.exe" or InitiatingProcessFolderPath endswith "\\iexplore.exe" or InitiatingProcessFolderPath endswith "\\brave.exe" or InitiatingProcessFolderPath endswith "\\opera.exe") and (FolderPath endswith ".exe" or FolderPath endswith ".dll" or FolderPath endswith ".scr" or FolderPath endswith ".hta" or FolderPath endswith ".js" or FolderPath endswith ".jse" or FolderPath endswith ".vbs" or FolderPath endswith ".vbe" or FolderPath endswith ".wsf" or FolderPath endswith ".ps1" or FolderPath endswith ".lnk" or FolderPath endswith ".jar")) and not ((FolderPath contains "\\Downloads\\" or FolderPath contains "\\Google\\Chrome\\Application\\" or FolderPath contains "\\Google\\Chrome\\User Data\\" or FolderPath contains "\\Google\\Update\\" or FolderPath contains "\\Microsoft\\Edge\\Application\\" or FolderPath contains "\\Microsoft\\Edge\\User Data\\" or FolderPath contains "\\Microsoft\\EdgeUpdate\\" or FolderPath contains "\\Mozilla Firefox\\" or FolderPath contains "\\Mozilla\\Firefox\\Profiles\\")))
Splunk · SPL
Run this as a search.
index=* (((Image="*\\chrome.exe" OR Image="*\\msedge.exe" OR Image="*\\firefox.exe" OR Image="*\\iexplore.exe" OR Image="*\\brave.exe" OR Image="*\\opera.exe") AND (TargetFilename="*.exe" OR TargetFilename="*.dll" OR TargetFilename="*.scr" OR TargetFilename="*.hta" OR TargetFilename="*.js" OR TargetFilename="*.jse" OR TargetFilename="*.vbs" OR TargetFilename="*.vbe" OR TargetFilename="*.wsf" OR TargetFilename="*.ps1" OR TargetFilename="*.lnk" OR TargetFilename="*.jar")) AND NOT ((TargetFilename="*\\Downloads\\*" OR TargetFilename="*\\Google\\Chrome\\Application\\*" OR TargetFilename="*\\Google\\Chrome\\User Data\\*" OR TargetFilename="*\\Google\\Update\\*" OR TargetFilename="*\\Microsoft\\Edge\\Application\\*" OR TargetFilename="*\\Microsoft\\Edge\\User Data\\*" OR TargetFilename="*\\Microsoft\\EdgeUpdate\\*" OR TargetFilename="*\\Mozilla Firefox\\*" OR TargetFilename="*\\Mozilla\\Firefox\\Profiles\\*")))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE (((TO_LOWER(process.executable) LIKE "*\\\\chrome.exe" OR TO_LOWER(process.executable) LIKE "*\\\\msedge.exe" OR TO_LOWER(process.executable) LIKE "*\\\\firefox.exe" OR TO_LOWER(process.executable) LIKE "*\\\\iexplore.exe" OR TO_LOWER(process.executable) LIKE "*\\\\brave.exe" OR TO_LOWER(process.executable) LIKE "*\\\\opera.exe") AND (TO_LOWER(file.path) LIKE "*.exe" OR TO_LOWER(file.path) LIKE "*.dll" OR TO_LOWER(file.path) LIKE "*.scr" OR TO_LOWER(file.path) LIKE "*.hta" OR TO_LOWER(file.path) LIKE "*.js" OR TO_LOWER(file.path) LIKE "*.jse" OR TO_LOWER(file.path) LIKE "*.vbs" OR TO_LOWER(file.path) LIKE "*.vbe" OR TO_LOWER(file.path) LIKE "*.wsf" OR TO_LOWER(file.path) LIKE "*.ps1" OR TO_LOWER(file.path) LIKE "*.lnk" OR TO_LOWER(file.path) LIKE "*.jar")) AND NOT ((TO_LOWER(file.path) LIKE "*\\\\downloads\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\google\\\\chrome\\\\application\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\google\\\\chrome\\\\user data\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\google\\\\update\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\microsoft\\\\edge\\\\application\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\microsoft\\\\edge\\\\user data\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\microsoft\\\\edgeupdate\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\mozilla firefox\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\mozilla\\\\firefox\\\\profiles\\\\*")))
Wazuh · XML rule
Deploy to your manager — this is a rule, not a search.
<group name="sigma,windows,file_event,"> <!-- Rule ids must be unique on your manager; 100000+ is the user range. --> <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)(\\chrome\.exe$|\\msedge\.exe$|\\firefox\.exe$|\\iexplore\.exe$|\\brave\.exe$|\\opera\.exe$)</field> <field name="TargetFilename" type="pcre2">(?i)(\.exe$|\.dll$|\.scr$|\.hta$|\.js$|\.jse$|\.vbs$|\.vbe$|\.wsf$|\.ps1$|\.lnk$|\.jar$)</field> <field name="TargetFilename" negate="yes" type="pcre2">(?i)(\\Downloads\\|\\Google\\Chrome\\Application\\|\\Google\\Chrome\\User Data\\|\\Google\\Update\\|\\Microsoft\\Edge\\Application\\|\\Microsoft\\Edge\\User Data\\|\\Microsoft\\EdgeUpdate\\|\\Mozilla Firefox\\|\\Mozilla\\Firefox\\Profiles\\)</field> <description>Browser writing executable content outside its download folder</description> <mitre> <id>T1189</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.