Vào ngày 8 tháng 9, một cuộc tấn công chuỗi cung ứng phần mềm quy mô lớn đã nhắm vào hệ sinh thái NPM, làm tổn hại đến một số thư viện JavaScript được sử dụng rộng rãi. Vụ vi phạm lần đầu xuất hiện khi Charles Guillemet, Giám đốc Công nghệ của Ledger, cảnh báo rằng tài khoản Node Package Manager của một nhà phát triển đáng tin cậy đã bị chiếm đoạt. Các ước tính ban đầu cho thấy mức độ ảnh hưởng lên tới hơn một tỷ lượt tải xuống, nhưng phân tích sâu hơn cho thấy các gói bị xâm nhập thực tế chiếm hơn 2.6 tỷ lượt tải xuống hàng tuần.

Supply Chain Attack Exposes Over 2 Billion
Supply Chain Attack Exposes Over 2 Billion
Cuộc tấn công nhắm vào tài khoản của một nhà phát triển có tên là "qix", người duy trì một số thư viện JavaScript phổ biến bao gồm chalk, strip-ansi, color-convert và debug. Các thư viện này xuất hiện trong vô số dự án trải dài trên cả môi trường server-side và front-end. Kẻ tấn công đã giành quyền truy cập thông qua một email hỗ trợ giả mạo và đẩy các bản cập nhật độc hại vào khoảng 18 gói. Việc cài đặt dependency tự động đã cho phép phần mềm độc hại lây lan nhanh chóng chỉ trong vài giờ.
Guillemet giải thích rằng mã độc đã âm thầm thay thế địa chỉ ví tiền mã hóa (cryptocurrency wallet) trong các giao dịch. Người dùng dựa vào ví phần mềm (software wallet) đối mặt với nguy cơ mất tiền nếu họ phê duyệt giao dịch mà không chú ý đến địa chỉ người nhận đã bị thay đổi.
Malware Crypto Clipper và MetaMask
Các nhà nghiên cứu bảo mật phân loại phần mềm độc hại này là một "crypto clipper". Nó thay thế địa chỉ ví ở nhiều giai đoạn khác nhau của một giao dịch. Khi không phát hiện ví, phần mềm độc hại sẽ sửa đổi dữ liệu gửi đi trong các ứng dụng phi tập trung (dApps) bằng cách can thiệp vào các hàm trình duyệt như fetch và XMLHttpRequest, quét và thay đổi địa chỉ trong dữ liệu ứng dụng.
Nếu một tiện ích mở rộng ví như MetaMask có mặt, phần mềm độc hại sẽ chặn giao dịch trước khi ký. Nó sửa đổi địa chỉ ví trong bộ nhớ để địa chỉ lừa đảo xuất hiện khi người dùng xem xét giao dịch. Phần mềm độc hại sử dụng thuật toán Levenshtein để tạo ra các địa chỉ trông rất giống với địa chỉ gốc, khiến các thay đổi khó bị phát hiện hơn.

