NetamLoader: XAML-based .NET loader hits Asian government Windows 10 build in suspected supply-chain attack
Matéria consolidada. Reúne 2 matérias que o Tifon tinha publicado separadamente sobre a mesma história. A IA reescreveu o relatório com o que as 2 fontes trouxeram em 31/10/2026 00:01; os links antigos trazem para cá.
Fontes: gbhackers.com ↗ securelist.com ↗
Kaspersky GReAT (securelist.com) describes NetamLoader, a previously unknown multi-stage .NET loading framework built on XAML. It was found after a KSN alert in the first half of 2026 and strongly indicates a supply-chain attack on a custom Windows 10 build used exclusively by government entities in Asia. The malicious CAB archive sat in the Windows update download folder and carried legitimate Patch My PC components and Microsoft-signed assemblies. Kaspersky saw one victim in Asia and infers a wider government focus (gbhackers.com). No known APT group has been linked to the activity (securelist.com, gbhackers.com). The loader bypasses AMSI, erases forensic traces and runs its payload in dllhost.exe, outside the original process tree, to evade EDR.
Detalhes técnicos
- Delivery: a CAB archive (
e4537a1762fcafd2fd96bfc825bad34f9db9a24d) holds seven files extracted toC:\Windows\SoftwareDistribution\Download\Install\(securelist.com). Telemetry flagged a malicious.configfile in the CAB (gbhackers.com). - Initial execution:
PatchMyPC-ScriptRunner.exeuses AppDomainManager injection throughPatchMyPC-ScriptRunner.exe.config. The config loads the Microsoft-signedDataCacheFactoryConfigurationclass (securelist.com), tied toMicrosoft.HostIntegration.Connectors(gbhackers.com). The class reads a craftedfabric.config, which instantiatesResXResourceSetto parseResources.resx. - Stage 1:
Resources.resxcontains a Base64 BinaryFormatter object that triggers a TypeConfuseDelegate deserialization chain. The chain callsXamlReader.Parse()to load XAML-1. XAML-1 derives an AES key from the SHA-256 of the lowercased host command line and decrypts XAML-2. On any failure the process exits silently viaEnvironment.Exit(0). - Stage 2: XAML-2-1 patches AMSI by redirecting the
CAmsiAntimalware::Scanvtable pointer to a patchedConsole.Clear(), so every scan returns clean. XAML-2-2 holds the .NET 1 Loader and its JSON C2 configuration. - Anti-forensics: the loader deletes the malicious files, update records, CLR usage logs and Prefetch entries. It strips lines containing
GetExtendedUpdateInfoHandlerfrom%WINDIR%\Logs\CmitUpdateAgentlogs. TheCmitUpdateAgentkeyword may point to the custom Windows 10 build. - State tracking: a GUID-based exception-state log under
HKLM\SOFTWARE\Classes\appidis derived from the C2 URL (securelist.com). - Execution outside the process tree: with administrator rights it sets
COMPlus_ETWEnabled=0. It then abuses a remote COM object over RPC (CLSIDab8902b4-09ca-4bb6-b78d-a8f59079a8d5) with the same deserialization technique to load XAML-3 intodllhost.exe, detaching the payload from the original process and evading EDR behavioral monitoring. - .NET 2 Plugin: runs in
dllhost.exe, collects .NET and BuildLab registry values and locks the process withCoLockObjectExternal. It waits 20-40 minutes before first contact to defeat sandboxes. A watchdog terminates it after about 28 hours (100801 s). - C2: polls
https://openaigpt4v.com/model_v4/<instance GUID>every 5-6 minutes, or every 22-28 hours after a failure (gbhackers.com). Traffic uses AES-128-CBC with HMAC-SHA256, and the plugin accepts any certificate. Downloaded XAML runs in an isolated AppDomain. The domainopenaigpt4v[.]comsits behind Cloudflare at104.18.14[.]219(gbhackers.com). - Detections: Kaspersky detects it as
HEUR:Trojan.MSIL.NetamLoader.gen,Trojan.MSIL.Zapchast.*andTrojan.Script.Agent.*(securelist.com).
Remediação
- Hunt for
PatchMyPC-ScriptRunner.exewith an accompanying.config,fabric.configorResources.resxinSoftwareDistribution\Download\Install(securelist.com, gbhackers.com). - Watch for unexpected
.configfiles beside .NET executables (gbhackers.com). - Alert on AMSI tampering and on
dllhost.exelaunched through COM (gbhackers.com). - Block and monitor traffic to
openaigpt4v[.]com.
Linha do tempo
-
NetamLoader, a XAML-based .NET loader, hits Asian government networks via a trojanized Windows update channel
ler a análise desta fonte ocultar
Kaspersky researchers identified NetamLoader, a .NET loading framework built on XAML markup. It appears to be a supply-chain attack on a customized Windows build used only by Asian government bodies. No known APT group has been linked to it. Kaspersky saw one victim in Asia and infers a wider government focus. Telemetry flagged a malicious
.configfile inside a CAB archive inC:\Windows\SoftwareDistribution\Download. The rest of the CAB held legitimate Patch My PC components, and the injected assemblies were Microsoft-signed.Technical Details
- Initial execution:
PatchMyPC-ScriptRunner.exeloads a crafted config file that uses AppDomainManager injection. The config points toMicrosoft.HostIntegration.Connectors. Its DataCacheFactoryConfiguration class readsfabric.config, which parses the maliciousResources.resx. Resources.resxholds a Base64 BinaryFormatter object that triggers a TypeConfuseDelegate deserialization attack and callsXamlReader.Parse()to run XAML-1.- XAML-1 derives an AES key from the SHA-256 hash of the host's command line and decrypts XAML-2. If decryption fails, the process exits silently.
- XAML-2 unpacks XAML-2-1, which hijacks AMSI by redirecting the CAmsiAntimalware::Scan pointer to a patched Console.Clear() so every scan returns clean. It also unpacks XAML-2-2, which delivers the .NET 1 Loader and its JSON C2 configuration.
- The loader erases update records, CLR usage logs and Prefetch files. It strips GetExtendedUpdateInfoHandler entries from CmitUpdateAgent logs, which may point to the custom government Windows build.
- It uses an RPC-created COM object to launch XAML-3 inside
dllhost.exe, detaching the payload from the original process tree to evade EDR. - The final plugin waits 20–40 minutes before first contact to defeat sandboxes. It polls its C2 every 5–6 minutes, or every 22–28 hours after a failure.
- C2 traffic uses AES-128-CBC with HMAC-SHA256, and the plugin accepts any certificate. Downloaded XAML runs in an isolated AppDomain. A watchdog terminates the process after about 28 hours.
- C2:
openaigpt4v[.]com, behind Cloudflare at104.18.14[.]219.
Remediation
- Watch for unexpected
.configfiles beside .NET executables, especially inSoftwareDistribution\Download\Install. - Alert on AMSI tampering and on
dllhost.exelaunched through COM.
- Initial execution:
-
Unknown APT deploys NetamLoader XAML framework against custom Windows 10 build used by Asian governments
ler a análise desta fonte ocultar
Kaspersky GReAT reports NetamLoader, a previously unknown, multi-stage .NET loading framework built on XAML. It was found after a KSN alert in the first half of 2026 and strongly indicates a supply-chain attack on a custom Windows 10 build used exclusively by government entities in Asia. The malicious CAB archive sat in the Windows update download folder and carried legitimate Patch My PC components and Microsoft-signed assemblies. No attribution to a known APT group has been established.
Technical Details
- Delivery: a CAB archive (
e4537a1762fcafd2fd96bfc825bad34f9db9a24d) holds seven files extracted toC:\Windows\SoftwareDistribution\Download\Install\. Execution ofPatchMyPC-ScriptRunner.exeuses AppDomainManager injection viaPatchMyPC-ScriptRunner.exe.config. The config loads the Microsoft-signedDataCacheFactoryConfigurationclass, which reads a craftedfabric.config. That in turn instantiatesResXResourceSetto parseResources.resx. - Stage 1:
Resources.resxcontains a Base64 BinaryFormatter object that triggers a TypeConfuseDelegate deserialization chain. The chain callsXamlReader.Parse()to load XAML-1, which derives an AES key from the SHA-256 of the lowercased host command line and decrypts XAML-2. On any failure it callsEnvironment.Exit(0). - Stage 2: XAML-2-1 patches AMSI by redirecting the
CAmsiAntimalware::Scanvtable pointer to a patchedConsole.Clear(), so every scan returns clean. XAML-2-2 holds the .NET 1 Loader and its JSON C2 configuration. - Anti-forensics: the loader deletes the malicious files, update records, CLR usage logs and Prefetch entries. It also strips lines containing
GetExtendedUpdateInfoHandlerfrom%WINDIR%\Logs\CmitUpdateAgentlogs. TheCmitUpdateAgentkeyword may link to the custom Windows 10 build. - Registry state tracking: a GUID-based exception-state log under
HKLM\SOFTWARE\Classes\appidis derived from the C2 URL. - Execution outside the process tree: it requires administrator rights and sets
COMPlus_ETWEnabled=0. It then abuses a remote COM object over RPC (CLSIDab8902b4-09ca-4bb6-b78d-a8f59079a8d5) with the same deserialization technique to load XAML-3 intodllhost.exe. This separates the payload from the initial process and evades EDR behavioral monitoring. - .NET 2 Plugin: runs inside
dllhost.exe, collects .NET and BuildLab registry values, and locks the process withCoLockObjectExternal. It waits a 20-40 minute jitter delay before first contact, has a ~28-hour (100801 s) watchdog that triggers exit, and polls the C2 athttps://openaigpt4v.com/model_v4/<instance GUID>with AES-encrypted traffic. - Detections: Kaspersky detects the threat as
HEUR:Trojan.MSIL.NetamLoader.gen,Trojan.MSIL.Zapchast.*andTrojan.Script.Agent.*.
Remediation
- Hunt for
PatchMyPC-ScriptRunner.exewith an accompanying.config,fabric.configorResources.resxinSoftwareDistribution\Download\Install. - Look for
dllhost.exeinstances spawned via RPC with .NET CLR loaded. - Look for anomalous
appidregistry key creation or deletion and theDllSurrogatevalue. - Monitor for outbound traffic to
openaigpt4v.com. - Audit update-channel integrity for the custom Windows 10 build.
- Delivery: a CAB archive (