Hồ sơ Jscrambler 8.14.0: Gói npm bị cài mã đánh cắp dữ liệu ngay trong bước cài đặt

Phiên bản 8.14.0 của gói npm jscrambler đã bị chèn mã độc và có thể chạy trình đánh cắp dữ liệu ngay khi quá trình cài đặt bắt đầu. Sự cố được The Hacker News ghi nhận ngày 11/07/2026, sau khi Socket phát hiện bản phát hành bất thường chỉ vài phút sau khi nó xuất hiện trên npm.

Vụ việc đáng chú ý vì Jscrambler là công cụ thường được dùng trong môi trường phát triển và CI/CD. Đây là nơi tập trung nhiều khóa truy cập đám mây, token triển khai, thông tin đăng nhập kho mã nguồn và cấu hình công cụ lập trình AI. Với một gói bị chiếm quyền, rủi ro không chỉ nằm ở máy cá nhân của lập trình viên mà còn lan tới toàn bộ chuỗi cung ứng phần mềm.

Lập trình viên làm việc với mã nguồn và chuỗi cung ứng phần mềm
Ảnh minh họa môi trường phát triển phần mềm, nơi các gói npm thường được cài đặt tự động.

Diễn biến theo dòng thời gian

Theo phân tích được công bố, phiên bản 8.14.0 được đưa lên npm ngày 11/07/2026. Chỉ khoảng sáu phút sau khi phát hành, Socket đã gắn cờ phiên bản này vì có hành vi nguy hiểm. Điểm bất thường nằm ở hook preinstall, tức đoạn lệnh tự chạy trước khi gói được cài đặt hoàn tất.

So với phiên bản 8.13.0 trước đó, gói 8.14.0 xuất hiện thêm hai tệp trong thư mục dist/: setup.js and intro.js. Tệp setup.js đóng vai trò bộ nạp, còn intro.js thực chất không phải JavaScript thông thường mà là vùng chứa khoảng 7,8 MB, bao gồm các binary gốc được nén cho Windows, macOS và Linux.

Khi quá trình cài đặt diễn ra, setup.js xác định hệ điều hành của máy chủ, ghi binary phù hợp vào thư mục tạm với tên ngẫu nhiên, cấp quyền thực thi và khởi chạy tiến trình ở chế độ tách rời. Điều này khiến mã độc có cơ hội hoạt động trong bối cảnh quyền của người dùng hoặc hệ thống CI đang chạy lệnh cài đặt.

Điểm bất thường trong quy trình phát hành

StepSecurity và SafeDep cho biết các tệp độc hại có trong gói đã phát hành trên npm nhưng không xuất hiện tương ứng trong mã nguồn công khai của dự án. Không có commit, tag hoặc pull request phù hợp cho bản 8.14.0 trong kho GitHub, trong khi tag mới nhất vẫn là 8.13.0.

Điều này cho thấy bản phát hành đã được đẩy trực tiếp lên npm bằng một tài khoản bảo trì hợp lệ, hoặc thông qua một quy trình build/phát hành đã bị xâm nhập. Tại thời điểm nguồn tin công bố, chưa có kết luận chắc chắn giữa hai khả năng: tài khoản npm bị chiếm quyền hay pipeline phát hành bị kiểm soát.

Mã độc nhắm vào bí mật của lập trình viên

The Hacker News dẫn phân tích của Socket cho biết payload là một infostealer viết bằng Rust, có bản dựng cho cả ba hệ điều hành phổ biến. Mục tiêu thu thập bao gồm thông tin xác thực AWS, Azure và Google Cloud, các endpoint metadata thường xuất hiện trong CI runner, ví tiền điện tử như MetaMask, Phantom và Exodus, kho mật khẩu Bitwarden, mật khẩu và cookie trình duyệt, cùng phiên đăng nhập Discord, Slack, Telegram và Steam.