Supply Chain Attack Exposes Over 2 Billion
Những dấu hiệu đầu tiên của cuộc tấn công
Các nhà phát triển lần đầu tiên nhận thấy cuộc tấn công khi hệ thống build trả về thông báo lỗi bất ngờ. Việc kiểm tra một dependency có tên là error-ex đã tiết lộ mã bị làm rối (obfuscated code) chứa một hàm đáng ngờ có tên là checkethereumw, cho thấy mục tiêu là ví Ethereum. Các nhà phân tích xác nhận phần mềm độc hại chứa các tham chiếu đến địa chỉ ví trên nhiều blockchain, bao gồm Bitcoin, Ethereum, Solana, Tron, Litecoin và Bitcoin Cash.
Các gói bị ảnh hưởng bao gồm một số gói được sử dụng rộng rãi nhất trong hệ sinh thái JavaScript. Chalk nhận được hơn 300 triệu lượt tải xuống hàng tuần, debug hơn 350 triệu và strip-ansi hơn 260 triệu. Tổng cộng, các thư viện bị xâm nhập có hơn 2.6 tỷ lượt tải xuống mỗi tuần, cho thấy quy mô tác động đối với cộng đồng nhà phát triển.
Ví phần cứng (Hardware Wallet) so với Ví phần mềm (Software Wallet)
Nhiều thư viện bị nhiễm không liên quan trực tiếp đến các dự án tiền mã hóa, nhưng việc tích hợp chúng vào các chuỗi dependency có nghĩa là ngay cả các ứng dụng không liên quan cũng có thể đã bị phơi nhiễm. Các dự án tương tác với ví tiền mã hóa và ứng dụng phi tập trung đối mặt với mức độ rủi ro cao nhất.
Guillemet lưu ý rằng người dùng ví phần cứng (hardware wallet) với các tính năng clear-signing vẫn an toàn vì các thiết bị này cho phép xác minh mọi giao dịch trước khi phê duyệt. Người dùng ví phần mềm đối mặt với mức độ phơi nhiễm lớn hơn và nên hết sức thận trọng cho đến khi các dependency đã được xem xét và bảo mật hoàn toàn.
Truy tìm kẻ tấn công và số tiền bị đánh cắp
Các địa chỉ tiền mã hóa của kẻ tấn công đã được xác định và đang được giám sát tích cực thông qua tính minh bạch của blockchain công khai. Một địa chỉ Ethereum chính liên quan đến hoạt động này là 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976, cùng với một số địa chỉ dự phòng. Tại thời điểm báo cáo, số tiền bị đánh cắp vẫn chưa được di chuyển. Việc giám sát này cho phép phân tích liên tục, mặc dù phạm vi đầy đủ của tài sản bị đánh cắp vẫn chưa rõ ràng.

Supply Chain Attack Exposes Over 2 Billion
Vai trò của JavaScript và cộng đồng
Cộng đồng JavaScript và web3 đã hành động nhanh chóng để ngăn chặn sự cố. Các phiên bản độc hại của các gói bị xâm nhập phần lớn đã bị xóa khỏi registry, nhưng rủi ro vẫn tồn tại đối với các dự án có thể vẫn dựa vào các phiên bản lỗi thời trong lockfile của họ. Các nhà phát triển được khuyến khích kiểm tra các dependency, khóa các phiên bản an toàn và cài đặt lại các bản build sạch để ngăn chặn sự phơi nhiễm thêm.
Các chuyên gia bảo mật khuyến nghị các nhà phát triển nên xoay vòng thông tin xác thực, thực thi xác thực hai yếu tố trên các tài khoản như NPM và GitHub, đồng thời sử dụng các phương pháp cài đặt xác định (deterministic installation) như npm ci để duy trì kiểm soát phiên bản nghiêm ngặt. Người dùng nên kiểm tra cẩn thận tất cả các giao dịch tiền mã hóa, đặc biệt là khi dựa vào ví phần mềm.
Lời kết
Sự cố này được xếp hạng là một trong những vụ vi phạm sâu rộng nhất tấn công hệ sinh thái NPM. Mặc dù phản ứng của cộng đồng tương đối nhanh chóng, cuộc tấn công đã phơi bày sự mong manh của các chuỗi cung ứng phần mềm hiện đại và những rủi ro do sự phụ thuộc rộng rãi vào các thành phần mã nguồn mở.
Như Guillemet đã nhấn mạnh, việc xem xét mọi giao dịch trước khi ký vẫn là điều cần thiết. Vụ vi phạm chứng minh rằng ngay cả những thư viện nhỏ được nhúng sâu trong cơ sở hạ tầng ứng dụng cũng có thể trở thành các vectơ tấn công đáng kể khi bị xâm nhập. Đối với cả nhà phát triển và người dùng, sự cảnh giác liên tục hiện là một phần quan trọng để duy trì bảo mật trong hệ sinh thái web3 và phát triển phần mềm.



