LinkedIn Take-Home Scam: Hidden Malware
A recent case covered by AISafe was about a job offer from LinkedIn that led to malware distribution. It looked like a normal React/Web3 assignment, but obfuscated scripts were hidden in config files like `tailwind.config.js`, and further stages were pulled down during execution.
What happened
From a recent security analysis post and a GeekNews writeup, this case is closer to a malware-distribution scheme dressed up as a common job assignment. The offer from LinkedIn looked like a normal software engineer hire, and the repository was styled like a React/Web3-based NFT campaign platform. With demo data and screens in place, it's hard to be suspicious at first glance.
Appearance versus real danger
As in the table below, the attacker uses elements developers routinely see to lower their guard. In particular, the key is hiding malicious logic inside config files and the build flow.
| Appearance | Actual content | Warning sign |
|---|---|---|
| Job-assignment repository | An executable project delivered via a private GitHub repo | Gets you to run code given by an outsider immediately |
tailwind.config.js | Obfuscated code that's 30,987 bytes but shows only 97 lines | Abnormal mismatch between config file size and line count |
| Dev-server "problem" | Communicates with an external IP and downloads an extra payload | May be a C2/upload channel, not a simple error |
| Local execution | Signs of targeting SSH keys, browser data, and wallet files | Developer machines hold lots of sensitive data |
What the attack flow revealed
During analysis, an external IP that appeared to be 45.146.252.17 was confirmed, and there were signs that port 7641 was a Socket.IO–based control channel while 7646 and 7649 were used for file uploads. In other words, this wasn't simple prank code but a structure that had remote control and collection in mind.
The key is one thing. Developers have a habit of installing and running a repository right away when they receive one, and the attacker knows that habit. So you should look at package.json, build scripts, config files, and hidden large blocks before the README.
What to apply immediately in practice
When you receive an unfamiliar assignment repo, it's safer to at least follow the sequence below.
cat package.json
grep -n "preinstall\|postinstall\|prepare" package.json
wc -l tailwind.config.js
wc -c tailwind.config.js
If the wc -l and wc -c results differ excessively, or if you see an obfuscated string at the end of a config file, it's right to stop before installing. If possible, open it first in an isolated VM or container, and separating dependency installation with an option like --ignore-scripts also helps.
Conclusion
This case shows that recruiting scams and malware can combine very naturally. Even if it looks like an ordinary assignment on the surface, executable code is executable code. An unfamiliar repository should start from verification, not trust.
References
Related posts
A GitHub Token Left in Docker Build History — Admin Access in 25 Minutes
While auditing inference provider Baseten, the autonomous hacking agent Strix pulled an image from an exposed Harbor registry and, in just 25 minutes, found a GitHub token left behind in the Docker build history. That token had been valid for over three years and carried admin privileges. Here's the exposed path and how to defend against it.
Why a firewall alone is not enough for AI agent isolation
Trail of Bits' QEMU/KVM escape experiment with GPT 5.6-Cyber linked 3 zero-days into a host path after ~12 hours of autonomous search. Firecracker resisted, showing VM isolation is insufficient alone.
Jev Cut Code Review Cost 45×. What About Accuracy?

A benchmark that puts TypeSafe's System One model Jev on the same Python code-review task as Gemini 3.8 Flash and Claude Fable 5.1, comparing cost, speed, accuracy, and consistency. Jev saves 45–274× on cost and responds 4–5× faster, but takes a small hit at 98% accuracy.
Written by AI from public sources; numbers and claims are checked against those sources before publishing.