Skip to content

Response, New York. Noah Park: Check Point Patches Actively Exploited Management Server Path Traversal. Detection, Dallas. Ava Okello: Report Finds Nearly Half of Deployed Detections Need Attention Before SOCs Can Trust Them.

SOCtember

Always First. Fast SOC News.

Google search results for chocolatey install windows, with a red box around a result for Installing Chocolatey that Zscaler highlighted in its research on the campaign.
Screenshot: Zscaler ThreatLabz, search results for "chocolatey install windows" in the Armorsteal campaign, Oct 22, 2026 (fair use).

Detection

Zscaler Says Poisoned Search Results for Chocolatey and Microsoft Activation Scripts Led to Lookalike Sites Whose Install Commands Planted Armorsteal, a Python Stealer That Runs Only Tasks Its Operator Has Signed

Zscaler Threat Hunting says the fake choclatey[.]org and massgravel[.]net pages handed searchers a PowerShell install line that dropped a Pyarmor-protected Python kit into a folder dressed up as a Windows system directory. The kit logs keystrokes, swaps copied wallet addresses, pulls browser cookies over the Chrome debugging port and takes SSH keys. The scheduled tasks, URL paths and domains to hunt.

Ava Okello, DetectionLondon5 min read

LONDON - Administrators who searched for the one-line command that installs Chocolatey, the Windows package manager, were the target of a campaign that handed them a working install command with malware attached, according to research Zscaler published Thursday.

Zscaler's Threat Hunting team said it found the SEO poisoning campaign in September 2026. Two lookalike sites, choclatey[.]org and massgravel[.]net, impersonated Chocolatey and the Microsoft Activation Scripts project, also known as Massgrave, and displayed a PowerShell command that downloaded and ran the installer for a Python-based malware family Zscaler tracks as Armorsteal. On the Chocolatey lure, the malicious install.ps1 script also runs the legitimate Chocolatey installer, "so Chocolatey appears to function as expected," Zscaler wrote.

The fake Massgrave site went down on Sept. 25 and the fake Chocolatey site around Oct. 1, Zscaler said. The command-and-control servers kept moving after that.

What the install command leaves behind

Both installer variants request elevated privileges, hide the PowerShell console window and download a ZIP archive to C:\Windows\SystemHealth\Update\, a path chosen to look like a Windows system directory. The archive carries a Python 3.11 runtime, Pyarmor runtime files and the Armorsteal scripts. Two scheduled tasks keep it alive: SysCheck2 launches the remote access module at user logon with the highest privileges available, and SysCheckX launches it as SYSTEM at boot after a 45-second delay.

Zscaler screenshot of the fake Chocolatey installation page at choclatey.org, with the address bar boxed in red and a highlighted PowerShell install command.
Screenshot: Zscaler ThreatLabz, the fake Chocolatey site that served the Armorsteal installer, Oct 22, 2026 (fair use).

The scripts are protected with a trial version of Pyarmor 9.1.7, which encrypts Python bytecode and string constants. The remote access module, SysMon.py, also looks up its own public address at ipinfo[.]io. If the organization name matches a cloud provider such as Google, Amazon, Microsoft or Azure, it shows a fake "Memory is insufficient" message and exits, which can keep it from running in cloud-based analysis sandboxes.

Signed tasks, then surveillance and theft

SysMon.py fingerprints the machine, builds an identifier from the motherboard serial number and checks a hardcoded list of four C2 domains over HTTPS. It polls every 60 seconds for two kinds of work: tasks for one victim and tasks shared across every infected system. Each task is Python code that must pass verification against an embedded RSA-2048 public key before it runs in memory, and two version files in the working directory, onetime_version.txt and global_version.txt, stop old tasks from running twice. Global tasks can also replace SysMon.py itself, which lets the operator change the C2 list.

