Tấn Công Chuỗi Cung Ứng NPM: 18 Gói Phổ Biến Bị Xâm Nhập
Vào ngày 8 tháng 9, 13:16 UTC, hệ thống thông tin của Aikido đã phát hiện một điều đáng lo ngại: một loạt các bản cập nhật đã được công bố cho 18 gói npm được sử dụng rộng rãi — nhưng đây không chỉ là những bản cập nhật thông thường. Chúng chứa mã độc được thiết kế để chiếm đoạt hoạt động crypto và web3 trên trình duyệt.
Những gói này không phải là những gói ít người biết đến. Tổng cộng, chúng chiếm hơn 2 tỷ lượt tải xuống hàng tuần.
Các Gói Bị Ảnh Hưởng
Dưới đây là danh sách các gói đã bị xâm nhập, cùng với số lượt tải xuống hàng tuần khoảng:
backslash
(0.26 triệu)chalk-template
(3.9 triệu)supports-hyperlinks
(19.2 triệu)has-ansi
(12.1 triệu)simple-swizzle
(26.26 triệu)color-string
(27.48 triệu)error-ex
(47.17 triệu)color-name
(191.71 triệu)is-arrayish
(73.8 triệu)slice-ansi
(59.8 triệu)color-convert
(193.5 triệu)wrap-ansi
(197.99 triệu)ansi-regex
(243.64 triệu)supports-color
(287.1 triệu)strip-ansi
(261.17 triệu)chalk
(299.99 triệu)debug
(357.6 triệu)ansi-styles
(371.41 triệu)
Các gói này là xương sống của nhiều dự án JavaScript, từ CLIs đến các framework.
Điều Gì Đã Xảy Ra?
Các tin tặc đã công bố các phiên bản mới của các gói đáng tin cậy bao gồm một payload độc hại mà:
- Ngăn chặn các tương tác crypto/web3 trong trình duyệt.
- Lén lút thao tác các phê duyệt ví và giao dịch.
- Viết lại địa chỉ thanh toán thành địa chỉ do kẻ tấn công kiểm soát.
- Thực hiện tất cả điều này mà không gây ra bất kỳ cảnh báo rõ ràng nào cho người dùng.
Đây là một cuộc tấn công chuỗi cung ứng điển hình. Nếu dự án của bạn phụ thuộc vào một trong những gói này, bạn có thể đã vô tình đưa mã độc vào.
Ví Dụ Về Một Gói Đính Kèm: is-arrayish
Thông thường, is-arrayish
là một gói tiện ích nhỏ với khoảng 70 triệu lượt tải xuống hàng tuần. Nhưng trong phiên bản bị xâm nhập, mã độc đã được tiêm vào để thực hiện trong trình duyệt, ngăn chặn và thao tác các tương tác ví.
Điều mà lẽ ra là một tiện ích vô hại đã trở thành một crypto-drainer.
Cách Để Bảo Vệ Bản Thân Và Dự Án Của Bạn
Các cuộc tấn công chuỗi cung ứng như thế này rất khó phát hiện, nhưng có những bước thực tiễn bạn có thể thực hiện để giảm thiểu rủi ro:
1. Định Nghĩa Phụ Thuộc
Đừng để dự án của bạn tự động kéo phiên bản “mới nhất”. Đặt nó vào một phiên bản an toàn đã biết:
# cài đặt một phiên bản cụ thể thay vì phiên bản mới nhất
npm install chalk@4.1.2
yarn add chalk@4.1.2
Điều này ngăn dự án của bạn tự động cập nhật lên các bản phát hành có thể chứa mã độc.
2. Bật Tệp Khóa Trong CI/CD
Luôn luôn cam kết tệp package-lock.json
hoặc yarn.lock
và thực thi cài đặt nghiêm ngặt:
# xác minh tính nhất quán của tệp khóa
npm ci
yarn install --frozen-lockfile
Điều này đảm bảo tất cả các môi trường sử dụng chính xác cùng một phiên bản.
3. Kiểm Tra Định Kỳ
Kiểm tra dự án của bạn để phát hiện các phiên bản có lỗ hổng hoặc mã độc đã biết:
npm audit --production
yarn audit
Để kiểm tra sâu hơn, hãy tích hợp các công cụ như:
- Snyk (
snyk test
) - Aikido Safe-Chain
- OWASP Dependency-Check
4. Giám Sát Các Phụ Thuộc Bên Trong
Ngay cả khi bạn tin tưởng các phụ thuộc trực tiếp của mình, những phụ thuộc lồng ghép có thể mang mã độc. Sử dụng:
npm ls
yarn list --pattern ansi
Điều này tiết lộ các phiên bản của ansi-styles
, chalk
, v.v. có trong cây phụ thuộc của bạn.
5. Sử Dụng Cổng Bảo Mật Trong CI
Cấu hình pipeline CI của bạn để thất bại nếu có các bản nâng cấp phụ thuộc không được xác minh được giới thiệu. Điều này ngăn chặn các bản cập nhật phụ thuộc “bất ngờ” không được kiểm soát vào các bản build.
6. Luôn Cập Nhật Thông Tin
- Đăng ký nhận thông báo bảo mật từ npm và GitHub.
- Theo dõi các nguồn tin đáng tin cậy (Aikido intel, snyk.io, v.v.).
- Cẩn thận với các phiên bản đột ngột tăng lên trong các thư viện thường ổn định.
Tại Sao Điều Này Quan Trọng
Các gói bị xâm nhập không chỉ là tiện ích — chúng là các phụ thuộc cơ bản trong hệ sinh thái JavaScript. Ngay cả khi bạn không sử dụng chúng trực tiếp, dự án của bạn vẫn có thể bị ảnh hưởng thông qua các phụ thuộc bên trong.
Điều này có nghĩa là phạm vi tác động của cuộc tấn công này là rất lớn.
Kết Luận
Sự cố này là một lời nhắc nhở rằng bảo mật chuỗi cung ứng là rất quan trọng. Khi các tin tặc ngày càng nhắm đến các kho gói, câu hỏi không phải là nếu mà là khi các phụ thuộc của bạn sẽ bị tấn công.
👉 Hãy luôn cảnh giác.
👉 Kiểm tra các phụ thuộc của bạn.
👉 Sử dụng các công cụ cung cấp cái nhìn về các bản cập nhật gói.
Bảo mật của dự án của bạn không chỉ phụ thuộc vào mã của riêng bạn — mà còn vào hàng ngàn gói mà bạn dựa vào.