Vào ngày 8 tháng 9, một cuộc tấn công chuỗi cung ứng phần mềm nghiêm trọng đã được phát hiện trong hệ sinh thái NPM, ảnh hưởng đến một số thư viện JavaScript được sử dụng rộng rãi. Sự cố lần đầu tiên được công chúng biết đến khi Charles Guillemet, Giám đốc Công nghệ của Ledger, đưa ra 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ị xâm phạm. Các đánh giá ban đầu cho thấy hơn một tỷ lượt tải xuống đã bị phơi nhiễm với phần mềm độc hại ẩn được thiết kế để đánh cắp tiền điện tử. Tuy nhiên, các cuộc điều tra sau đó đã tiết lộ rằng các gói bị xâm phạm tổng cộng đại diện cho hơn 2,6 tỷ lượt tải xuống hàng tuần.

Tấn công chuỗi cung ứng làm lộ hơn 2 tỷ dữ liệu
Tấn công chuỗi cung ứng làm lộ hơn 2 tỷ dữ liệu
Cuộc tấn công tập trung vào tài khoản của một nhà phát triển có tên “qix”, người duy trì một số thư viện JavaScript phổ biến. Chúng bao gồm chalk, strip-ansi, color-convert và debug, tất cả đều được sử dụng trong vô số dự án trong cả môi trường máy chủ và giao diện người dùng. Kẻ tấn công đã truy cập vào tài khoản thông qua một email hỗ trợ giả mạo và đẩy các bản cập nhật độc hại lên khoảng 18 gói. Do cài đặt phụ thuộc tự động, phần mềm độc hại đã lây lan nhanh chóng trong vòng vài giờ sau khi vi phạm.
Guillemet giải thích rằng mã độc được thiết kế để âm thầm thay thế địa chỉ ví tiền điện tử trong quá trình giao dịch. Điều này khiến người dùng dựa vào ví phần mềm có nguy cơ mất tiền nếu họ chấp thuận giao dịch mà không nhận thấy rằng địa chỉ người nhận đã bị thay đổi.
Phần mềm độc hại Crypto Clipper và MetaMask
Các nhà nghiên cứu bảo mật đã xác định phần mềm độc hại là một loại “crypto clipper”. Nó hoạt động bằng cách thay thế địa chỉ ví ở các giai đoạn khác nhau của giao dịch. Trong trường hợp 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 bằng cách móc vào các chức năng trình duyệt như fetch và XMLHttpRequest. Điều này cho phép nó quét và thay đổi địa chỉ trong dữ liệu ứng dụng.
Nếu phát hiện tiện ích mở rộng ví như MetaMask, phần mềm độc hại sẽ trở nên trực tiếp hơn bằng cách chặn giao dịch trước khi nó được ký. Nó sửa đổi địa chỉ ví trong bộ nhớ để khi người dùng xem xét giao dịch, địa chỉ gian lận đã có sẵn. Phần mềm độc hại dựa vào thuật toán Levenshtein, tạo ra các địa chỉ gần giống với địa chỉ gốc. Sự tương đồng này làm giảm khả năng người dùng sẽ nhận ra sự thay đổi.

Tấn công chuỗi cung ứng làm lộ hơn 2 tỷ dữ liệu
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 gặp phải các dấu hiệu của cuộc tấn công khi hệ thống xây dựng trả về một thông báo lỗi không mong muốn. Kiểm tra thêm một phụ thuộc có tên error-ex đã tiết lộ mã bị che giấu có chứa một hàm đáng ngờ có tên checkethereumw, cho thấy mục tiêu là ví Ethereum. Các nhà phân tích sau đó đã xác nhận rằng phần mềm độc hại chứa các tham chiếu đến địa chỉ ví trên một số blockchain, bao gồm Bitcoin, Ethereum, Solana, Tron, Litecoin và Bitcoin Cash.
Trong số các gói bị ảnh hưởng có một số gói được sử dụng rộng rãi nhất trong hệ sinh thái JavaScript. Chỉ riêng 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 phạm được tải xuống hơn 2,6 tỷ lần mỗi tuần, làm nổi bật mức độ ảnh hưởng sâu rộng trong cộng đồng nhà phát triển.
Ví cứng so với ví mềm
Mặc dù nhiều thư viện bị nhiễm không trực tiếp liên kết với các dự án tiền điện tử, nhưng việc tích hợp chúng vào chuỗi phụ thuộc 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 điện tử và các ứng dụng phi tập trung được coi là có mức độ rủi ro cao nhất.
Theo Guillemet, người dùng ví cứng có tính năng ký rõ ràng vẫn an toàn vì các thiết bị đó cho phép họ xác minh mọi giao dịch trước khi phê duyệt. Ngược lại, người dùng ví mềm phải đối mặt với rủi ro lớn hơn và được khuyên nên hết sức thận trọng cho đến khi các phụ thuộc đã được xem xét và bảo mật đầy đủ.
Tìm kiếm kẻ tấn công và số tiền bị đánh cắp
Các địa chỉ tiền điện tử của kẻ tấn công đã được xác định và đang được theo dõi tích cực nhờ tính minh bạch của các blockchain công khai. Một địa chỉ Ethereum chính liên kết với hoạt động này là 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976, cùng với một số địa chỉ dự phòng khác. 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 mang lại cơ hội để 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.

Tấn công chuỗi cung ứng làm lộ hơn 2 tỷ dữ liệu
JavaScript và vai trò của 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 phạm phần lớn đã bị xóa khỏi kho lưu trữ, nhưng rủi ro vẫn còn đố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 các tệp khóa của chúng. Các nhà phát triển đang được kêu gọi kiểm tra các phụ thuộc của họ, khóa các phiên bản an toàn và cài đặt lại các bản dựng sạch để ngăn chặn việc phơi nhiễm thêm.
Các chuyên gia bảo mật cũng khuyên các nhà phát triển nên xoay vòng thông tin đăng nhập, thực thi xác thực hai yếu tố trên các tài khoản như NPM và GitHub, và sử dụng các phương pháp cài đặt xác định như npm ci để duy trì kiểm soát phiên bản nghiêm ngặt. Ngoài ra, người dùng được khuyên nên xác minh cẩn thận tất cả các giao dịch tiền điện tử, đặc biệt nếu dựa vào ví phần mềm.
Những suy nghĩ cuối cùng
Sự cố này đã được mô tả là một trong những vụ vi phạm lớn nhất ảnh hưởng đến hệ sinh thái NPM. Mặc dù phản ứng của cộng đồng tương đối nhanh chóng, nhưng cuộc tấn công đã nhấn mạnh sự mong manh của 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 này là một lời nhắc nhở rằng ngay cả các 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 phạm. Đối với cả nhà phát triển và người dùng, sự cảnh giác liên tục giờ đây 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.