The second component, basrq.py, runs in its own bundled interpreter. It logs keystrokes alongside the active window title, checks the clipboard every 0.5 seconds and replaces copied wallet addresses with the attacker's for Bitcoin, Litecoin, Monero, Ethereum, TRON, XRP, Dogecoin, TON and Solana. It takes screenshots when configured keywords appear and displays fake transaction notifications impersonating Exodus, MetaMask and Phantom.

Zscaler screenshot of the fake Microsoft Activation Scripts site at massgravel.net, showing a PowerShell method labeled recommended.
Screenshot: Zscaler ThreatLabz, the fake Massgrave site that delivered the same malware, Oct 22, 2026 (fair use).

The third component, got.py, is the stealer. Zscaler said it steals and validates Discord tokens from 22 Discord client variants, collects data from 21 browser wallet extensions and desktop wallet applications, searches drives A: through Z: for BIP39 seed phrases and extracts browser cookies through the Chrome DevTools Protocol on port 9222. For saved passwords it downloads the public chrome-decryptor tool from the Chrome App-Bound Encryption Decryption project. It also goes after KeePass, 1Password, RoboForm, Password Safe, Enpass, Bitwarden and Dashlane data, SSH keys and Steam sessions.

Infrastructure that moved mid-investigation

Shared components and the RSA-2048 task-signing key tie both lures to one operation, Zscaler said. The primary C2 domain, workerstats[.]net, was registered on Jan. 28, 2026, and the two lure domains on Aug. 30 and Sept. 1. In early September the Chocolatey lure was hosted at 209.99.186.187 and workerstats[.]net sat behind Cloudflare. In mid-September both lures moved to 82.153.135.80, hosted by AKILE LTD in Britain, and the C2 moved to 186.2.175.183 behind DDoS-Guard name servers. By early October workerstats[.]net was unavailable, the operator was using pymons[.]is and the previously dormant datamons[.]org, and module downloads required a token in the URL plus a matching X-Verify header.

Zscaler table of Armorsteal lure and command-and-control domains with purpose, registration date and registrar, from workerstats.net registered January 28, 2026 to niceer.net registered September 1, 2026.
Screenshot: Zscaler ThreatLabz, Armorsteal lure and C2 domain registrations, Oct 22, 2026 (fair use).

What to hunt

  • Scheduled tasks named SysCheck2 and SysCheckX, and any files under C:\Windows\SystemHealth\Update\, including onetime_version.txt and global_version.txt.
  • PowerShell logs showing downloads from choclatey[.]org, community[.]choclatey[.]org or massgravel[.]net. Anyone who pasted an install line from search results in September is the first person to ask.
  • Outbound HTTPS to the paths /receive_infof, /get-global, /black-watch/ and /infame/receive/ where a proxy or TLS inspection exposes URL paths. Zscaler's sample check-in request carries the user agent python-requests/2.31.0.
  • Browser processes started with --remote-debugging-port=9222.
  • Microsoft Defender exclusions, particularly any covering C:\Windows. Zscaler recommends removing unauthorized ones.
  • Block the lure and C2 domains choclatey[.]org, massgravel[.]net, workerstats[.]net, pymons[.]is, datamons[.]org, niceer[.]net and supertrap[.]net, and the addresses 82.153.135.80, 186.2.175.183, 186.2.163.185, 190.115.31.69 and 209.99.186.187.
  • Zscaler's MDR analytics for this threat are WIN-CONHOST-HEADLESS-CMD, WIN-SCHTASKS-CREATE-SHELL and WIN-PYTHON-CHROMIUM-HEADLESS. Its threat names are PS.Dropper.Armorsteal and Python.PWS.Armorsteal.

The lesson is older than this campaign. Install commands copied from a search result run with whatever privileges the person pasting them holds, and this one asked for administrator rights. Check the domain before the command.

Sources:


Ava Okello covers detection engineering, EDR telemetry and SOC hunting for SOCtember from London.

Related stories

Detection desk