Gói npm độc giấu mã trong addon native, --ignore-scripts không cản được
Chiến dịch MALFEX tung biến thể imgdecode, giấu trình nạp mã độc trong file .node dựng sẵn, chạy ngay khi require chứ không cần script cài đặt. Danh sách gói, dấu hiệu nhiễm trên Windows và cách xử lý.
Nhiều người đã quen lời khuyên “cài gói npm thì thêm --ignore-scripts cho an toàn”. Lời khuyên đó vẫn đúng, nhưng không đủ. Chiến dịch MALFEX vừa cho thấy điều này.
Ngày 13/10, SafeDep công bố biến thể mới imgdecode. Mã độc không nằm trong script cài đặt mà nằm trong một addon native dựng sẵn (file .node). Nó chạy ngay khi code của bạn gọi require().
MALFEX là ai
Theo Checkmarx Zero (công bố 5/10), đây là một kẻ duy nhất, hoạt động từ tháng 8/2023:
Đã tung 12 gói, trong đó 8 gói độc, tổng 40.767 lượt tải
Gói nhiều lượt tải nhất là function-flag, với 37.419 lượt
Chỉ nhắm vào Windows
Mã độc gồm Overlord, một RAT cho phép chụp màn hình, ghi phím, điều khiển từ xa, và movinlike, chuyên lấy cắp token Discord, cookie, mật khẩu trình duyệt, Telegram, ví crypto, file .env, .pem, .kdbx
Kẻ này còn ký tên vào mã độc: tài khoản npm malfex..., khóa mã hóa malfexteam2027
Biến thể imgdecode chạy thế nào
Bạn (hoặc một thư viện bạn dùng) require('imgdecode')
Node nạp file dựng sẵn prebuilds/win32-x64/imgdecode.node. Gói này không có binding.gyp, tức là không build từ mã nguồn
Addon tải về một file tên banner.jpg từ GitHub, thực chất là mã độc đã mã hóa
Addon giải mã rồi tiêm vào tiến trình dllhost.exe của Windows cho khó phát hiện
Vì chạy lúc require chứ không phải lúc cài, --ignore-scripts không cản được. Phiên bản 1.0.0 đến 1.0.3 có 929 lượt tải trong khoảng 30/9 đến 12/10. Hacker còn tung thêm imgbundle và runhelper để thay thế khi bị gỡ.
Goi npm doc giau ma trong addon native, --ignore-scripts khong can duoc Chien dich MALFEX tung bien the imgdecode, giau trinh nap ma doc trong file .node dung san, chay ngay khi require chu khong can script cai dat. Danh sach goi, dau hieu nhiem tren Windows va cach xu ly. npm ma doc chuoi cung ung Nhieu nguoi da quen loi khuyen "cai goi npm thi them `--ignore-scripts` cho an toan". Loi khuyen do van dung, nhung **khong du**. Chien dich **MALFEX** vua cho thay dieu nay.
Ngay 13/10, SafeDep cong bo bien the moi **`imgdecode`**. Ma doc khong nam trong script cai dat ma nam trong mot **addon native dung san** (file `.node`). No chay ngay khi code cua ban goi `require()`.

## MALFEX la ai
Theo Checkmarx Zero (cong bo 5/10), day la **mot ke duy nhat**, hoat dong tu thang 8/2023:
- Da tung 12 goi, trong do 8 goi doc, tong **40.767 luot tai**
- Goi nhieu luot tai nhat la `function-flag`, voi 37.419 luot
- Chi nham vao **Windows**
- Ma doc gom **Overlord**, mot RAT cho phep chup man hinh, ghi phim, dieu khien tu xa, va **movinlike**, chuyen lay cap token Discord, cookie, mat khau trinh duyet, Telegram, vi crypto, file `.env`, `.pem`, `.kdbx`
- Ke nay con **ky ten vao ma doc**: tai khoan npm `malfex...`, khoa ma hoa `malfexteam2027`
## Bien the imgdecode chay the nao
1. Ban (hoac mot thu vien ban dung) `require('imgdecode')`
2. Node nap file dung san `prebuilds/win32-x64/imgdecode.node`. Goi nay khong co `binding.gyp`, tuc la khong build tu ma nguon
3. Addon tai ve mot file ten `banner.jpg` tu GitHub, thuc chat la **ma doc da ma hoa**
4. Addon giai ma roi **tiem vao tien trinh `dllhost.exe`** cua Windows cho kho phat hien
Vi chay luc `require` chu khong phai luc cai, **`--ignore-scripts` khong can duoc**. Phien ban 1.0.0 den 1.0.3 co 929 luot tai trong khoang 30/9 den 12/10. Hacker con tung them `imgbundle` va `runhelper` de thay the khi bi go.
## Kiem tra may cua ban
Trong du an:
```bash
npm ls function-flag function-color cdn-img-fetch img-to-native native-runner \
tlxbnhd tldriver mxdriver imgdecode imgbundle runhelper --all
```
Tren Windows, cac dau hieu nhiem gom:
- Thu muc `%LOCALAPPDATA%\ScopeSmart Technologies Inc\`
- Tac vu hen gio ten `\Maiden` hoac `MicrosoftEdgeUpdateService`
- File `%APPDATA%\node.exe`, `%TEMP%\svc_update.exe`, `%APPDATA%\Microsoft\Windows\node_runtime_helper.exe`
- `node.exe` dung lam tien trinh cha cua `dllhost.exe`
- Ket noi ra dia chi `104.234.65.75`
## Neu dinh
- **Coi may Windows do la da bi chiem**, ke ca khi da xoa `node_modules`. Ngat mang may
- Tu **mot may sach**, doi mat khau va token: Discord, trinh duyet, SSH, npm, GitHub, cloud. Dang xuat Telegram o moi thiet bi, chuyen crypto sang vi moi
- Cai lai may neu khong chac da don sach
## Bai hoc
- **Doc ky ten goi truoc khi cai.** Goi it luot tai, ten chung chung kieu "img", "runner", "helper" can them mot lan kiem tra
- **Can than voi goi co file native dung san** ma khong co ma nguon de build
- Dung de AI agent **tu `npm install` goi la** ma ban chua xem qua
---
Ban co hay de y goi minh cai co file `.node` dung san khong? Ke trong [cong dong Vibe Code & Bao Mat](https://www.facebook.com/groups/1867387324580254) nhe.
## Nguon
- [MALFEX Moves Its npm Loader into a Native Windows DLL](https://safedep.io/malfex-imgdecode-npm-native-addon-loader/), SafeDep
- [MALFEX npm Malware Campaign: Three Payloads and an Adversary That Signs Their Work](https://checkmarx.com/zero-post/malfex-npm-malware-campaign-three-payloads-and-an-adversary-that-signs-their-work/), Checkmarx Zero
- [MALFEX: Native Node.js Addons as a Shellcode Loader Path](https://labs.cloudsecurityalliance.org/research/csa-research-note-malfex-npm-native-addon-loader-20261017-cs/), Cloud Security Alliance