I've been in crypto for over 10 years and I’ve Never been hacked. Perfect OpSec record.
Yesterday, my wallet was drained by a malicious @cursor_ai extension for the first time.
If it can happen to me, it can happen to you. Here’s a full breakdown. 🧵👇
1/ Background: I'm obsessive about security. Hardware wallets, segregated hot wallets, unique passwords, 2FA everything.
In 10+ years, I have never lost a single wei to hackers.
Then I rushed to ship a contract last week.
2/ The Attack Vector "contractshark.solidity-lang" extension in Cursor/VS Code.
Looked legitimate:
- Professional icon
- Proper description
- 54,000+ downloads
- From Open VSX (Cursor's default registry)
- Publisher "contractshark" seemed reasonable
3/ What ACTUALLY Happened:
Aug 7, 11:02 - Installed extension
Aug 7, 11:03 - Opened my project
Aug 7, 11:05 - Extension silently read my .env file
Aug 7, 11:06 - Sent my private key to attacker's server
Aug 10 - Wallet drained
3 days of access.
4/ The Damage: Only lost a few hundred $ in ETH because I follow strict practices:
- Hot wallets for testing only
- Small amounts
- Segregated by project
- Main funds in hardware wallets
Without these practices, I'd be posting a very different thread.
5/ How I Discovered It:
- Wallet drained notification
- Checked Cursor logs
- Found installation record
- Looked into all my extensions
- Found Kaspersky/BleepingComputer reports
- Part of $500K+ theft campaign
Step 2: Search for extension
grep -r "contractshark" [log_directory]
Step 3: Check state database for trusted publishers
7/ Why This Attack Works:
- Targets developers' weakest moment (rushing to ship)
- Exploits trust in official registries
- No OS specific malware needed (pure JavaScript)
- Works on Mac/Linux/Windows
- Silent execution, no indicators
8/ Red Flags I Missed:
❌ Publisher "contractshark" vs legitimate "juanblanco"
❌ No GitHub repository linked
❌ High downloads but no reviews
❌ Published recently (July 2025)
❌ Typosquatting common extensions
Rush to ship = ignored instincts
9/ CRITICAL OpSec Rules (learned the hard way):
NEVER:
- Store private keys in .env files
- Trust download counts alone
- Install extensions while rushing
- Use hot wallets for anything valuable
ALWAYS:
- Verify publisher carefully (check for l vs I)
- Check GitHub repo
- Use hardware wallets
10/ My New Development Setup:
1. Separate VM for smart contract work 2. Hardware wallet only (no hot wallets, period) 3. Secrets in encrypted vaults (1Password CLI) 4. No .env files with keys, ever 5. Extension whitelist only
11/ For Cursor/VS Code Users:
Immediately run:
# List all extensions
code --list-extensions
# Check for contractshark
ls ~/.cursor/extensions | grep -i contract
# Review trusted publishers
sqlite3 ~/Library/Application\
Support/Cursor/User/globalStorage/state.vscdb \
"SELECT value FROM ItemTable WHERE key='extensions.trustedPublishers'"
12/ If You're Compromised:
IMMEDIATELY: 1. Rotate ALL keys in the project 2. Check Etherscan for unauthorized txns 3. Revoke all token approvals 4. Generate new wallets 5. Document everything for taxes/insurance 6. Contact @_SEAL_Org
13/ The Attackers' Full List (AVOID):
- contractshark.solidity-lang
- juanbIanco.solidity (capital I)
- Theme.darcula-dark
- "solsafe" npm package
- Any Solidity extension with 50K+ downloads but <100 reviews
14/ Why I'm Sharing This:
Pride hurt? Yes.
Embarrassed? Absolutely.
But if one dev avoids this because of my thread, it's worth it.
We need to normalize discussing failures. Security through obscurity doesn't work.
15/ The Hard Truth:
This wasn't a sophisticated hack. It was a supply chain attack that exploited developer trust.
I had impeccable hygiene and still got got because I was:
- Tired
- Rushing
- Trusting
That's all it takes. One moment of letting your guard down.
16/ Action Items for the Community:
1. Audit your extensions NOW 2. Move keys out of .env files TODAY 3. Implement hardware wallet only policy 4. Share this thread 5. Report suspicious extensions
We're all targets. Act accordingly.
17/ Final Thoughts:
Lost a couple hundred $. Learned a lesson worth millions.
Good OpSec saved me from disaster. The segregation, the minimal hot wallet funds, and the paranoia all paid off.
I still got hit and that's the wake up call we all need.
Stay safe, anon. 🫡
/end
PS: contractshark is still in Cursor's trusted publishers for thousands of users.
🚨 I was just targeted in a sophisticated phishing attempt that almost got me.
But I got the scammer on a live call (video recording below), strung him along, and trolled him with Kim Jong Un gay porn while dissecting his $3k/month malware kit.
Buckle up, this gets wild. 🧵👇
2/21
It all started with a Twitter DM to "Join our podcast!"
The attacker (@0xMauriceWang) posed as someone from @theempirepod. Looked legit after a brief skim so I agreed. Then came an email from studio@theempirepodcast.com with a @StreamYard link. Text said streamyard.com but hyperlinked to streamyard.org.
See the trap?
@0xMauriceWang @theempirepod 3/21
The fake site showed "error joining" page. "Download desktop app to continue!" I told him I couldn't install on my company machine. Company policy. He pushed HARD. "Just this once!" "It's safe!" "We need you on the show!" Even sent a video tutorial. Red flags everywhere.
SECURITY THREAD: Your .env file WILL get you drained (here's how to not be next) 🧵 👇
Private keys in .env files will get you rekt. It's not if, but when. You're one extension away from $0.
The time between my PK leak to drain: 27 minutes.
2/ .env is PLAINTEXT. Your cat can read it. So can any process on your machine. That helpful AI coding assistant? It's reading your .env. That new Solidity formatter with 50k downloads? It's reading your .env.
3/ The attack that hit me: 54,000 devs installed it. It specifically hunted for .env files with `PRIVATE_KEY=` patterns. By the time security firms found it, $500k+ was gone. The extension is removed but YOUR cached version might still have it.
🚨 UPDATE: Full Post-Mortem On Cursor Security Incident
In yesterday’s thread I explained how I got drained after installing a malicious extension in @cursor_ai.
This is the deeper dive into what I found, what I did, and how you can avoid it.
🧵 👇
1/ This isn't just about Cursor and it’s not a PSA about vibe coding. This is about IDE extensions and it affects everyone who uses one. Also, think it won’t affect you because you use Vim/Neovim plugins? You’re wrong. They can also call ext servers to execute arbitrary code.
2/ VS Code, Cursor, or any IDE with extensions ---- you're all at risk! Whether it's Microsoft's Marketplace or Open VSX, malicious extensions get through. They run with YOUR permissions. Registry security is just the first failure point, not the only one. Open VSX has weaker verification, making it the primary vector here.
Ethereum is bleeding value to L2s. Rollups extract fees, MEV, and liquidity while ETH stakers get left behind. If this keeps up, Ethereum becomes a dumb security layer while L2s print money. Does this sound like a decent model for fixing it? 🧵👇
2/ Rollups extract fees, MEV, and liquidity while ETH stakers get left behind. If this keeps up, Ethereum becomes a dumb security layer while L2s print money.
3/ L2s don’t need to use ETH as gas, but they do need to pay for Ethereum’s security. Right now, they pay almost nothing. That needs to change. Ethereum isn’t a free lunch. L2s should be paying rent.