- Một cuộc tấn công chuỗi cung ứng đã xảy ra khi mã độc tự lây lan được chèn vào hơn 40 gói trong hệ sinh thái NPM, bao gồm @ctrl/tinycolor rất phổ biến, có thể gây lây nhiễm dây chuyền đến bí mật trong môi trường phát triển và cả thông tin xác thực CI/CD. Các phiên bản bị nhiễm đã bị gỡ khỏi npm
- Payload của cuộc tấn công thực thi bất đồng bộ gói Webpack (bundle.js, ~3.6MB) trong quá trình cài đặt npm, đồng thời thực hiện thu thập thông tin xác thực trên diện rộng thông qua biến môi trường, hệ thống tệp và cloud SDK
- Logic độc hại dùng NpmModule.updatePackage để ép vá và phát hành các gói khác, tạo ra sự lây lan theo tầng, đồng thời chèn workflow shai-hulud vào GitHub Actions để đánh cắp secret của tổ chức bằng toJSON(secrets)
- Dữ liệu thu thập được bị rò rỉ thông qua việc tạo kho GitHub công khai 'Shai-Hulud', được ngụy trang như hoạt động phát triển bình thường nên rất khó phát hiện
- Việc này được thực hiện âm thầm bằng cách truy cập token và endpoint siêu dữ liệu của AWS/GCP/Azure/NPM/GitHub, cùng hoạt động tìm kiếm bí mật dựa trên TruffleHog
- Cần ngay lập tức gỡ các gói, dọn dẹp repository, thay toàn bộ thông tin xác thực, đồng thời kiểm tra log CloudTrail/GCP Audit, chặn webhook, và áp dụng branch protection/Secret Scanning/chính sách cooldown
Affected Packages
- Đã ghi nhận tổng cộng 195 gói/phiên bản, tiêu biểu gồm @ctrl/tinycolor(4.1.1, 4.1.2), nhiều gói trong namespace @ctrl/, nhóm module @crowdstrike/, ngx-bootstrap/ngx-toastr/ng2-file-upload/ngx-color trên toàn bộ hệ sinh thái Angular/web UI, stack di động @nativescript-community/ và @nstudio/, toolchain khoa học sự sống teselagen/, cùng ember-*, koa2-swagger-ui, pm2-gelf-json, wdio-web-reporter
- Với từng gói, cần đối chiếu chính xác đúng phiên bản với bảng trong bài gốc để xác minh chéo kỹ lưỡng xem có đang sử dụng hay không
- Ví dụ:
@ctrl/ngx-emoji-mart 9.2.1, 9.2.2, @ctrl/qbittorrent 9.7.1, 9.7.2, ngx-bootstrap 18.1.4, 19.0.3–20.0.5, ng2-file-upload 7.0.2–9.0.1 và nhiều trường hợp khác trên diện rộng
Immediate Actions Required
Identify and Remove Compromised Packages
- Kiểm tra sự hiện diện của các gói bị nhiễm trong dự án: dùng
npm ls @ctrl/tinycolor để rà soát
- Gỡ ngay các gói bị nhiễm: thực hiện
npm uninstall @ctrl/tinycolor
- Tìm hash bundle.js đã biết để kiểm tra dấu vết cục bộ: dùng
sha256sum | grep 46faab8a...
Clean Infected Repositories
- Xóa workflow GitHub Actions độc hại: gỡ
.github/workflows/shai-hulud-workflow.yml
- Phát hiện và xóa nhánh shai-hulud đã được tạo trên remote: sau
git ls-remote ... | grep shai-hulud, thực hiện git push origin --delete shai-hulud
Rotate All Credentials Immediately
- Cần thay toàn bộ NPM token, GitHub PAT/Actions secret, SSH key, thông tin xác thực AWS/GCP/Azure, chuỗi kết nối DB, token bên thứ ba, secret CI/CD
- Cũng cần xoay vòng toàn bộ các mục được lưu trong AWS Secrets Manager/GCP Secret Manager
Audit Cloud Infrastructure for Compromise
- AWS: trong CloudTrail, kiểm tra thời điểm và mẫu gọi
BatchGetSecretValue, ListSecrets, GetSecretValue; dùng IAM Credential Report để xác minh việc tạo hoặc sử dụng khóa bất thường
- GCP: dùng Audit Logs để kiểm tra lịch sử truy cập Secret Manager, xác nhận có hay không sự kiện CreateServiceAccountKey
Chưa có bình luận nào.