Trang chủ Bài viết Bảo mật Ethersphere bị tấn công chuỗi cung ứng: bee-js và Swarm Desktop phát tán mã độc đánh cắp ví
Bảo mật 10/11/2026 13 lượt xem

Ethersphere bị tấn công chuỗi cung ứng: bee-js và Swarm Desktop phát tán mã độc đánh cắp ví

Ethersphere bị tấn công chuỗi cung ứng: bee-js và Swarm Desktop phát tán mã độc đánh cắp ví

Kẻ tấn công đã lợi dụng chính quy trình phát hành tự động của dự án Ethersphere để tung ra các phiên bản độc hại của hai công cụ thuộc mạng lưu trữ phi tập trung Swarm: bee-js 13.3.0 và Swarm Desktop 0.56.2. Cả hai bản phát hành đều tải và chạy mã được thiết kế để đánh cắp khóa ví mà Swarm Desktop lưu cho node của người dùng, cùng mật khẩu mở khóa được lưu kèm, đồng thời cài backdoor trên Windows, macOS và Linux.

bee-js là thư viện JavaScript đứng sau Swarm Desktop và công cụ dòng lệnh swarm-cli. Swarm Desktop chạy một node Swarm trên máy người dùng và lưu khóa riêng của node tại đó. Cả hai bản phát hành độc hại đã bị gỡ bỏ và nhóm duy trì dự án đã phát hành bản cập nhật Swarm Desktop sạch, nhưng việc này không xóa được backdoor đã cài sẵn cũng không bảo vệ được khóa đã bị gửi đi. Tại thời điểm viết bài chưa ghi nhận trường hợp mất tiền nào.

Thời gian và phạm vi ảnh hưởng

Swarm Desktop 0.56.2 xuất hiện trên GitHub khoảng 00:36 UTC và bị rút khoảng 8,5 giờ sau đó. Theo phân tích của hãng bảo mật chuỗi cung ứng Socket, trình cập nhật tích hợp của ứng dụng có thể đề nghị bản này cho máy Windows x64 và Mac dùng chip Apple Silicon trong khoảng 10 phút; máy Mac dùng chip Intel không bị đề nghị và bản cài trên Linux không tự động cập nhật.

bee-js 13.3.0 là phiên bản mới nhất trên npm trong khoảng 75 phút, từ 00:09 đến 01:25 UTC. Mã của nó chạy dưới dạng script postinstall, được npm thực thi tự động khi cài đặt trừ khi người dùng tắt install script. Dự án không cần import thư viện thì mã vẫn chạy. Các gói swarm-cli, bee-dashboard của chính dự án và mã nguồn Swarm Desktop chấp nhận dải phiên bản bao gồm 13.3.0, nên một lần cài mới trong khoảng thời gian đó có thể kéo theo bản độc hại.

Không báo cáo nào nêu số máy bị nhiễm. Ước tính thô của Socket là bee-js 13.3.0 được tải khoảng 10 lần, gồm cả máy quét bảo mật và máy nhân bản; lượt tải Swarm Desktop 0.56.2 đạt 65 tính đến 08:27 UTC, gồm cả các nhà nghiên cứu.

Cách mã độc hoạt động

Cả hai bản phát hành mang cùng một loader, theo phân tích kỹ thuật của SafeDep. Đây là vài dòng mã tải thêm mã từ api.frameworkmetrics[.]xyz và chạy với quyền của người dùng. Với bee-js, loader là script postinstall; với Swarm Desktop, nó chạy mỗi khi ứng dụng khởi động.

Mã tải về tìm hai tệp trong thư mục dữ liệu của Swarm Desktop là config.yaml và data-dir/keys/swarm.key. Nếu cả hai tồn tại, nó gửi chúng về máy chủ của kẻ tấn công. Tệp khóa là keystore Ethereum đã mã hóa, nhưng Swarm Desktop lưu mật khẩu dạng văn bản thuần trong config.yaml; có cả hai tệp, kẻ tấn công có thể lấy token xDAI và xBZZ của ví node, tiền trong chequebook và stake.

Mã còn cài backdoor. Trên Linux và macOS là một remote shell viết bằng Go tên evjawbreaker, lưu trong thư mục ẩn ~/.solidity, chạy nền dưới dạng user service trên Linux và LaunchAgent trên macOS. Shell này đọc địa chỉ máy chủ điều khiển từ một hợp đồng thông minh Ethereum nên kẻ tấn công có thể đổi địa chỉ bất cứ lúc nào; họ đã cập nhật nó 29 phút trước khi mã bee-js độc hại được thêm vào.

Trên Windows, mã cài một client truy cập từ xa ScreenConnect thật, được ConnectWise ký, chạy dưới dạng dịch vụ hệ thống và kết nối tới relay của kẻ tấn công. Nếu người dùng là quản trị viên, mã lấy quyền quản trị bằng cách vượt qua hộp thoại User Account Control đã biết; nếu không, nó hiện lại hộp thoại mỗi khi người dùng hủy. Với quyền đó, nó thêm loại trừ cho Microsoft Defender và cài client một cách âm thầm.

Lỗ hổng trong quy trình phát hành

Cả hai bản phát hành đều đến từ tài khoản bee-worker, tài khoản Ethersphere dùng để tự động hóa việc phát hành. Không thay đổi nào được ký hay gửi dưới dạng pull request.

Với bee-js, kẻ tấn công tạo một GitHub release cho phiên bản mới, kích hoạt workflow phát hành lên npm của dự án. Workflow này không cần phê duyệt và đưa gói lên npm trong 73 giây. Vì do workflow thật của dự án xây dựng, gói mang provenance hợp lệ — bản ghi liên kết gói npm với kho mã và workflow đã tạo ra nó — nhưng provenance chỉ cho biết gói được xây ở đâu, không cho biết mã bên trong có được ai xem xét hay không.

