Phiên bản jscrambler 8.14.0 trên npm bị tấn công, cài đặt mã độc đánh cắp thông tin viết bằng Rust

Phiên bản 8.14.0 của gói npm jscrambler đã đi kèm với một preinstall hook độc hại, âm thầm tải và thực thi một chương trình đánh cắp thông tin (infostealer) trong quá trình cài đặt cho Windows, macOS và Linux. Được phát hành vào ngày 11 tháng 7 năm 2026, mã độc này không cần import mà chỉ cần cài đặt là sẽ tự kích hoạt. Socket đã cảnh báo về bản phát hành này chỉ sáu phút sau khi nó được đăng tải.
Mã độc trong gói npm jscrambler

Phiên bản 8.14.0 của gói npm jscrambler đã được phát hành kèm theo một preinstall hook độc hại. Hook này sẽ âm thầm tải xuống và thực thi một infostealer nguyên bản (native) trong quá trình cài đặt, với các bản dựng riêng biệt cho Windows, macOS và Linux.

Được công bố vào ngày 11 tháng 7 năm 2026, mã độc này không cần thực hiện lệnh import hay gọi CLI. Chỉ cần cài đặt phiên bản 8.14.0 là đủ để kích hoạt nó.

Socket đã phát hiện và gắn cờ cảnh báo bản phát hành này chỉ sáu phút sau khi nó được đăng tải. Nếu bạn hoặc hệ thống build của bạn đã tải gói này trong khoảng thời gian đó, payload đã được thực thi với toàn quyền truy cập mà quy trình cài đặt của bạn sở hữu.

Hook này kích hoạt trước khi gói được thiết lập hoàn tất và không hề xuất hiện trong phiên bản 8.13.0 trước đó. Phân tích sự khác biệt (diff) của gói cho thấy hai tệp mới trong thư mục dist/: setup.js (một loader nhỏ) và intro.js. Mặc dù có tên là JavaScript, nhưng intro.js thực chất là một container nặng khoảng 7,8 MB chứa ba tệp thực thi native được nén bằng gzip cho Linux, Windows và macOS.

Khi cài đặt, setup.js sẽ chọn tệp thực thi phù hợp với hệ điều hành máy chủ, ghi nó dưới một tên ngẫu nhiên vào thư mục tạm (temp) của hệ thống, cấp quyền thực thi và khởi chạy nó ở chế độ tách biệt (detached) với đầu ra bị ẩn đi.

Các tệp bổ sung này nằm trong gói được xuất bản nhưng không xuất hiện trong mã nguồn công khai của jscrambler. StepSecuritySafeDep, sau khi phân tích bản phát hành, đều báo cáo rằng không có commit, tag hay pull request nào tương ứng với phiên bản 8.14.0 trong kho lưu trữ GitHub (nơi tag mới nhất vẫn là 8.13.0).

Phiên bản này đã được đẩy trực tiếp lên npm thông qua một tài khoản maintainer hợp lệ, bỏ qua quy trình phát hành thông thường của dự án. Điều này cho thấy tài khoản npm hoặc quy trình build pipeline đã bị xâm nhập, mặc dù nguyên nhân cụ thể vẫn chưa được xác định.

Chức năng của các tệp thực thi hiện đã rõ ràng. Socket xác định đây là một infostealer viết bằng Rust, được xây dựng cho cả ba nền tảng để quét thông tin bí mật trên máy của nhà phát triển và gửi chúng đến máy chủ của kẻ tấn công qua TLS.

Danh sách mục tiêu rất rộng và nhắm thẳng vào các nhà phát triển. Nó đánh cắp thông tin xác thực đám mây từ AWS, AzureGoogle Cloud, bao gồm cả các metadata endpoints mà CI runners sử dụng. Nó cũng đọc ví tiền điện tử và mã bảo mật (seed phrases) từ MetaMask, Phantom, Exodus và kho lưu trữ của trình quản lý mật khẩu Bitwarden.

Ngoài ra, mã độc còn thu thập mật khẩu và cookie được lưu trong trình duyệt, cùng với các phiên làm việc (sessions) của Discord, Slack, TelegramSteam. Đặc biệt, nó nhắm đến một mục tiêu mới: các tệp cấu hình của các công cụ lập trình AI bao gồm Claude Desktop, Cursor, Windsurf, VS CodeZed – nơi lưu trữ các API keys và thông tin xác thực máy chủ Model Context Protocol (MCP).

