3 phút đọc

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().

Mô phỏng: require gói imgdecode nạp file .node dựng sẵn, tải ảnh banner.jpg chứa mã độc mã hóa, giải mã rồi tiêm vào tiến trình dllhost.exe

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

  1. Bạn (hoặc một thư viện bạn dùng) require('imgdecode')
  2. 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
  3. Addon tải về một file tên banner.jpg từ GitHub, thực chất là mã độc đã mã hóa
  4. 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ỡ.

Kiểm tra máy của bạn

Trong dự án:

npm ls function-flag function-color cdn-img-fetch img-to-native native-runner \
  tlxbnhd tldriver mxdriver imgdecode imgbundle runhelper --all

Trên Windows, các dấu hiệu nhiễm gồm:

  • Thư mục %LOCALAPPDATA%\ScopeSmart Technologies Inc\
  • Tác vụ hẹn giờ tên \Maiden hoặc MicrosoftEdgeUpdateService
  • File %APPDATA%\node.exe, %TEMP%\svc_update.exe, %APPDATA%\Microsoft\Windows\node_runtime_helper.exe
  • node.exe đứng làm tiến trình cha của dllhost.exe
  • Kết nối ra địa chỉ 104.234.65.75

Nếu dính

  • Coi máy Windows đó là đã bị chiếm, kể cả khi đã xóa node_modules. Ngắt mạng máy
  • Từ một máy sạch, đổi mật khẩu và token: Discord, trình duyệt, SSH, npm, GitHub, cloud. Đăng xuất Telegram ở mọi thiết bị, chuyển crypto sang ví mới
  • Cài lại máy nếu không chắc đã dọn sạch

Bài học

  • Đọc kỹ tên gói trước khi cài. Gói ít lượt tải, tên chung chung kiểu “img”, “runner”, “helper” cần thêm một lần kiểm tra
  • Cẩn thận với gói có file native dựng sẵn mà không có mã nguồn để build
  • Đừng để AI agent tự npm install gói lạ mà bạn chưa xem qua

Bạn có hay để ý gói mình cài có file .node dựng sẵn không? Kể trong cộng đồng Vibe Code & Bảo Mật nhé.

Nguồn

Chia sẻ lên Facebook

Bình luận

Đang tải bình luận…