Công ty bảo mật Koi Security vừa công bố chi tiết về PhantomRaven, một hoạt động tấn công supply chain quy mô lớn sử dụng 126 package npm chứa mã độc, đạt hơn 86.000 lượt tải. Cuộc tấn công sử dụng các kỹ thuật mới gồm “Remote Dynamic Dependencies” và “slopsquatting” nhắm vào AI, để đánh cắp token npm, GitHub và các bí mật CI/CD.

Rheo báo cáo của Koi Security, hoạt động này bắt đầu từ tháng 8 năm 2025 và bị phát hiện vào tháng 10 năm 2025 bởi công cụ phân tích hành vi Wings. Các gói độc hại này được thiết kế để đánh cắp npm token, GitHub credentials, và các secrets của hệ thống CI/CD. Mặc dù hạ tầng của hacker có vẻ sơ sài (sử dụng các email miễn phí liên tiếp), kỹ thuật được sử dụng lại cực kỳ tinh vi.
Điểm mấu chốt của PhantomRaven là kỹ thuật “Remote Dynamic Dependencies” (RDD). Thay vì khai báo các dependency chuẩn trỏ đến npmjs.com, hacker sử dụng một URL HTTP trực tiếp trong tệp package.json (ví dụ: "ui-styles-pkg": "http://packages.storeartifact.com/..."). Khi lập trình viên chạy npm install, npm sẽ tải gói trực tiếp từ máy chủ của hacker. Kỹ thuật này qua mặt hoàn toàn các trình quét bảo mật và công cụ phân tích dependency.
Máy chủ của hacker thậm chí có thể kiểm tra địa chỉ IP của người cài đặt để phân phối payload mã độc tùy chỉnh. Mã độc được thực thi tự động thông qua các “lifecycle scripts” (như preinstall), đảm bảo nó chạy ngay khi được cài đặt, bất kể nằm sâu đến đâu trong cây dependency.
Một kỹ thuật đáng chú ý khác là “slopsquatting” (tạo tên package nghe hợp lý) nhắm vào các công cụ AI. Hacker lợi dụng việc các mô hình ngôn ngữ lớn (LLM) như Copilot hay ChatGPT bị “ảo giác” (hallucination) và gợi ý các package không tồn tại nhưng nghe có vẻ đúng (ví dụ: gợi ý unused-imports thay vì eslint-plugin-unused-imports). Lập trình viên tin tưởng vào gợi ý của AI và vô tình cài đặt malware vào môi trường của mình.
Sau khi cài đặt, malware sẽ tiến hành quét toàn diện hệ thống để thu thập email (từ các tệp .gitconfig, .npmrc), các bí mật CI/CD (GitHub Actions, GitLab CI, Jenkins…). Nó cũng thu thập “fingerprint” hệ thống (IP public/local, OS, username…). Để đảm bảo thành công, dữ liệu bị đánh cắp được gửi đi qua cả HTTP GET, HTTP POST và dự phòng bằng WebSocket để vượt qua các hạn chế mạng.








