Cuộc Tấn Công Chuỗi Cung Ứng NPM Lớn Nhất 2025: Phân Tích Sâu
Trong bối cảnh không ngừng thay đổi của an ninh mạng, các cuộc tấn công chuỗi cung ứng tiếp tục là một trong những mối đe dọa tinh vi nhất đối với các hệ sinh thái phần mềm. Vào ngày 8 tháng 9 năm 2025, kho lưu trữ Node Package Manager (NPM), một thành phần cốt lõi của phát triển JavaScript, đã trở thành trung tâm của cuộc tấn công chuỗi cung ứng lớn nhất trong lịch sử của nó. Sự cố này đã xâm phạm 18 gói phổ biến, với tổng số lượt tải xuống hàng tuần lên tới hơn 2 tỷ, và nhắm mục tiêu vào người dùng tiền điện tử bằng cách chèn mã độc nhằm chiếm đoạt giao dịch. Mặc dù tiềm năng gây thiệt hại của cuộc tấn công rất lớn, nhưng việc phát hiện và ứng phó nhanh chóng đã giới hạn tác động thực tế của nó đối với tổn thất tài chính tối thiểu. Bài viết này khám phá chi tiết cuộc tấn công, từ cách thực hiện đến hậu quả của nó, dựa trên những hiểu biết từ các nhà nghiên cứu bảo mật và các bên bị ảnh hưởng.
Khởi nguồn của cuộc tấn công: Lừa đảo và Xâm phạm Tài khoản
Cuộc tấn công bắt đầu bằng một chiến thuật kỹ thuật xã hội tinh vi: một email lừa đảo giả mạo hỗ trợ NPM. Được gửi từ miền "npmjs.help" (được đăng ký vào ngày 5 tháng 9 năm 2025), email đã đánh lừa người duy trì được biết đến với tên gọi "Qix" (một nhà phát triển uy tín đứng sau một số gói nổi bật) vào việc đặt lại xác thực hai yếu tố (2FA) của họ. Điều này cho phép các kẻ tấn công kiểm soát tài khoản NPM của Qix vào khoảng 13:16 UTC vào ngày 8 tháng 9. Khi đã vào bên trong, những kẻ phạm tội đã công bố các bản cập nhật độc hại cho 18 gói, chèn mã độc vào các tệp như index.js
.
Phương pháp này đã vượt qua các biện pháp bảo mật truyền thống bằng cách khai thác lòng tin của con người thay vì các lỗ hổng kỹ thuật. Miền lừa đảo là một biến thể tinh tế của các giao tiếp hợp pháp từ NPM, làm nổi bật thách thức liên tục của danh tính nhà phát triển như một vectơ tấn công. Việc công bố nhanh chóng các phiên bản bị xâm phạm—ngay sau khi kiểm soát tài khoản—cho thấy các kẻ tấn công đã lập kế hoạch trước cho payload và các mục tiêu của họ.
Các gói và phiên bản bị ảnh hưởng: Phạm vi tác động hàng tỷ lượt tải xuống
Các gói bị xâm phạm thuộc số những gói phổ biến nhất trong hệ sinh thái JavaScript, được sử dụng trong mọi thứ từ công cụ dòng lệnh đến ứng dụng web. Dưới đây là danh sách đầy đủ các gói bị ảnh hưởng và các phiên bản độc hại của chúng, cùng với số lượt tải xuống hàng tuần ước tính vào thời điểm đó:
- ansi-styles@6.2.2 (371.41 triệu lượt tải/tuần)
- debug@4.4.2 (357.6 triệu)
- chalk@5.6.1 (299.99 triệu)
- supports-color@10.2.1 (287.1 triệu)
- strip-ansi@7.1.1 (261.17 triệu)
- ansi-regex@6.2.1 (243.64 triệu)
- wrap-ansi@9.0.1 (197.99 triệu)
- color-convert@3.1.1 (193.5 triệu)
- color-name@2.0.1 (191.71 triệu)
- slice-ansi@7.1.1 (59.8 triệu)
- is-arrayish@0.3.3 (73.8 triệu)
- color@5.0.1 (không xác định, nhưng thuộc bộ màu)
- color-string@2.1.1 (27.48 triệu)
- simple-swizzle@0.2.3 (26.26 triệu)
- supports-hyperlinks@4.1.1 (19.2 triệu)
- has-ansi@6.0.1 (12.1 triệu)
- chalk-template@1.1.1 (3.9 triệu)
- backslash@0.2.1 (0.26 triệu)
Ngoài ra, các cuộc điều tra tiếp theo đã phát hiện thêm nhiều gói liên quan đến chiến dịch này, bao gồm duckdb@1.3.3, @coveops/abi@2.0.1, @duckdb/node-bindings@1.3.3, @duckdb/duckdb-wasm@1.29.2, và @duckdb/node-api@1.3.3. Một gói lạ, proto-tinker-wc@0.1.87, đã bị xâm phạm sau đó vào ngày hôm đó lúc 16:58 UTC, có thể do cùng một tác nhân.
Những gói này là các phụ thuộc trong vô số dự án, bao gồm các khung và công cụ web lớn. Quy mô khổng lồ—hơn 1 tỷ lượt tải xuống của các phiên bản bị ảnh hưởng trước khi sửa chữa—có nghĩa là toàn bộ hệ sinh thái JavaScript, điều khiển khoảng 60% ứng dụng web, đã có nguy cơ bị ảnh hưởng.
Payload độc hại: Kẻ đánh cắp tiền điện tử bí mật
Mã được chèn đã được làm mờ để tránh phát hiện ban đầu nhưng, khi được giải mã, đã tiết lộ một phần mềm độc hại dựa trên trình duyệt tập trung vào việc đánh cắp tiền điện tử. Nó hoạt động bằng cách chèn vào các chức năng chính của trình duyệt như fetch
, XMLHttpRequest
, và API ví (ví dụ: window.ethereum
cho các tiện ích mở rộng tương tự MetaMask và ví Solana).
Các hành vi chính bao gồm:
- Ngăn chặn ở lớp Mạng: Malware đã làm ô nhiễm nội dung trang hoặc tải trọng API trước khi chúng đến ứng dụng, thay đổi dữ liệu trong quá trình vận chuyển.
- Kết nối ở lớp Ví: Nó đã làm hỏng các giao dịch bằng cách sửa đổi các đối số gọi nhà cung cấp ngay trước khi ký, ngay cả khi giao diện người dùng hiển thị thông tin đúng. Điều này làm cho nó đặc biệt nguy hiểm cho các ví phần mềm.
- Thay thế Địa chỉ: Sử dụng thuật toán khoảng cách Levenshtein, mã đã thay thế các địa chỉ tiền điện tử hợp lệ bằng các địa chỉ do kẻ tấn công kiểm soát trông giống nhau, giảm khả năng phát hiện của người dùng trong các đánh giá thông thường.
- Chuỗi Nhắm mục tiêu: Hỗ trợ nhiều blockchain, bao gồm Ethereum (ETH), Bitcoin (BTC, bc1...), Tron (TRX, T...), Bitcoin Cash (BCH, bitcoincash:), Litecoin (LTC, ltc1..., L.../M...), và Solana.
- Tính năng Ẩn: Payload đã tránh các dấu hiệu đỏ rõ ràng, tập trung vào việc chuyển hướng quỹ âm thầm trong các giao dịch như phê duyệt (chọn hàm: 0x095ea7b3, 0xd505accf) hoặc chuyển khoản (0xa9059cbb, 0x23b872dd).
Các chỉ số của sự xâm phạm (IoCs) bao gồm:
- Người nhận ETH chính: 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976
- Danh sách địa chỉ mã cứng cho các chuỗi khác nhau
- Mẫu toàn cầu:
stealthProxyControl
,runmask
,newdlocal
,checkethereumw
,neth
,loval
,rund
- Chìa khóa công khai Solana không đổi: 19111111111111111111111111111111
Malware đã kích hoạt khi người dùng truy cập các trang tích hợp các gói bị xâm phạm, biến nó thành một mối đe dọa phía khách hàng nhắm vào người dùng Web3 tham gia vào DeFi hoặc giao dịch tiền điện tử.
Phát hiện, Phản ứng và Di động Cộng đồng
Việc phát hiện đã diễn ra nhanh chóng nhờ các công ty bảo mật như Aikido, nguồn thông tin của họ đã báo cáo các bất thường vào lúc 13:16 UTC ngày 8 tháng 9. JFrog và các nhà nghiên cứu khác, bao gồm SlowMist, đã nhanh chóng phân tích payload và chia sẻ phát hiện. CTO của Ledger, Charles Guillemet, đã khuếch đại cảnh báo trên X (trước đây là Twitter), khuyên người dùng ngừng giao dịch on-chain trừ khi sử dụng ví phần cứng và xác minh mọi chi tiết trước khi ký.
Qix, người duy trì bị xâm phạm, đã hành động nhanh chóng để thu hồi các phiên bản độc hại trong khoảng hai giờ, đáng kể hạn chế thiệt hại. NPM đã xóa hầu hết các gói bị ảnh hưởng, mặc dù một số như simple-swizzle vẫn tồn tại trong một thời gian ngắn. Cộng đồng mã nguồn mở đã ngăn chặn tiềm năng đầy đủ của cuộc tấn công, với nhiều dự án (ví dụ: Blockstream Jade, Venus Protocol, Flamingo Finance, Rango Exchange) công khai xác nhận họ không bị ảnh hưởng sau các cuộc kiểm toán.
Tác động: Một tiếng thở dài thay vì một tiếng nổ
Mặc dù có tiếng tăm, thiệt hại thực tế của cuộc tấn công là không đáng kể. Các kẻ tấn công chỉ đánh cắp khoảng 66 đô la—khoảng 5 xu bằng Ethereum và 20 đô la trong một loại tiền điện tử meme—được cho là vượt xa chi phí phản ứng đối với các tổ chức. Sự làm mờ nghiệp dư và việc thu hồi nhanh chóng đã ngăn chặn một thảm họa quy mô Log4j. Không có hệ sinh thái tiền điện tử lớn nào báo cáo thiệt hại đáng kể, mặc dù sự cố đã gây rối cho quy trình phát triển và làm gia tăng sự lo lắng trong giới phát triển.
Bài học rút ra và Chiến lược phòng ngừa
Cuộc tấn công này nhấn mạnh sự mong manh của các chuỗi cung ứng mã nguồn mở. Những điểm rút ra chính bao gồm:
- Sự cẩn trọng của Nhà phát triển: Đối xử với các email không yêu cầu với sự nghi ngờ, ngay cả từ các nguồn có vẻ chính thức. Kích hoạt xác thực đa yếu tố vượt xa SMS.
- Quản lý Phụ thuộc: Sử dụng tệp khóa gói để giữ nguyên phiên bản, thường xuyên kiểm tra các phụ thuộc và sử dụng các công cụ như Aikido SafeChain để kiểm tra mã độc trước khi cài đặt.
- Bảo vệ Người dùng: Ví phần cứng (ví dụ: Ledger) cung cấp một lớp phòng thủ quan trọng bằng cách cho phép xác minh giao dịch trên một thiết bị an toàn. Luôn kiểm tra kỹ các địa chỉ và tránh ví phần mềm cho các giao dịch có giá trị lớn trong thời gian cảnh báo.
- Cải tiến Hệ sinh thái: NPM và các kho lưu trữ tương tự nên nâng cao bảo mật tài khoản, có thể yêu cầu khóa phần cứng cho các nhà duy trì có tác động lớn. Việc áp dụng rộng rãi hóa đơn phần mềm (SBOM) và quét tự động có thể giảm thiểu rủi ro.
- Biện pháp Dự phòng: Các nhà phát triển nên duy trì các bản sao lưu ngoại tuyến, thay đổi thông tin đăng nhập sau sự cố và xóa bộ nhớ cache NPM trước khi cài đặt lại các gói.
Trong một hướng dẫn sau cuộc tấn công được chia sẻ trên X, các chuyên gia nhấn mạnh việc phân tách phòng ngừa thành kiểm tra phụ thuộc, sử dụng ví phần cứng và tránh các nguồn không xác minh.
Kết luận: Một lời cảnh tỉnh cho An ninh Chuỗi Cung Ứng
Cuộc tấn công NPM tháng 9 năm 2025, mặc dù đã được kiểm soát, là một lời nhắc nhở rõ ràng về những rủi ro liên kết trong phát triển phần mềm hiện đại. Với hàng tỷ lượt tải xuống bị đe dọa, sự cố này làm nổi bật nhu cầu về sự cẩn trọng tập thể trong cộng đồng mã nguồn mở. Khi Web3 và DeFi phát triển, động lực cho các cuộc tấn công như vậy cũng tăng lên—khiến an ninh mạnh mẽ không chỉ là một lựa chọn, mà là một điều cần thiết. Bằng cách học hỏi từ sự cố này, hệ sinh thái có thể xây dựng các phòng thủ mạnh mẽ hơn chống lại các mối đe dọa trong tương lai.