Investigation Finds AccuraSoftHire Malicious npm Packages Stayed Available for Months

· Original article ↗

Summary

StepSecurity found AccuraSoftHire’s malicious npm packages remained available for up to 211 days and decoded 609 Ethereum-wallet transactions naming eight loader servers. JFrog found no link between AccuraSoftHire and the Binance intrusion.

Key points

  • JFrog described three lures used by the fake company: a take-home coding task, a camera “driver,” and an unpacked browser extension. JFrog could not determine whether the extension path delivered malware.
  • The PolinRider loader can run during a Tailwind CSS build rather than during npm install, so tools that only monitor install scripts may miss it.
  • StepSecurity’s npm registry review found one look-alike package available for 211 days and another for 169 days. Download counts include mirrors and security scanners, so they may overstate real installs.
  • StepSecurity decoded 609 transactions from the wallet used to publish loader server addresses, identifying eight server IPs. The last listed transaction was on October 19, 2026; the article reports no later transactions as of November 13.
  • JFrog found no link between AccuraSoftHire and Binance’s reported intrusion; the article presents them as separate findings.
  • The article recommends using isolated virtual machines for external interview assignments, disabling automatic VS Code tasks, searching developer machines for listed packages and files, and rotating credentials if infection is found.

Article Details

Attack Vectors
  • A fake employer recruited developers through job platforms and asked them to run a take-home assignment on a work computer; malicious code ran when Tailwind built the project CSS.
  • Look-alike npm packages added a loader to legitimate-looking plugin code. The packages remained available for up to 211 days, and npm recorded thousands of downloads for some packages.
  • A fake camera-driver download installed and ran a JavaScript payload in the background.
  • Candidates were directed to load an unpacked browser extension and run a PowerShell script that registered a native messaging helper and scheduled recurring contact with the site; JFrog could not determine whether this path delivered malware.
  • The loader retrieved its server address from Ethereum transactions, downloaded and decoded two stages over port 443, and ran them. PolinRider infections were also reported to steal credentials and spread the loader into other repositories.
Defensive Notes
  • Do not run external interview assignments, drivers, or setup commands on work machines. Use a separate virtual machine without credentials or browser profiles for interviews.
  • Search developer machines for the listed npm packages, `.vscode/tasks.json` files configured with `runOn: folderOpen`, and the `job-new-alerts` extension folder.
  • Disable automatic VS Code tasks, keep Workspace Trust enabled, and open unfamiliar projects in Restricted Mode.
  • Search network logs for the eight listed server IPs and requests to `/0x/cls`, `/0x/ls`, or requests containing the `Sec-V` header.
  • If a machine is suspected of infection, rotate all credentials on it and inspect repositories for loader additions; the article warns that wiping a laptop alone may not prevent reinfection.
  • Use a package cooldown policy, while noting that it would not have blocked the two packages that remained on npm for months.
  • Monitor or restrict unexpected outbound connections from CI builds, including requests to public Ethereum endpoints and plain HTTP connections to IP addresses on port 443.

Indicators of compromise

TypeIndicatorContext
DOMAINaccurasofthire[.]comFake careers site identified by JFrog that also served payload-related resources.
IPV4103[.]179[.]142[.]155Newest server address decoded from the attacker's Ethereum wallet; the analyzed camera payload contacted it.
IPV4166[.]88[.]134[.]62Malware server address decoded from transactions sent by the attacker's Ethereum wallet.
IPV4166[.]88[.]134[.]75Malware server address decoded from transactions sent by the attacker's Ethereum wallet.
IPV4166[.]88[.]73[.]46Malware server address decoded from transactions sent by the attacker's Ethereum wallet.
IPV4193[.]247[.]144[.]38Malware server address decoded from transactions sent by the attacker's Ethereum wallet.
IPV423[.]27[.]13[.]135Malware server address decoded from transactions sent by the attacker's Ethereum wallet.
IPV423[.]27[.]13[.]72Malware server address decoded from a transaction sent by the attacker's Ethereum wallet.
IPV491[.]218[.]183[.]174Malware server address decoded from transactions sent by the attacker's Ethereum wallet.

MITRE ATT&CK

Malware

Vendors

Products

Edgethem run a PowerShell script from the site. That script registers a small helper program that Chrome and Edge are allowed to start (a "native messaging host" named com.accurasoft.jobalerts), and offers a scheduledGoogle ChromeA third page tells candidates to load a Chrome extension by hand: turn on Developer mode, choose "Load unpacked", and pick a folder named job-new-alerts. It then has them run a PowerShell script from the site. ThatHarden-RunnerInfected project built in CI Harden-Runner Flags or blocks unexpected outbound connections from the buildMalicious Files for GitHubLoader added to your repositories Malicious Files for GitHub Scans every file version in git history and names the commit that added a flagged filenpmSome of the poisoned packages stayed on npm for months. Two packages the interview task used were installable for about five and seven months, until npm replaced them on November 12 and 13. npm recorded more than 4,000StepSecurity Dev Machine GuardLook-alike package installed on a laptop Dev Machine Guard: OSS Packages Finds the machines and project folders that have the packageStepSecurity Secure RegistryNewly published malicious package Secure Registry cooldown Blocks package versions published within a set number of daysTailwind CSSis asked to finish a React landing page in ninety minutes. In the version JFrog shows, the project's Tailwind CSS configuration loads eleven plugins. Ten are real. The eleventh, tailwind-custom-forms, is a copy ofVS Codeproject builds, when the candidate runs the "driver" command, or, in other PolinRider infections, when VS Code opens a folder with an auto-run task. Tools that only watch or disable npm install scripts do not see any

Countries

Industries

Related Articles