A recruiter sent a GitHub repo to 'review.' The npm install was the attack
A full-stack developer got a LinkedIn message from a crypto startup with a broken proof-of-concept and a polite ask: check out the deprecated Node modules issue. The whole exploit lived in that instruction.
Running npm install would have been enough. The package's prepare script auto-runs a file that, buried under walls of commented-out tests, fetches and executes whatever a remote server sends back.
He never cloned it locally. He spun up a throwaway VPS, pointed a read-only AI agent at the tree, and it flagged app/test/index.js almost immediately. The thread's verdict on who's behind it was fast and grim: DPRK.
The bait was a single sentence
Roman Imankulov, a full-stack Python developer, wrote up the encounter: a recruiter messaged him on LinkedIn about a lead-engineer role at a small crypto startup, described a broken proof-of-concept, and sent over a public GitHub repo with one specific request — "check out the deprecated Node modules issue."
That phrasing was the entire attack. The payload sat in app/test/index.js, buried between walls of commented-out tests. The package.json prepare script runs automatically after npm install and executes node app/index.js, which loads the test file. From there the code assembles a URL from string fragments — rest-icon-handler.store/icons/77 — and, in Imankulov's words, "runs anything the server sends back to your machine." To trigger it, the victim only had to install dependencies. "Check out the deprecated Node modules issue" was the nudge to do exactly that.
Why he never ran it on his own laptop
Instead of cloning the repo to his machine, Imankulov treated it as live ordnance: a throwaway VPS, plus Pi, an AI agent with read-only file access, told to look the code over. The agent "stopped almost immediately at app/test/index.js." The deception ran deeper than the code, too — the recruiter's LinkedIn profile had been cloned from a real arts journalist, and the repo's commit history was falsely attributed to an actual developer who later confirmed he'd never touched it.
The thread names a suspect — and a motive
HN's security-minded readers recognized the genre instantly.
"This is very likely Lazarus Group - specifically Famous Chollima aka the DPRK" — a commenter who'd seen the pattern
The more useful contribution was on why developers specifically. One of the thread's highest-reputation accounts laid out the logic: engineers are targeted "on the assumption they may have legit credentials lying around from other employers or for public open source projects… towards obtaining commits" — a supply-chain foothold, not just a single machine. Another reader pushed on a sharper detail: the operator seemed to understand the implementation at full-stack depth, which reads less like a spray-and-pray campaign and more like targeting.
A cybersecurity professional confirmed it's now routine: malicious repos to clone, fake call links that prompt for "driver" downloads. "The only way around it is to be hyper-vigilant if anyone asks you to run any untrusted code on your computer." And the timing isn't an accident — as one engineer noted, a flooded job market is exactly the soil these scams grow in.
The footgun is npm install itself
Strip away the spy-novel attribution and a plainer lesson remains: the default behavior of a package manager is to execute code on install, and "review this repo" is now a credible phishing pretext for a whole profession. You don't have to run the project. You have to run npm install. The fix is boring and effective — --ignore-scripts, a disposable VM, never installing a stranger's dependencies on a machine that holds your keys. The interview was the exploit.
Get breakdowns like this every day
The top Hacker News stories, unpacked — by email, Telegram, or RSS.
Iroh 1.0 wants you to dial a public key instead of an IP — 200M endpoints in a month
Iroh's pitch is that a device's address should be its cryptographic key, which stays the same as it roams between networks. The 1.0 release locks the wire protocol. The top thread complaint: the landing page never says what it is.