Skip to content

Back to the catalog

Socket: 5 Malicious NuGet Packages Target Chinese .NET Developers
socket.devwriteup

Socket: 5 Malicious NuGet Packages Target Chinese .NET Developers

Socket's Threat Research Team uncovered five malicious NuGet packages (IR.DantUI, IR.OscarUI, IR.Infrastructure.Core, IR.Infrastructure.DataService.Core, IR.iplus32) published by account bmrxntfj that typosquat Chinese .NET UI/infrastructure libraries like AntdUI, together accumulating ~65,000 downloads. Each package wraps a .NET Reactor-protected infostealer that hooks the CLR JIT (patching clrjit.dll!getJit) via a module initializer to decrypt and run malicious code on load, harvesting credentials from 12 browsers, 8 desktop crypto wallets, 5 wallet extensions, SSH keys, and local files, exfiltrating to dns-providersa2[.]com. The researchers also detail a novel attribution technique pivoting on the .NET Reactor's operator-specific RSA-1024 public key via VirusTotal Intelligence search, linking the campaign to related stealer samples and a live memory dump that exposed the full C2 configuration.

TL;DR Five typosquatted NuGet packages deploy a .NET Reactor-packed, JIT-hooking infostealer targeting browsers, crypto wallets, and SSH keys, with attribution traced via a unique Reactor RSA key pivot.
Document

What it is

Five malicious NuGet packages published by account bmrxntfj, all still live at time of writing: IR.DantUI and IR.OscarUI (impersonating AntdUI, an MIT WinForms library on Gitee), plus IR.Infrastructure.Core, IR.Infrastructure.DataService.Core, and IR.iplus32 (mimicking internal Chinese enterprise libraries). Rather than typosquatting public package names, they impersonate privately/internally distributed libraries that target orgs may already consume, making the IDs plausible in Chinese enterprise .NET environments.

How it works

Each package is a decompiled copy of a legitimate library with a .NET Reactor–protected stealer grafted on. Execution triggers from the .NET module initializer, which the CLR runs automatically before any application code — no API call, user interaction, or Visual Studio session needed. On DLL load the Reactor bootstrap: verifies Anti-Tamper via an embedded RSA-1024 key, allocates RWX memory with VirtualAlloc(PAGE_EXECUTE_READWRITE), decrypts the Necrobit stage-2 IL blob, then patches clrjit.dll!getJit with a 4-byte JMP. That hook owns every subsequent method compilation, decrypting each method body on demand so the library both compiles cleanly and runs the payload. Cross-platform paths are fully wired: Linux uses /proc/self/mem, mmap, mprotect; macOS resolves libSystem/libclrjit symbols for the same primitives.

Preconditions / Affected

Any build server, CI runner, or workstation that runs nuget restore and then loads one of the assemblies — on Windows, Linux, or macOS. No debugger or interactive session required. Reactor Necrobit decrypt stubs appear as return null; in decompiled output; Windows P/Invoke names use string-split assembly to defeat static string matching.

What to do

Hash-based IOCs do not work here — this is the key operational point. The operator rotates versions (2.1.55 → 2.1.56 → 2.1.57 observed) so blocking a specific DLL hash misses the next release. The account has 224 total versions, 219 unlisted (listed: false) but still fetchable via version-pinned installs, with only one version listed per package at a time. Block by package ID / publisher account, not by hash. Audit lockfiles and CI logs for any IR.DantUI, IR.OscarUI, IR.Infrastructure.Core, IR.Infrastructure.DataService.Core, or IR.iplus32 reference — including version-pinned installs of unlisted versions. Socket has submitted NuGet takedown requests but all five remained available.

Caveats

Only the AntdUI-derived packages are confirmed against upstream: a diff of DantUI/Svg/Transforms/SvgTransform.cs shows every AntdUI.* namespace renamed to DantUI.*, method bodies replaced by decrypt stubs, and a 230-field Reactor state machine injected into static constructors. The three infrastructure packages have no confirmed public upstream, so the "repackaged legitimate code" claim rests on the two UI packages. The seven-month campaign duration is inferred from the version-rotation pattern, not directly logged. The fetched page cuts off mid-sentence on the P/Invoke evasion detail.

Organisations named here

  • dns-providersa2.com
  • Njalla
  • T1055.013
  • T1497.001
  • T1539
  • T1560

Technologies named here

  • Socket Threat Research Team
  • IR.DantUI
  • Socket GitHub App
  • IR.OscarUI
  • IR.Infrastructure.Core
  • Socket CLI
  • Socket Firewall
  • IR.Infrastructure.DataService.Core
  • IR.iplus32
  • Socket browser extension
  • Socket MCP
  • AntdUI
  • ilspycmd
  • VirusTotal Intelligence
  • Firefox / Mozilla / Thunderbird
  • Rip-scraper tool
  • MetaMask, TronLink, Phantom, Trust Wallet, Coinbase Wallet
  • NuGet registration API
  • .NET Reactor
  • Microsoft OneDrive
  • NuGet
  • .NET
  • VirusTotal
  • YARA
  • MITRE ATT&CK
  • Socket

Techniques named here

  • Supply chain compromise
  • Obfuscated Files or Information
  • Process injection
  • Virtualization/Sandbox Evasion
  • Data from Local System
  • Application Layer Protocol
  • Steal Web Session Cookie
  • Unsecured Credentials
  • Archive Collected Data
  • System Information Discovery
  • File and Directory Discovery
  • JIT compiler hijacking via module initializer
  • Dynamic HTTP header randomization
  • Listed/unlisted version rotation

Threat actors named here

  • bmrxntfj
  • Lumma
  • Quantum
  • AgentRacoon
  • ArrowRAT

Also named here

  • T1195.002
  • T1027
  • T1005
  • T1071.001
  • T1552.001
  • T1082
  • T1083