- Một chiêu social engineering đang quét khắp cộng đồng dev: recruiter giả gửi "coding test" trên Bitbucket, chạy lên là mất sạch keychain, ví crypto, password Chrome.
- Microsoft gọi campaign này là Contagious Interview — đã tồn tại từ 2022, 197+ npm package độc, quy mô North Korea state-sponsored.
- Đây là cách nó hoạt động và cách tự bảo vệ.
TL;DR
Một developer vừa chia sẻ trên X chuyện suýt mất sạch tài sản số qua một buổi phỏng vấn "việc làm remote". Kịch bản: recruiter trên LinkedIn → gửi repo "coding test" 30 phút → chạy npm install → script ẩn bên trong quét Keychain, password Chrome, ví crypto rồi upload ra C2 server trong 56 giây. Đây không phải vụ lẻ — đây là Contagious Interview, chiến dịch được Microsoft, Palo Alto Unit42, ReversingLabs theo dõi từ 2022, quy cho nhóm state-sponsored Bắc Triều Tiên (alias Lazarus / Famous Chollima / Void Dokkaebi). Tính đến nay đã có 197+ npm package độc, 31.000+ lượt download.
Chuyện gì đã xảy ra
Nạn nhân nhận được DM từ một "recruiter" tự xưng đại diện cho một công ty blockchain hợp pháp. Họ offer vị trí part-time, gửi kèm một bài coding challenge React/Node.js hosted trên Bitbucket. Repo trông rất chỉn chu — có README sạch, cấu trúc project chuyên nghiệp, deadline 30 phút trước buổi call. Đúng bẫy tâm lý: áp lực thời gian + háo hức việc làm = ít khi đọc kỹ code.
May là victim này cẩn thận, chưa chạy vội mà dùng AI scan trước. Payload nằm trong server/controllers/userController.js dưới dạng mảng byte obfuscate, decode ra URL api.npoint.io/... rồi dùng new Function("require", "...") để nạp remote code với full quyền Node.js. URL đó chỉ sống đúng 24 giờ trước khi bị burn — attacker đốt hạ tầng cực nhanh để né forensics.
Tại sao chiêu này nguy hiểm
Supply-chain attack truyền thống dựa vào typosquat npm — bạn phải gõ sai tên package. Contagious Interview khác: victim tự nguyện clone và chạy code, dưới áp lực deadline, trong môi trường dev thật — nơi có SSH keys, wallet mnemonics, .env file và Keychain đang unlock. Không scanner nào phát hiện được vì repo là private Bitbucket riêng cho từng nạn nhân.
Microsoft Defender Experts ghi nhận biến thể mới còn tinh vi hơn: chỉ cần mở repo trong VS Code và bấm "Trust" ở prompt workspace trust, tasks.json sẽ tự động chạy payload — không cần npm install.
Technical facts
| Chỉ số | Con số thực tế |
|---|---|
| Thời gian exfiltrate đầy đủ | 56 giây |
| Chrome password bị đánh cắp (1 case) | 634 |
| Thời gian sống của C2 URL | ~24 giờ |
| Malicious npm package đã catalogue | 197+ |
| Tổng lượt download package độc | 31.000+ |
| Wave gần nhất (2026) | 35 npm package trong một đợt |
| Campaign bắt đầu | Tháng 12/2022 |
Chúng lấy cắp những gì
- Mnemonic phrase và private key của ví crypto (MetaMask, Phantom, Trust Wallet…)
- Toàn bộ macOS Keychain + Windows Credential Manager
- Password đã lưu của Chrome, Edge, Brave, Firefox
- Database của KeePass, 1Password
- File
.env, API token AWS/GCP/Azure - SSH private key, GPG signing key
- Nội dung clipboard (qua module giám sát clipboard)
Các malware family liên quan
- BeaverTail — JS stealer, nhúng trong npm package, stage đầu
- InvisibleFerret — Python backdoor, remote command execution, stage sau
- OtterCookie — JS modular backdoor (từ 9/2024), check VM, C2 qua socket.io
- FlexibleFerret — biến thể Go/Python, C2 HTTP/TCP mã hoá, persistence qua RUN registry
- Beaconing Agent — biến thể mới (10/2025), thu fingerprint host, chạy payload qua stdin
Cách tự bảo vệ
- Không bao giờ
npm installhoặc mở repo lạ trên máy chính. Dùng GitHub Codespaces, disposable VM, hoặc Docker container. - Tắt VS Code workspace trust auto-execute:
security.workspace.trust.enabled: false. - Đặt mặc định
npm install --ignore-scripts. - Trước khi chạy coding test từ recruiter, grep repo với các pattern đáng ngờ:
new Function,eval, mảng byte base64 dài trong file controller. - Ví crypto tài sản lớn phải lưu trên hardware wallet riêng, không cài MetaMask trên máy dev.
- Verify recruiter qua website công ty chính chủ. Nếu profile LinkedIn mới tạo, ít connection, hối thúc deadline — 99% scam.
Bối cảnh & điều sắp tới
Contagious Interview là campaign có tuổi đời gần 4 năm và đang mở rộng, không thu hẹp. MITRE đã gán ID chính thức G1052. Biến thể 2026 chuyển sang khai thác workspace trust của VS Code và tự phát tán kiểu worm — một repo nhiễm có thể lây cho các dev khác trong team. Dark Reading gọi đây là "npm package factory" vì attacker tạo package mới với tốc độ hàng chục package/tuần.
Nếu bạn là dev làm remote, đặc biệt trong mảng Web3/crypto/AI — hãy giả định mọi recruiter DM ngẫu nhiên đều hostile cho tới khi chứng minh được ngược lại. Một lần "Trust" là đủ để mất sạch.
Nguồn: Microsoft Security Blog, David Dodda firsthand account, ReversingLabs, MITRE ATT&CK G1052, Palo Alto Unit42.
