Lỗ hổng CVE trong chuỗi cung ứng phần mềm đã biến một tiện ích Visual Studio Code phổ biến thành công cụ đánh cắp thông tin đăng nhập, ảnh hưởng trực tiếp đến môi trường phát triển và các bí mật đám mây. Trường hợp của Nx Console cho thấy rủi ro bảo mật không chỉ đến từ mã nguồn ứng dụng, mà còn từ tiện ích mở rộng, kho lưu trữ và cơ chế phát hành.
Lỗ hổng CVE theo chuỗi cung ứng của Nx Console
Tiện ích Nx Console với hơn 2,2 triệu lượt cài đặt đã bị xâm phạm khi kẻ tấn công đưa lên VS Code Marketplace một phiên bản độc hại. Phiên bản 18.95.0 của gói nrwl.angular-console được phát hành bằng thông tin xác thực xuất bản bị đánh cắp.
Vụ việc này được ghi nhận là một lỗ hổng CVE theo nghĩa rộng của chuỗi cung ứng: không phải lỗi bộ nhớ hay RCE truyền thống, mà là xâm nhập trái phép vào quy trình phát hành, dẫn đến mã độc được phân phối qua kênh chính thức. Tham khảo thêm các cảnh báo và dữ liệu liên quan tại NVD.
Cách thức chèn mã độc
Ngay khi lập trình viên mở bất kỳ workspace nào, tiện ích sẽ âm thầm tải về và thực thi một payload 498 KB đã bị làm rối. Payload này được giấu trong một orphan commit trên kho nrwl/nx chính thức, tức một commit không có lịch sử cha và không gắn nhánh rõ ràng.
Đoạn mã độc chỉ tồn tại khoảng 11 phút trước khi bị phát hiện và gỡ bỏ. Tuy ngắn, khoảng thời gian này đủ để tạo ra rủi ro an toàn thông tin lớn đối với các máy phát triển đã cài đặt phiên bản độc hại.
Mã khai thác và cơ chế thực thi
Vecto tấn công được kích hoạt tự động khi workspace được mở, không cần thao tác bổ sung từ người dùng. Mã độc được nhúng vào file main.js đã minify và chỉ nặng 2.777 byte, nhưng vẫn đủ để khởi chạy chuỗi hành vi thu thập dữ liệu.
// Minh họa luồng thực thi ở mức khái niệm
open_workspace();
fetch_obfuscated_payload();
execute_payload();
collect_secrets();
exfiltrate_data();Cơ chế này khiến lỗ hổng CVE theo chuỗi cung ứng trở nên khó phát hiện hơn so với khai thác trực tiếp trên ứng dụng đích, vì mã độc đi qua lớp phân phối đáng tin cậy.
Lỗ hổng CVE và phạm vi đánh cắp thông tin
Payload được mô tả là một credential stealer đầy đủ chức năng, chuyên thu thập token và bí mật từ nhiều hệ sinh thái phát triển. Dữ liệu bị đánh cắp gồm:
- GitHub token và secrets.
- npm token và cấu hình liên quan.
- AWS credentials và metadata.
- HashiCorp Vault token.
- Kubernetes secrets.
- 1Password dữ liệu bí mật.
Đây là một lỗ hổng CVE ảnh hưởng trực tiếp đến chuỗi cung ứng phát triển phần mềm, vì một tiện ích IDE có thể trở thành điểm khởi đầu cho đánh cắp dữ liệu trên nhiều lớp hạ tầng.
Cơ chế exfiltration nhiều kênh
Dữ liệu bị đẩy ra ngoài qua ba kênh độc lập: HTTPS, GitHub API và DNS tunneling. Thiết kế này làm tăng độ bền của luồng exfiltration, vì chỉ cần một kênh hoạt động là thông tin vẫn có thể bị chuyển ra ngoài.
# Các kênh exfiltration được ghi nhận
- HTTPS
- GitHub API
- DNS tunnelingTrong bối cảnh lỗ hổng CVE chuỗi cung ứng, mô hình đa kênh này khiến cơ chế chặn bằng firewall đơn lẻ hoặc rule tĩnh kém hiệu quả hơn.
Thu thập bí mật trên máy lập trình
Payload triển khai 6 bộ thu thập thông tin chạy song song để quét bí mật lưu trên máy người dùng. Nó kiểm tra AWS metadata service, đọc token của HashiCorp Vault, quét file cấu hình npm và thậm chí đọc trực tiếp bộ nhớ tiến trình trên Linux qua /proc/*/mem.
# Ví dụ đường dẫn được truy cập trên Linux
/proc/*/memĐiều này cho thấy lỗ hổng CVE không chỉ dừng ở việc phát tán package độc hại, mà còn mở rộng sang việc thu thập dữ liệu nhạy cảm từ môi trường phát triển thực tế.
Lỗ hổng CVE và tính bền vững của mã độc
Trên macOS, mã độc cài một Python backdoor bám trụ lâu dài, kiểm tra lệnh mới mỗi giờ và được ký bằng khóa RSA 4096-bit. Ngoài ra, nó tạo cơ chế tồn tại thông qua LaunchAgent và một file backdoor tại ~/.local/share/kitty/cat.py.
Đây là dấu hiệu cho thấy lỗ hổng CVE kiểu supply chain có thể kéo theo cả hệ thống bị xâm nhập ở cấp độ endpoint nếu không xử lý triệt để artifact tồn lưu.
Chống phân tích và né sandbox
Payload dùng các dấu hiệu chống phân tích để tránh môi trường nghiên cứu. Nó bỏ qua máy có ít hơn 4 CPU core và tránh chạy ở múi giờ Nga hoặc CIS.
Các điều kiện này giúp mã độc tập trung vào môi trường phát triển thật, đồng thời hạn chế khả năng bị phát hiện sớm khi thực thi trong sandbox. Trong các bài toán phát hiện xâm nhập, những hành vi như vậy là tín hiệu quan trọng cần theo dõi.
IOC và chỉ dấu cần theo dõi
Nội dung gốc có nhắc đến phần Indicators of Compromise (IoCs), nhưng không cung cấp danh sách IP, domain hoặc hash cụ thể. Vì vậy, chỉ có thể trích xuất các chỉ dấu hành vi sau:
- Phiên bản 18.95.0 của nrwl.angular-console.
- Workspace tự động kích hoạt tải payload khi mở.
- Orphan commit trong kho nrwl/nx.
- File
~/.local/share/kitty/cat.pytrên macOS. - LaunchAgent liên quan đến persistence trên macOS.
- Exfiltration qua HTTPS, GitHub API, DNS tunneling.
Lỗ hổng CVE và hướng xử lý kỹ thuật
Người dùng đã cài phiên bản độc hại và mở workspace trong khoảng từ 12:36 đến 12:47 UTC ngày 18/05/2026 cần xem toàn bộ credential trên máy là đã bị lộ. Khuyến nghị cập nhật Nx Console lên 18.100.0 hoặc mới hơn.
Song song với cập nhật bản vá, cần xoá các artifact persistence, đặc biệt trên macOS, rồi rotate toàn bộ credential liên quan: cloud token, GitHub personal access token, npm token, SSH key và bí mật trong file .env.
Lệnh và thành phần cần kiểm tra
# Thành phần cần rà soát trên macOS
~/.local/share/kitty/cat.py
LaunchAgent liên quan đến Nx Console
# Nhóm credential cần xoay vòng
- Cloud tokens
- GitHub personal access tokens
- npm tokens
- SSH keys
- .env secretsTrong bối cảnh lỗ hổng CVE chuỗi cung ứng, việc kiểm tra artifact sau phát hiện và bản vá bảo mật là bắt buộc, vì mã độc có thể đã lưu dấu trên nhiều vị trí hệ thống khác nhau.
Tham chiếu kỹ thuật
Báo cáo phân tích ban đầu của StepSecurity có thể xem tại: stepsecurity.io/blog/nx-console-vs-code-extension-compromised. Đây là nguồn mô tả chi tiết chuỗi tấn công, kỹ thuật exfiltration và hành vi persistence của payload.
Với các môi trường phát triển phụ thuộc VS Code extensions, lỗ hổng CVE dạng chuỗi cung ứng như trường hợp này cần được theo dõi bằng quy trình phát hiện tấn công, kiểm soát chữ ký gói, rà soát source provenance và giám sát dấu hiệu bất thường trên máy lập trình.