Một điểm mới đáng chú ý là mã độc còn tìm cấu hình của các công cụ lập trình AI như Claude Desktop, Cursor, Windsurf, VS Code và Zed. Trong nhiều môi trường phát triển hiện đại, các tệp cấu hình này có thể chứa API key hoặc thông tin kết nối Model Context Protocol, khiến chúng trở thành mục tiêu giá trị cao.

Năng lực sâu hơn trên Linux và cơ chế tồn tại

Trên Linux, payload được ghi nhận có liên kết với thư viện BPF của kernel và có khả năng nạp chương trình eBPF trực tiếp vào kernel từ bộ nhớ. StepSecurity và SafeDep đều đánh dấu năng lực này, dù chức năng cụ thể của phần eBPF vẫn đang được phân tích. Đây là tín hiệu đáng lo vì nó vượt xa hành vi đọc tệp người dùng thông thường của nhiều infostealer.

Trên Windows và macOS, các bản dựng có kiểm tra chống gỡ lỗi và cơ chế duy trì sau khởi động lại. Windows dùng scheduled task ẩn có thể chạy lại mỗi phút, còn macOS dùng LaunchAgent để tải lại khi người dùng đăng nhập. Một số chi tiết hạ tầng điều khiển được mã hóa trong binary, trong khi StepSecurity ghi nhận kết nối tới hai địa chỉ IP hard-coded và hạ tầng Tor.

Vì sao sự cố này nguy hiểm với chuỗi cung ứng

Jscrambler có khoảng 15.800 lượt tải mỗi tuần, nhỏ hơn nhiều so với các gói npm phổ biến từng bị chiếm quyền. Tuy nhiên, mức độ nguy hiểm không chỉ đo bằng số lượt tải. Với công cụ build-time, chỉ một môi trường CI hoặc máy phát triển có quyền cao bị nhiễm cũng có thể dẫn đến mất token triển khai, khóa đám mây hoặc quyền truy cập kho mã nguồn.

Sự cố này cũng xảy ra ngay sau khi npm 12 bắt đầu tắt mặc định các dependency install script. Trên npm 12, hook như preinstall cần được phê duyệt mới chạy, nhưng các client cũ vẫn có thể thực thi tự động. Điều đó khiến những dự án còn dùng client cũ, lockfile ghim phiên bản 8.14.0 hoặc quy trình build thiếu kiểm soát trở thành nhóm rủi ro cao.

Khuyến nghị cho tổ chức và lập trình viên

Các nhóm đang sử dụng Jscrambler cần kiểm tra ngay lockfile, cache package và log CI/CD để xác định có từng cài phiên bản 8.14.0 hay không. Nếu có, nên coi môi trường đó đã bị lộ bí mật, thu hồi và xoay vòng token, API key, khóa đám mây, thông tin đăng nhập npm, SSH key và credential dùng trong pipeline.

Đội ngũ kỹ thuật nên chuyển sang phiên bản 8.15.0 hoặc ghim lại 8.13.0 nếu cần bản trước sự cố, đồng thời rà soát các tiến trình lạ, scheduled task ẩn trên Windows, LaunchAgent đáng ngờ trên macOS và dấu hiệu nạp eBPF bất thường trên Linux. Với CI/CD, nên chạy build trong môi trường cô lập, giảm quyền mặc định của token và bật chính sách yêu cầu phê duyệt install script khi có thể.

Bài học lớn hơn là chuỗi cung ứng phần mềm hiện đại cần được giám sát như một bề mặt tấn công thực sự. Một bản phát hành hợp lệ về mặt tài khoản vẫn có thể độc hại về mặt nội dung. Do đó, kiểm tra diff package, khóa phiên bản, giám sát hành vi runtime và quản trị nghiêm token phát hành là các lớp phòng vệ không thể bỏ qua.

VNCyberS tổng hợp từ The Hacker News, Socket, StepSecurity và SafeDep

Contact Us

Email: [email protected]
Phone: +84 903260277