Nhiều cuộc tấn công chuỗi cung ứng phần mềm đã đánh vào hệ sinh thái npm, với các tác nhân đe dọa sử dụng cả phiên bản độc hại và bị nhiễm độc của hơn 50 gói hợp pháp để phân phối một trình đánh cắp thông tin (information stealer) dựa trên Rust và một loại sâu (worm) tự lây lan.
Theo JFrog, trình đánh cắp thông tin này "quét mọi bí mật mà nó có thể tìm thấy trên máy của nhà phát triển, ẩn mình sau một kernel rootkit eBPF và trả lời người điều hành thông qua Tor."
Trình đánh cắp này cũng sử dụng các thông tin xác thực bị đánh cắp như một cơ chế lan truyền, có những điểm tương đồng với loại sâu Shai-Hulud khét tiếng. Mã độc mới này đã được công ty bảo mật chuỗi cung ứng phần mềm đặt mã danh là IronWorm. Bằng cách tự xuất bản lên registry của npm dưới dạng các gói phần mềm bị chèn mã độc (trojanized), phương pháp này dẫn đến một cuộc tấn công tự nhân bản.
Hoạt động độc hại này được truy vết từ một tài khoản npm bị xâm nhập có tên là "asteroiddao", tài khoản này đã xuất bản các phiên bản gói chứa tệp thực thi Rust ELF thông qua một preinstall hook.
Mã độc này nhắm vào 86 biến môi trường, các tệp tin khác nhau có thể chứa thông tin xác thực liên quan đến OpenAI Codex, Anthropic, Claude, Google Gemini, Cursor, Amazon Web Services (AWS), Docker, Kubernetes, và npm, các cấu hình vault và các tệp ví tiền điện tử Exodus.
Một điểm kỳ lạ đáng chú ý là trình đánh cắp này bao gồm logic để bỏ qua ví của chính tác nhân đe dọa. Tại thời điểm viết bài, ví tiền điện tử này đang trống và không có giao dịch nào được ghi lại.
JFrog mô tả IronWorm là "một vũ khí chuỗi cung ứng được xây dựng để tìm kiếm các bí mật, sửa đổi dự án và chèn mã độc để tự lan truyền trên GitHub."
Các commit độc hại, trải dài trên chín tổ chức GitHub, đã được đưa vào dưới tên tác giả "claude" ([email protected]) nhằm cố gắng giả mạo chatbot trí tuệ nhân tạo (AI) của Anthropic.
"Gói npm độc hại được xuất bản bởi asteroiddao; asteroiddao tương ứng với tổ chức GitHub asteroid-dao; và ocrybit là thành viên của tổ chức đó, cũng như các tổ chức Arweave liên quan," công ty giải thích.
"Mã độc đã đánh cắp thông tin xác thực của ocrybit và sử dụng chúng để đẩy các commit lên các kho lưu trữ (repository) mà nó có thể truy cập. Những commit đó đã cấy mã độc vào các gói khác, sau đó có thể được xuất bản và lây nhiễm cho nhà phát triển tiếp theo. Và sau đó nó biến mất."
Hơn nữa, payload độc hại còn được trang bị để thay thế các workflow GitHub Actions hiện có bằng một workflow có khả năng thu thập các bí mật, ghi chúng vào một tệp trông có vẻ vô hại và tải nó lên dưới dạng một tạo phẩm xây dựng (build artifact), từ đó loại bỏ nhu cầu về một máy chủ điều khiển (C2) bên ngoài.
Khả năng của mã độc chưa dừng lại ở đó. Trong môi trường CI, nó lạm dụng luồng Trusted Publishing của npm để lấy các token tồn tại trong thời gian ngắn nhằm đẩy các phiên bản nhiễm độc lên registry.
Nó cũng tích hợp một payload eBPF hoạt động như một rootkit cấp nhân để ẩn các tiến trình và cản trở việc phân tích. Tuy nhiên, trên các hệ thống đã bật tính năng kernel lockdown, các thủ thuật ẩn tiến trình này sẽ thất bại.
Sâu Miasma lại xuất hiện
Tiết lộ này được đưa ra khi Endor Labs và StepSecurity làm sáng tỏ một chiến dịch tấn công chuỗi cung ứng riêng biệt đã làm tổn hại 57 gói npm với hơn 286 phiên bản độc hại để phục vụ một biến thể mới của sâu Miasma.
Một số gói bị ảnh hưởng được liệt kê dưới đây:
- ai-sdk-ollama
- autotel
- awaitly
- effect-analyzer
- eslint-plugin-awaitly
- executable-stories-cypress
- http-uploader-dev
- mountly
- node-env-resolver
- node-env-resolver-aws
Dữ liệu bị đánh cắp thông qua mã độc được chuyển đến một tài khoản GitHub hiện không thể truy cập là "liuende501". Có tới 236 kho lưu trữ đã được dàn dựng trong tài khoản này.
"Làn sóng này sử dụng một kỹ thuật mà chúng tôi gọi là 'Phantom Gyp': thay vì các script vòng đời preinstall hoặc postinstall mà các công cụ bảo mật thường giám sát, kẻ tấn công lạm dụng tệp binding.gyp dung lượng 157 byte để kích hoạt thực thi mã trong khi cài đặt npm, bỏ qua hoàn toàn hầu hết các kiểm tra bảo mật script cài đặt," nhà nghiên cứu Sai Likhith của StepSecurity cho biết.
Giống như trường hợp của Miasma trước đây, chuỗi tấn công được thiết kế để tải xuống và cài đặt môi trường Bun JavaScript, sử dụng nó để tải một trình thu thập thông tin xác thực toàn diện được thiết kế riêng để trích xuất bí mật từ AWS, Google Cloud, Microsoft Azure, HashiCorp Vault, Docker, Kubernetes, GitHub Actions, npm, RubyGems, PyPI, SSH, các trình quản lý mật khẩu và trợ lý AI.
"Khả năng mới lạ và đáng lo ngại nhất của biến thể này là việc nhắm mục tiêu vào các cấu hình trợ lý lập trình AI," công ty cho biết. "Mã độc tiêm các tệp backdoor dai dẳng vào các kho lưu trữ dự án, chúng sẽ thực thi bất cứ khi nào nhà phát triển mở dự án trong IDE có hỗ trợ AI của họ."
Các nhà phát triển đã cài đặt phiên bản bị ảnh hưởng được khuyên nên thay đổi thông tin xác thực (rotate credentials), tắt các script cài đặt và native rebuild theo mặc định, đồng thời đảm bảo các gói được ghim với mã hash tính toàn vẹn (integrity hashes).
Trong một bản cập nhật được chia sẻ tuần này, Red Hat tiết lộ rằng nguyên nhân gốc rễ đằng sau sự cố chuỗi cung ứng Miasma có khả năng là một tài khoản GitHub bị xâm nhập đã được sử dụng để đẩy các commit trái phép vào các kho lưu trữ trong tổ chức RedHatInsights trên GitHub.
"Payload hoạt động trên Linux, macOS và Windows bằng cách tải xuống động môi trường Bun chính xác cho từng nền tảng, mặc dù các trình chạy CI/CD Linux dường như là mục tiêu chính," Microsoft cho biết về chiến dịch này.
"Trên hệ thống của nhà phát triển, mã độc đánh cắp khóa SSH, thông tin xác thực CLI, dữ liệu trình duyệt và ví, trong khi trong môi trường CI/CD, nó quét bộ nhớ của trình chạy GitHub Actions để tìm bí mật, leo thang đặc quyền bằng cách sử dụng sudo không mật khẩu và tái xuất bản các gói bị nhiễm độc với nguồn gốc SLSA giả mạo."
OX Security kể từ đó đã phát hiện thêm các giai đoạn khác trong chuỗi tấn công Miasma, bao gồm việc tìm kiếm các commit GitHub chứa chuỗi "firedalazer" để lấy một payload khác, một tệp JavaScript ("index.js") chứa một phiên bản thay thế của sâu Shai-Hulud, biến việc lây nhiễm thành một vòng lặp vĩnh cửu.
Trong trường hợp này, dữ liệu bị đánh cắp được chuyển ra các kho lưu trữ GitHub công khai, mỗi kho lưu trữ mang mô tả "Miasma : The Spreading Blight". Hiện có 82 kho lưu trữ như vậy được tạo trên các tài khoản người dùng "0tabek16" và "windy629".
"Tác nhân đe dọa có thể thay đổi động các commit 'firedalazer' trong GitHub, tạo ra các phiên bản mới của mã độc, thích ứng hơn và tinh vi hơn," các nhà nghiên cứu bảo mật Moshe Siman Tov Bustan và Nir Zadok cho biết.
"Điều này biến GitHub thành một thứ gì đó nguy hiểm hơn cả một điểm chết (dead drop). Đó là một C2 thích ứng - một hệ thống dựa hơi vào một nền tảng tin cậy, được đưa vào danh sách trắng rộng rãi, khiến việc phát hiện ở cấp độ mạng gần như vô dụng."