Với Swarm Desktop, kẻ tấn công tự khởi động một workflow build có chứng chỉ ký của Apple và Windows của dự án và không cần phê duyệt. Ứng dụng macOS được ký bằng Developer ID của dự án và được Apple notarize, nên macOS chỉ hiển thị hộp thoại lần đầu khởi chạy bình thường. Nhóm duy trì sau đó đã buộc các job ký của ứng dụng phải chờ DevOps của dự án phê duyệt và chỉ chạy từ nhánh main.

Cách kẻ tấn công giành được quyền truy cập vẫn chưa rõ. Ghi chú sự cố của nhóm duy trì đổ lỗi cho việc đánh cắp thông tin xác thực và bí mật CI. Phân tích của Socket cho thấy hai tài khoản GitHub được dùng: bee-worker và tài khoản của một người duy trì lâu năm.

Liên hệ với các vụ tấn công trước

Các payload dùng chung một hợp đồng Ethereum, một relay ScreenConnect và tên tệp có đuôi giả dành cho lập trình viên Solidity từng xuất hiện trên chợ Open VSX hồi tháng 9. Nhóm nghiên cứu Pluto Security mô tả các tiện ích mở rộng này trong phân tích EtherDuck ngày 1/10. Pluto liên hệ chúng với độ tin cậy cao tới nhóm đứng sau tiện ích SleepyDuck gốc, vốn đọc địa chỉ máy chủ từ một hợp đồng Ethereum khác vào năm 2025. Socket cho rằng cùng nhóm này đứng sau các bản phát hành bee-js và Swarm Desktop.

Khuyến nghị xử lý

Khuyến cáo trên GitHub cho bee-js 13.3.0 nêu rõ: bất kỳ máy nào đã cài hoặc chạy gói này đều nên được coi là đã bị xâm phạm hoàn toàn. SafeDep đưa ra lời khuyên tương tự với máy từng cài Swarm Desktop 0.56.2.

  • Tìm @ethersphere/[email protected] trong lockfile, cache gói, registry nội bộ và log cài đặt CI, kể cả bản bị kéo theo bởi gói khác.
  • Ghim về 13.2.0 và xóa các bản cache của 13.3.0, kể cả npm mirror đang dùng.
  • Nếu 13.3.0 được cài khi bật install script, coi máy hoặc CI runner đó đã bị xâm phạm dù log không báo lỗi, vì mã che giấu lỗi mạng của chính nó.
  • Từ một máy sạch, đổi mọi mật khẩu, token và khóa mà người dùng cài đặt hoặc job CI có thể đọc được.
  • Kiểm tra dòng Bee Desktop version: 0.56.2 (production) trong tệp log bee-desktop.log; thư mục log là ~/Library/Logs/Swarm Desktop/ trên macOS, %LOCALAPPDATA%\Swarm Desktop\Log\ trên Windows và ~/.local/state/Swarm Desktop/ trên Linux.
  • Cài 0.56.3; trên Linux phải thay gói bằng tay. Nếu 0.56.2 từng chạy, coi khóa và mật khẩu của node đã bị đánh cắp; từ máy sạch, chuyển tiền, chequebook và stake của node sang khóa mới.
  • Xóa thư mục ~/.solidity/, user service solidity-langsupport-runner.service trên Linux, LaunchAgent com.solidity.langsupport.runner trên macOS và dịch vụ ScreenConnect Client (5cbe79c9c25524df) trên Windows. Việc cập nhật, cài lại hay gỡ ứng dụng không xóa các thành phần này.
  • Nếu có thể, cài lại máy từ ảnh tin cậy thay vì dọn dẹp tại chỗ.

Chỉ dấu xâm phạm

  • Tên miền: api.frameworkmetrics[.]xyz
  • Đường dẫn URL: /v1/analytics (loader bee-js), /v1/electron (loader Swarm Desktop), /v1/assets/ (payload tiếp theo), /v1/swarm/report (tệp ví bị đánh cắp)
  • Header HTTP: X-Ethersphere: 1
  • IP:port: 193[.]57[.]9[.]155:4912 (máy chủ điều khiển evjawbreaker), 185[.]232[.]84[.]169:8041 (relay ScreenConnect)
  • Hợp đồng Ethereum: 0xf8a900Db50b3331be6B768bA460BB59f3E40C344
  • Đường dẫn: ~/.solidity/
  • systemd unit: solidity-langsupport-runner.service
  • LaunchAgent: com.solidity.langsupport.runner
  • Dịch vụ: ScreenConnect Client (5cbe79c9c25524df)
  • SHA-256: 9b73e7cd4e1425e770392549d8df46c706139ef476f4f7b9ac405165dc8d9696 (linux_amd64)
  • SHA-256: b601776817363b96295119f7221338a122d5247a35a77a64b04f286e1bbcc565 (linux_arm64)
  • SHA-256: 80d2672e2599732d3c0ae2a4cd0d1e3fe4d555a60273ce33feb99db3f34d250f (darwin_amd64)
  • SHA-256: fae61f31f00988fdc5cc9e7272b51e08af2e245d81003237875415930fd27358 (darwin_arm64)
  • SHA-256: 37d14bff30762ca701e9c1f8bc6c57c065bb20ae3a2208cb7411a6530610f08e (invoke.ps1)
  • SHA-256: 7527e86d70e7c9493db4356f1c3775380431b310000f2602c1e993cf435d01da (app.msi)

Nguồn: The Hacker News

Trích nguồn từ: The Hacker News

Chia sẻ:

Bài viết liên quan

Zalo