WalletService Svchost Host Spawning A Child Process - CVE-2026-49176 - STRICT
SIGMA detection rule by Adama ASSIONGBON (SOC & CTI Consultant), https://linkedin.com/in/adama-assiongbon-9029893a · Unknown
Detects a child process spawned by the svchost.exe instance hosting WalletService, consistent with CVE-2026-49176 exploitation reaching SYSTEM code execution. SOC L1 should verify the source, affected host, user, process or request fields, timing, and related activity.
Détecte un processus enfant spawné par l'instance svchost.exe qui héberge WalletService (groupe de service "appmodel"), cohérent avec une exploitation de CVE-2026-49176 aboutissant à une exécution de code SYSTEM. WalletService ne spawn normalement aucun processus enfant ; la version initiale de cette règle restreignait la détection à une liste de shells et de LOLBins connus (cmd.exe, powershell.exe, etc.), ce qui laissait un angle mort si le payload de l'attaquant portait un nom de binaire arbitraire (masquerade). La règle a été corrigée pour détecter tout enfant, quel que soit son nom, en ne conservant que des filtres pour les rares cas légitimes documentés (Windows Error Reporting, agents EDR). Le test contre le PoC public 777erp/CVE-2026-49176_BOF (BOF Cobalt Strike) a révélé un second angle mort (AM6) : sa stratégie de repli crée un service Windows temporaire dont le binaire est directement un shell (par exemple "cmd.exe /c shell_broker.exe"), démarré par le Service Control Manager (services.exe) et non par le svchost -k appmodel. Ce chemin casse selection_parent car le parent observé n'est plus svchost.exe. La règle a été complétée avec selection_scm_shell_relay pour couvrir ce relais d'exécution par service temporaire, sans dépendre du nom du binaire de payload final. Un second challenge offensif a révélé AM7 : les filtres (WER, agents EDR) ne matchaient que sur le nom de fichier ou une sous-chaîne, sans jamais vérifier le chemin complet. Un attaquant qui contrôle déjà l'appel CreateProcess depuis le contexte SYSTEM (WalletService ou le relais AM6) pouvait nommer son payload "WerFault.exe" ou placer son dossier de staging dans un chemin contenant "CrowdStrike" pour déclencher ces filtres et rendre la règle silencieuse. Les deux filtres ont été ancrés à un chemin d'installation légitime (System32/SysWOW64 pour WerFault, Program Files/ProgramData pour les agents EDR). AM8 : selection_scm_shell_relay ne couvrait que les shells classiques ; rundll32.exe et regsvr32.exe (LOLBins d'exécution de code, T1218.010/011) ont été ajoutés, un ImagePath de service pointant directement vers ces binaires restant un signal rare et fiable. Le SOC L1 doit vérifier la source, l’hôte affecté, l’utilisateur, les champs de processus ou de requête, la chronologie et les activités associées.
title: WalletService Svchost Host Spawning A Child Process - CVE-2026-49176 - STRICT
id: 93d9f8b6-9a83-4f3f-9e20-94188916c371
status: experimental
description: |
Detects a child process spawned by the svchost.exe instance hosting WalletService, consistent with CVE-2026-49176 exploitation reaching SYSTEM code execution. SOC L1 should verify the source, affected host, user, process or request fields, timing, and related activity.
Détecte un processus enfant spawné par l'instance svchost.exe qui héberge WalletService (groupe de service "appmodel"), cohérent avec une exploitation de CVE-2026-49176 aboutissant à une exécution de code SYSTEM. WalletService ne spawn normalement aucun processus enfant ; la version initiale de cette règle restreignait la détection à une liste de shells et de LOLBins connus (cmd.exe, powershell.exe, etc.), ce qui laissait un angle mort si le payload de l'attaquant portait un nom de binaire arbitraire (masquerade). La règle a été corrigée pour détecter tout enfant, quel que soit son nom, en ne conservant que des filtres pour les rares cas légitimes documentés (Windows Error Reporting, agents EDR). Le test contre le PoC public 777erp/CVE-2026-49176_BOF (BOF Cobalt Strike) a révélé un second angle mort (AM6) : sa stratégie de repli crée un service Windows temporaire dont le binaire est directement un shell (par exemple "cmd.exe /c shell_broker.exe"), démarré par le Service Control Manager (services.exe) et non par le svchost -k appmodel. Ce chemin casse selection_parent car le parent observé n'est plus svchost.exe. La règle a été complétée avec selection_scm_shell_relay pour couvrir ce relais d'exécution par service temporaire, sans dépendre du nom du binaire de payload final. Un second challenge offensif a révélé AM7 : les filtres (WER, agents EDR) ne matchaient que sur le nom de fichier ou une sous-chaîne, sans jamais vérifier le chemin complet. Un attaquant qui contrôle déjà l'appel CreateProcess depuis le contexte SYSTEM (WalletService ou le relais AM6) pouvait nommer son payload "WerFault.exe" ou placer son dossier de staging dans un chemin contenant "CrowdStrike" pour déclencher ces filtres et rendre la règle silencieuse. Les deux filtres ont été ancrés à un chemin d'installation légitime (System32/SysWOW64 pour WerFault, Program Files/ProgramData pour les agents EDR). AM8 : selection_scm_shell_relay ne couvrait que les shells classiques ; rundll32.exe et regsvr32.exe (LOLBins d'exécution de code, T1218.010/011) ont été ajoutés, un ImagePath de service pointant directement vers ces binaires restant un signal rare et fiable. Le SOC L1 doit vérifier la source, l’hôte affecté, l’utilisateur, les champs de processus ou de requête, la chronologie et les activités associées.
references:
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-49176
- https://nvd.nist.gov/vuln/detail/CVE-2026-49176
- https://github.com/DavidCarliez/CVE-2026-49176_LPE_POC
- https://github.com/777erp/CVE-2026-49176_BOF
- https://securityonline.info/cve-2026-49176-walletservice-eop/
author: Adama ASSIONGBON (SOC & CTI Consultant), https://linkedin.com/in/adama-assiongbon-9029893a
date: 2026-08-03
modified: 2026-08-04
related:
- id: 04dbc913-0d24-4ddd-bbef-18b39b2f238f
type: derived
tags:
- attack.privilege-escalation
- attack.execution
- attack.t1068
- attack.t1569.002
- cve.2026-49176
logsource:
product: windows
category: process_creation
detection:
# WalletService is hosted in the shared "appmodel" svchost service group and
# legitimately never spawns any child process (no install wizard, no helper tool).
selection_parent_walletservice:
ParentImage|endswith: '\svchost.exe'
ParentCommandLine|contains: '-k appmodel'
# Fallback path observed in public CVE-2026-49176 exploit tooling: instead of spawning
# directly from the WalletService svchost, a short-lived Windows service is registered
# whose own binary is a shell/script host, executed by the Service Control Manager
# (services.exe). Legitimate services almost never point their ImagePath at a shell.
selection_scm_shell_relay:
ParentImage|endswith: '\services.exe'
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\cscript.exe'
- '\wscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
# Windows Error Reporting collecting a crash dump if WalletService itself faults.
# Path-anchored (not just filename) so an attacker cannot bypass this filter by naming
# their own payload "WerFault.exe" from an arbitrary staging directory (AM7).
filter_main_wer_crash_handler:
Image|endswith:
- '\WerFault.exe'
- '\WerFaultSecure.exe'
Image|startswith:
- 'C:\Windows\System32\'
- 'C:\Windows\SysWOW64\'
# EDR/AV instrumentation of the WalletService host process.
# Anchored to the vendor's typical install root in addition to the name substring, so a
# payload merely named/pathed to contain a vendor string cannot pass through unfiltered
# (AM7). Vendor paths vary by deployment: tune per environment if legitimate agents run
# from a different root.
filter_main_edr_agents:
Image|contains:
- 'CrowdStrike'
- 'SentinelOne'
- 'CylanceSvc'
- 'MsMpEng'
- 'MsSense'
Image|startswith:
- 'C:\Program Files\'
- 'C:\Program Files (x86)\'
- 'C:\ProgramData\'
condition: (selection_parent_walletservice or selection_scm_shell_relay) and not 1 of filter_main_*
fields:
- UtcTime
- Computer
- User
- Image
- CommandLine
- ParentImage
- ParentCommandLine
- IntegrityLevel
- ProcessId
- ParentProcessId
falsepositives:
- Windows Error Reporting collecting a crash dump after a legitimate WalletService fault, from the genuine System32/SysWOW64 path
- EDR or AV agents instrumenting the WalletService host process, running from their genuine Program Files/ProgramData install root (tune filter_main_edr_agents by vendor path if a vendor installs elsewhere)
- A future legitimate Windows update adding a helper child process to WalletService (verify against release notes before adding a permanent filter)
- Legacy installers or software deployment tooling that registers a short-lived service whose binary is a shell to run a post-install script (rare; tune selection_scm_shell_relay by CommandLine if seen)
- Legitimate administrative use of rundll32.exe/regsvr32.exe as a service ImagePath is effectively unseen in practice; treat any match as high-priority triage
level: high