CloudSEK finds 85 npm typosquats carrying a command agent; their C2 host also runs a GPU-cryptojacking panel

· Original article ↗

Summary

CloudSEK says one npm account published 85 scoped typosquat packages carrying a command agent that fingerprints hosts and polls a C2 server. The server also hosts a separate GPU-cryptojacking panel; no successful compromise or link between the operations is established.

Key points

  • The npm account prime0 published 85 @prime0 packages in under four minutes, with generated names resembling 29 popular libraries.
  • All 84 packages CloudSEK archived contained the same command-agent code. On installation it sends a host fingerprint to 69.48.229.140; when loaded by a program, it polls the server every 30 seconds for commands and returns their output.
  • The scoped names cannot be installed by simply typing the unscoped typo, but could appear prominently in npm search or editor autocomplete. CloudSEK says it has no evidence that developers found or installed them.
  • The C2 host also runs a separate GPU-cryptojacking panel targeting the vast.ai marketplace. CloudSEK assesses the operations as sharing infrastructure and likely an operator, but says they involve different victims and found no evidence the npm agent supported the GPU operation.
  • Three packages appear in public malicious-package advisories; the other 82 do not. The @prime0 scope has since been removed from the registry.
  • CloudSEK recommends blocking the C2 IP at egress and searching dependency manifests and lockfiles for @prime0. It advises treating installation as host-detail disclosure and a running package as an operator-controlled command channel.

Article Details

Attack Vectors
  • The npm account prime0 published 85 malicious scoped packages whose names imitate 29 popular libraries through one- or two-character edits. All 84 packages archived by CloudSEK contained the same remote command code.
  • The scoped package names were designed to surface through npm search or editor package autocomplete when no matching unscoped package existed. A mistyped unscoped install would instead return a not-found error; actual discovery through search was not established.
  • Installing a package sends a host fingerprint to the C2 server on port 8080. Loading it into a program starts an agent that requests a shell command every 30 seconds, executes it, and returns the output, without targeting conditions, encryption, or authentication.
  • The same C2 host also runs a live GPU-cryptojacking panel targeting the vast.ai marketplace. The article establishes shared infrastructure but does not show the npm implant feeding that operation or demonstrate a successful compromise.
Defensive Notes
  • Block 69.48.229.140 at network egress.
  • Search dependency manifests and lockfiles for references to @prime0.
  • Treat installation of an affected package as disclosure of host details. Treat loading it into a running program or build runner as exposure to an operator-controlled command channel for the duration of that program.
  • Base detection on the shipped code and network sequence rather than disposable, algorithmically generated package names.
  • The scope has been removed from npm. The article reports that only three of the 85 packages appeared in public malicious-package advisories.

Indicators of compromise

TypeIndicatorContext
IPV469[.]48[.]229[.]140C2 host receiving package-install host fingerprints and serving shell commands on port 8080; also hosts a separate GPU-cryptojacking panel.

MITRE ATT&CK

Threat Actors

Products

Related Articles