Malware News Fake recruiter campaign targets crypto devs

Khushal

Level 11
Thread author
Verified
Top Poster
Well-known
Apr 4, 2024
514
2,639
969

A new branch of a fake job recruitment campaign, dubbed "graphalgo," is targeting developers with a RAT.​



1770886674060.png

The ReversingLabs research team has identified a new branch of a fake recruiter campaign conducted by the North Korean hacking team Lazarus Group. The campaign, which the team named graphalgo, based on the first package included in this campaign in the npm repository, has been active since the beginning of May 2025. It is a coordinated campaign targeting both Javascript and Python developers with cryptocurrency-related fake recruiter tasks.
 
This “fake recruiter task” pattern is a high-success social-engineering technique against developers because it blends a believable pretext (take-home assignment) with code execution (running a project, installing dependencies, running tests/build scripts). If the ReversingLabs write-up is accurate for your case, “graphalgo” is essentially a developer-targeted delivery chain for a RAT via malicious packages / project content.

Why this works (high-level)
  • The attacker doesn’t need to “exploit” anything if they can convince the target to run code (install deps, run a script, open a project in an IDE that runs tasks, etc.).
  • npm/PyPI ecosystems make it easy to hide malicious behavior behind seemingly normal dependency names, install hooks, postinstall scripts, or “helper” modules.
  • Crypto/dev targets are especially valuable because of access to wallets, seed phrases, API keys, signing keys, CI secrets, cloud tokens, etc.

Practical red flags for “recruiter task” projects
  • Pressure/urgency, unusually high pay, or “we need you to run this locally quickly.”
  • A task that requires running a pre-built binary, “evaluation tool,” or obscure scripts rather than reviewing code.
  • Unexpected install/run instructions (e.g., “disable AV,” “turn off Gatekeeper/SmartScreen,” “run as admin,” “temporarily allow firewall”).
  • Suspicious dependency names, very new packages, low/no reputation, or dependencies that don’t fit the project’s purpose.
  • Install scripts that execute shell/PowerShell, fetch remote content, or run obfuscated/minified code for no clear reason.

Safer way to handle untrusted coding tasks (low friction, high payoff)
  • Do NOT run the project on your main workstation.
  • Use an isolated VM (or a dedicated sacrificial machine) with snapshots; revert after review/testing.
  • Block or tightly restrict outbound network access for the VM unless required; many RATs need C2 to become fully functional.
  • Review before executing:
    • Check package.json / lockfiles for weird dependencies and postinstall scripts.
    • For Python, inspect requirements.txt / pyproject.toml and any setup/install hooks.
    • Search the repo for suspicious calls: curl/wget, Invoke-WebRequest, powershell, base64 decode, eval/exec, child_process, os.system/subprocess, etc.
  • If you must install dependencies, prefer tools that can audit known vulns/malicious indicators (they are not perfect, but they help): npm audit, pip-audit (or equivalent), plus a reputable AV/EDR scan of the full extracted folder.

Developer account / secret hygiene (because “RAT” often means credential theft too)
  • Rotate secrets if anything untrusted was executed: Git tokens, cloud keys, CI/CD secrets, npm/PyPI tokens, SSH keys, API keys.
  • Enable phishing-resistant MFA where possible (hardware security key / passkeys).
  • Separate “dev/test” credentials from production; never keep production keys on a general-purpose dev box.
  • Use least-privilege tokens and short-lived credentials whenever possible.

If someone already ran the project
  • Disconnect the machine from the network (containment).
  • Run full scans with reputable security tools (and ideally an offline/second-opinion scan).
  • Assume credential/secret exposure until proven otherwise; rotate credentials from a known-clean device.
  • Check for persistence and tampering (new startup items, scheduled tasks/cron jobs, unusual services, new browser extensions, new SSH authorized_keys, modified shell profiles).
  • For high-confidence cleanup, a wipe/reimage is often the safest endpoint response step after suspected RAT execution.