Các tệp thực thi này còn vượt xa cả hành vi trộm cắp thông thường. Trên Linux, payload liên kết với thư viện BPF của nhân hệ điều hành và có thể tải một chương trình eBPF vào nhân từ bộ nhớ, tạo một bàn đạp vững chắc trong nhân thay vì chỉ truy cập tệp ở cấp người dùng. Trên Windows và macOS, mã độc được bổ sung các kiểm tra chống gỡ lỗi (anti-debugging) và thiết lập cơ chế duy trì sự hiện diện (persistence) để tồn tại sau khi khởi động lại: một tác vụ ẩn trong Windows Scheduled Task chạy mỗi phút và một macOS LaunchAgent tải lại khi đăng nhập.

Cấu trúc hạ tầng Tor của kẻ tấn công
Nguồn: Step Security

Thông tin về máy chủ điều khiển (C2) được mã hóa trong tệp thực thi. Giám sát thời gian thực của StepSecurity đã phát hiện mã độc kết nối với hai địa chỉ IP cứng và cơ sở hạ tầng Tor.

jscrambler là một công cụ build-time, thường được cài đặt như một dependency phát triển hoặc chạy từ CI, nó sẽ đưa infostealer vào đúng môi trường chứa các khóa đám mây, token triển khai và mã nguồn mà quy trình CI có thể tiếp cận.

Sự việc này nằm trong chuỗi các cuộc tấn công chuỗi cung ứng (supply-chain attacks) trên npm kể từ cuối năm 2025, bao gồm worm Shai-Hulud hay các vụ chiếm đoạt gói chalkdebug qua tài khoản maintainer bị lừa đảo (phished).

Đáng chú ý, vụ việc xảy ra ngay sau khi npm 12 được phát hành vào ngày 8 tháng 7, với tính năng tắt các tập lệnh cài đặt dependency theo mặc định. Trên npm 12, một preinstall hook như thế này sẽ không chạy trừ khi được người dùng phê duyệt. Tuy nhiên, các phiên bản cũ hơn vẫn tự động thực thi chúng.

Phiên bản 8.15.0 đã được phát hành để thay thế, không chứa mã độc. Tuy nhiên, phiên bản lỗi 8.14.0 vẫn còn trên npm, do đó bất kỳ tệp lockfile nào cố định phiên bản này vẫn sẽ tiếp tục cài đặt mã độc.

Cần làm gì ngay bây giờ

  • Gỡ bỏ phiên bản 8.14.0: Cập nhật lên 8.15.0 hoặc quay lại bản 8.13.0 ổn định. Xóa sạch [email protected] khỏi lockfiles và bộ nhớ đệm (cache).
  • Kiểm tra xem bạn đã cài đặt bản 8.14.0 chưa: Kiểm tra nhật ký trình quản lý gói và bản ghi CI cho bất kỳ lần chạy nào của dist/setup.js từ ngày 11 tháng 7. Trên Windows, kiểm tra Task Scheduler; trên macOS, kiểm tra ~/Library/LaunchAgents để tìm các tệp lạ.
  • Xử lý nếu đã bị nhiễm: Coi như mọi thông tin bí mật đã bị đánh cắp. Đổi lại các khóa đám mây (cloud keys), token npm và GitHub, API keys của các công cụ AI; thu hồi các phiên làm việc Discord, Slack, trình duyệt và Bitwarden; chuyển tiền điện tử ra khỏi các ví trên máy bị ảnh hưởng. Chặn hai địa chỉ IP C2 được liệt kê dưới đây.

Dấu hiệu bị xâm nhập (IoC)

Gói độc hại: [email protected]. Mã băm SHA-256 của các tệp bổ sung:

  • dist/setup.js: a742de963f14a92d24ebcbc7b44ac867e23a20d31d1b0094a13a4f83287f4e60
  • dist/intro.js: a41a523ef9517aab37ed6eea0ec881821bdcb7aefcb5c5f603adc7907f868c86
  • Linux payload: fbbcf4d8f98168f78f5c0c47a9ae56d59ec8ac84a7c9ca6b797fedfb8d62d2bd
  • Windows payload: b7ca95d1b23c8e67416a25cedf741de0917c2096bbc9d24649eea7853d054903
  • macOS payload: c8fd47d36bdf7c825378593ab82ed8c24d1dc52e26b507812393e24e1d5201fd

Địa chỉ mạng độc hại:

  • C2 IP: 37.27.122[.]124
  • C2 IP: 57.128.246[.]79
  • Tor infrastructure: check.torproject[.]org, archive.torproject[.]org