Sources
 
I’m not a programmer nor part of the crypto world, but it’s still striking how the “recruiter” turns into a disguise for the attack. In the end, it’s not the code that falls, but trust itself. Better to check the goods before letting the merchant in. 🐍🎭🎲
 
  • Like
Reactions: Brownie2019
Technical Analysis & Remediation

MITRE ATT&CK Mapping

Initial Access

T1190 (Exploit Public-Facing Application)
T1566 (Phishing - Spearphishing Link).

Execution
T1059 (Command and Scripting Interpreter) - via package.json scripts.

Persistence
T1543 (Create or Modify System Process).

Exfiltration
T1048 (Exfiltration Over Alternative Protocol).

Attack Vector & Kill Chain

Contact

Threat actors pose as recruiters on social platforms (LinkedIn, etc.), offering high-paying crypto/web3 roles.

The Lure
Candidates are given a "take-home assignment" hosted on a repository that requires installing specific dependencies.

Infection
The dependencies (graphalgo, graphflux, etc.) contain malicious install hooks (e.g., preinstall, postinstall) that execute immediately upon npm install or pip install.

Telemetry & IOCs (Hard Facts)

Malicious npm Packages


graphalgo (Versions: 2.2.8, 2.2.9)

graphflux (Version: 0.0.2)

graphflowx (Versions: 1.0.2, 1.0.3)

Malicious PyPI Package

graphnode (Version: 1.0.1)

Git Commit Hashes (Indicators of Compromise):

2283aefe0d59b37af0ce86465b0e770d0ffc364b

269ec49a563433993cd216ef5dddd0f923de97b7

20c4e927e172a60799c47f71cfaf6b5e82faba64

Payload Behavior
The malware structure typically involves a multi-stage loader. Upon installation, the package script fetches a secondary payload (the RAT) from a C2 server. This RAT is capable of command execution, file system enumeration, and stealing secrets such as:

Cryptocurrency wallet keys.

SSH keys.

Environment variables (AWS/Cloud credentials).

Remediation - THE ENTERPRISE TRACK (NIST SP 800-61r3)

DETECT (DE)

Command

Query SIEM/EDR for execution of npm or pip spawning unusual child processes (e.g., cmd[.]exe, powershell[.]exe, curl, wget) originating from node_modules directories.

Command
Scan all development repositories for package.json or requirements.txt files containing the specific package names listed above (graphalgo, graphflux, graphflowx, graphnode).

RESPOND (RS)

Command

If these packages are found, isolate the developer endpoint immediately. Assume full compromise of credentials and session tokens on that machine.

Command
Credential Rotation: Force rotation of all secrets present on the infected machine (SSH keys, API tokens, Wallet seeds). Do not rotate these from the infected machine itself.

GOVERN (GV)

Command

Enforce a policy that all "take-home" coding tests must be performed in a sandbox environment (e.g., non-persistent VM, GitHub Codespaces) that is completely isolated from production networks and personal assets.

Remediation - THE HOME USER TRACK (Safety Focus)

Priority 1: Containment

Command

If you installed any of the packages listed above, disconnect your computer from the internet immediately. The RAT may still be active.

Priority 2: Asset Protection

Command

Assume your cryptocurrency wallets are compromised. From a different, clean device (like your phone on cellular data), move any remaining funds to a new cold wallet.

Command
Change passwords for your email and exchanges using a clean device.

Priority 3: Persistence Removal

Command

Since the malware establishes deep persistence, the safest course of action is a full system wipe (factory reset). Do not attempt to manually "clean" the files, as Lazarus malware often hides deep in system directories.

Hardening & References

Baseline

Restrict developer workstations from mounting arbitrary external packages without a proxy or vulnerability scan (e.g., using a tool like Sonatype Nexus or Artifactory with firewall rules).

Reference

ReversingLabs (Original Source)
 
  • Like
Reactions: harlan4096