Shai-Hulud Trở Lại: Khi Chỉ Một Lệnh pip install Có Thể Đánh Cắp Toàn Bộ Secrets Của Bạn

Search for a command to run...

No comments yet. Be the first to comment.
Tổng Quan Một chiến dịch tấn công bằng dòng mã độc tống tiền mới mang tên Spirals đã ghi nhận vụ việc đầu tiên mã hóa thành công toàn bộ hệ thống của một công ty dịch vụ IT tại Nam Á chỉ trong vòng ch

Tóm tắt rủi ro Bạn bảo một web agent: "tóm tắt giúp tôi các review trên trang này". Một review giả do kẻ tấn công đăng lên khiến agent bấm nhầm nút "Buy Now", và đơn hàng được đặt. Không malware, khôn

Campaign Summary A Russian-speaking criminal group tracked by Cisco Talos as UAT-11795 has been running a continuous campaign since at least June 2025, distributing malware inside trojanized installer

Tóm tắt chiến dịch Nhóm tội phạm nói tiếng Nga được Cisco Talos theo dõi dưới định danh UAT-11795 đã hoạt động liên tục từ ít nhất tháng 06/2025, phát tán mã độc thông qua các bộ cài đặt phần mềm hợp

Tóm Tắt Chiến Dịch Vào ngày 14/07/2026, kẻ tấn công đã xâm nhập thành công tổ chức AsyncAPI trên npm — một trong những dự án mã nguồn mở phổ biến nhất cho các API event-driven, và tiêm mã độc vào 4 gó

Tháng 6/2026 đã đánh dấu một sự leo thang đáng báo động của chiến dịch malware supply chain mang tên Shai-Hulud, khi các biến thể mới đã mở rộng từ hệ sinh thái Node.js sang Python, ảnh hưởng trực tiếp tới hơn 100 package trên hai kho phần mềm lớn nhất thế giới là npm và PyPI.
Ban đầu xuất hiện vào cuối năm 2025 dưới dạng một malware chuyên đánh cắp secrets trong môi trường phát triển phần mềm, Shai-Hulud đã nhanh chóng tiến hóa thành một loại worm có khả năng tự lây lan thông qua chính các package nguồn mở bị xâm phạm. Sau khi mã nguồn của biến thể Mini Shai-Hulud được công khai bởi nhóm TeamPCP vào tháng 5/2026, nhiều nhóm tấn công khác đã nhanh chóng tạo ra các phiên bản mới mang tên Miasma và Hades.
Các chiến dịch này đã làm nhiễm độc hơn 100 package thuộc nhiều lĩnh vực khác nhau, bao gồm các package được sử dụng trong môi trường doanh nghiệp, công cụ DevOps, các thư viện bioinformatics, AI tooling và thậm chí cả các package liên quan tới hệ sinh thái Red Hat.
Mục tiêu chính của malware là thu thập GitHub Personal Access Tokens (PAT), cloud credentials (AWS, Azure, GCP), SSH keys, CI/CD secrets, Docker configurations và các cấu hình liên quan đến AI coding assistants như Cursor, Claude Code hay GitHub Copilot.
| Thời gian | Sự kiện |
|---|---|
| Sep 2025 | Shai-Hulud lần đầu được phát hiện trên npm dưới dạng malware đánh cắp secrets |
| Q1 2026 | Một số thành phần của chiến dịch liên quan đến vụ compromise Trivy vulnerability scanner |
| Mid-May 2026 | TeamPCP công khai source code Mini Shai-Hulud |
| Cuối May 2026 | Các biến thể clone bắt đầu xuất hiện trên GitHub |
| 01/06/2026 | Red Hat xác nhận 32 package npm bị nhiễm malware |
| 01–05/06/2026 | Wave Miasma đầu tiên xuất hiện, ảnh hưởng hơn 57 package npm với trên 300 malicious versions |
| 07/06/2026 | Socket phát hiện Hades Wave 1 trên PyPI, ảnh hưởng 19 package và 37 malicious wheels |
| 08/06/2026 | Hades Wave 2 xuất hiện với hơn 29 package mới, tập trung vào bioinformatics và MCP ecosystem |
| 09/06/2026 | SecurityWeek ghi nhận tổng cộng 471 malicious artifacts liên quan tới chiến dịch |
| Hiện tại | Hoạt động lây lan vẫn đang được theo dõi |
Miasma Mini Shai-Hulud Supply Chain Attack - Socket
Điểm khác biệt khiến Shai-Hulud trở thành một trong những chiến dịch supply chain đáng chú ý nhất trong năm 2026 nằm ở khả năng kết hợp giữa đánh cắp credentials, tự lây lan sang package khác và lợi dụng chính hạ tầng phát triển phần mềm của nạn nhân để mở rộng quy mô tấn công. Không giống các chiến dịch typosquatting truyền thống vốn phụ thuộc vào việc đánh lừa người dùng cài đặt package giả mạo, Shai-Hulud nhắm trực tiếp vào các package hợp pháp đã bị xâm phạm hoặc các tài khoản maintainer bị đánh cắp.
Bước đầu tiên của chiến dịch là đưa mã độc vào các package hợp pháp. Trong nhiều trường hợp, kẻ tấn công không tạo package giả mà lợi dụng quyền truy cập vào tài khoản maintainer hoặc quy trình phát hành phần mềm để chèn payload vào phiên bản mới của package.
Khi người dùng thực hiện: npm install <package> hoặc pip install <package> thì họ chỉ nghĩ rằng mình đang cài các package còn thiếu nhưng không, thay vào đó họ đã cài đặt một package hợp lệ nhưng đã được bổ sung thêm thành phần độc hại.
Điều này khiến việc phát hiện trở nên khó khăn hơn đáng kể bởi tên package, metadata và chức năng chính của thư viện vẫn hoàn toàn bình thường.
Đối với biến thể Miasma trên npm, malware tận dụng cơ chế build native modules của Node.js để thực thi payload trong quá trình cài đặt package.
File binding.gyp được thiết kế để kích hoạt quá trình build thông qua node-gyp. Khi tiến trình build diễn ra, mã độc sẽ được thực thi mà không yêu cầu bất kỳ hành động bổ sung nào từ người dùng.
Kỹ thuật này đặc biệt hiệu quả vì các developer thường xem quá trình build dependency là hành vi bình thường và ít khi theo dõi chi tiết những gì đang diễn ra trong giai đoạn cài đặt package.
Trong khi đó, biến thể Hades trên PyPI sử dụng một kỹ thuật tinh vi hơn nhiều thông qua cơ chế .pth của Python.
Sau khi package được cài đặt, malware sẽ thả một file có dạng: <package>-setup.pth vào thư mục site-packages.
Khác với các file Python thông thường, mọi file .pth đều được Python interpreter xử lý tự động trong quá trình khởi động. Điều này đồng nghĩa với việc mã độc có thể được thực thi ngay khi người dùng mở Python hoặc bất kỳ ứng dụng nào sử dụng Python.
Để hình dung rõ hơn thì chúng ta có thể xem chuỗi lây nhiễm như sau:
Đây là một trong những kỹ thuật nguy hiểm nhất được ghi nhận trong chiến dịch Hades bởi malware không cần được import hoặc gọi trực tiếp. Chỉ cần một tiến trình Python khởi động, payload đã có thể được kích hoạt.
Sau khi được kích hoạt, Hades sẽ tải Bun Runtime từ GitHub.
Việc lựa chọn Bun thay vì Node.js cho thấy tác nhân đe dọa đang hướng tới khả năng tái sử dụng mã nguồn giữa nhiều nền tảng khác nhau. Payload chính được viết bằng JavaScript và được lưu trong file _index.js với nhiều lớp obfuscation nhằm tránh bị phát hiện.
Các thành phần này chịu trách nhiệm:
Thu thập thông tin hệ thống
Truy cập credentials
Kết nối đến hạ tầng điều khiển
Chuẩn bị cho giai đoạn tự lây lan
Sau khi giành được quyền thực thi trên hệ thống nạn nhân, malware bắt đầu tìm kiếm các thông tin xác thực có giá trị.
Mục tiêu bao gồm:
GitHub Personal Access Tokens
GitHub Actions Secrets
AWS Credentials
Azure Credentials
GCP Service Accounts
SSH Keys
Docker Configurations
.env Files
Kubernetes Tokens
AI Assistant Configurations
Các nhà nghiên cứu ghi nhận Hades đặc biệt quan tâm đến các môi trường phát triển hiện đại, nơi developer thường lưu trữ nhiều loại secrets trên cùng một thiết bị.
Ngoài cloud credentials và SSH keys, malware còn thu thập cấu hình từ các công cụ AI coding assistant như GitHub Copilot, Cursor và Claude Code, cho thấy các tác nhân đe dọa đang bắt đầu mở rộng mục tiêu sang hệ sinh thái AI development.
Một điểm đáng chú ý khác là malware không sử dụng máy chủ C2 truyền thống.
Thay vào đó, dữ liệu đánh cắp được đẩy lên các GitHub repositories do kẻ tấn công kiểm soát.
Việc sử dụng GitHub làm kênh exfiltration giúp lưu lượng mạng trông giống hoạt động phát triển phần mềm thông thường, từ đó giảm khả năng bị phát hiện bởi các giải pháp giám sát mạng.
Đây là giai đoạn khiến Shai-Hulud trở nên khác biệt so với phần lớn malware supply chain từng được ghi nhận trước đây.
Sau khi đánh cắp được credentials, malware sẽ tìm cách truy cập: GitHub repositories, npm accounts, PyPI accounts, CI/CD pipelines. Từ đó phát hành thêm các package độc hại mới.
Chu trình này tạo thành một vòng lặp tự nhân rộng, biến chiến dịch từ một cuộc tấn công đánh cắp dữ liệu đơn lẻ thành một supply-chain worm có khả năng lây lan theo chiều ngang trong cùng hệ sinh thái phần mềm.
| Danh mục | Ảnh hưởng |
|---|---|
| Quy mô | Hơn 100 package npm và PyPI bị nhiễm, tạo ra 471+ malicious artifacts |
| Đối tượng bị nhắm | Developer, Maintainer, DevOps, AI Engineers, Bioinformatics Researchers |
| Package bị ảnh hưởng | npm packages, PyPI packages, AI tooling, Bioinformatics libraries, MCP ecosystem |
| Dữ liệu bị đánh cắp | GitHub PAT, GitHub Actions Tokens, AWS/Azure/GCP Credentials, SSH Keys, Docker Configs, .env files |
| AI Assets | Cấu hình và token của GitHub Copilot, Cursor, Claude Code và các AI Coding Assistant |
| Tác động đến Developer | Mất quyền kiểm soát GitHub account, lộ source code, lộ secrets và tài nguyên cloud |
| Tác động đến Doanh nghiệp | Compromise CI/CD, phát hành package độc hại, rủi ro supply chain lan sang khách hàng |
| Tác động đến Cloud | Truy cập trái phép AWS, Azure, GCP, Kubernetes clusters và tài nguyên AI/ML |
| Khả năng lây lan | Malware sử dụng credentials đánh cắp để tiếp tục publish package độc hại mới |
| Kênh Exfiltration | GitHub repositories được sử dụng làm C2 và nơi lưu trữ dữ liệu đánh cắp |
| Điểm nguy hiểm nhất | Đây là một trong những chiến dịch đầu tiên có khả năng self-propagating supply-chain worm trên npm/PyPI |
| Mức độ rủi ro | Critical – Có khả năng ảnh hưởng đồng thời đến developer, source code, CI/CD và cloud infrastructure |
| Tactic | Technique | ID | Mô tả |
|---|---|---|---|
| Initial Access | Supply Chain Compromise | T1195.001 | Trojanized packages trên PyPI/NPM |
| Execution | Command and Scripting Interpreter: Python | T1059.006 | .pth file abuse → Python startup hook |
| Execution | Command and Scripting Interpreter: JavaScript | T1059.007 | Bun runtime execute _index.js |
| Persistence | Boot or Logon Initialization Scripts | T1037 | .pth file persist across Python sessions |
| Credential Access | Credentials from Password Stores | T1555 | Harvest từ .env, configs |
| Credential Access | Steal Application Access Token | T1528 | GitHub PAT, cloud tokens |
| Collection | Data from Local System | T1005 | AWS/GCP keys, SSH keys |
| Exfiltration | Exfiltration to Cloud Storage | T1567 | GitHub repos làm C2/exfil |
| Defense Evasion | Obfuscated Files or Information | T1027 | _index.js obfuscated, encrypted components |
| Defense Evasion | Process Injection | T1055 | Memory read /proc/pid/mem, Mach APIs |
| Lateral Movement | Account Manipulation | T1098 | Dùng stolen tokens để infect packages khác |
Từ góc độ phân tích mối đe dọa, Shai-Hulud không đơn thuần là một chiến dịch đánh cắp credentials mà là dấu hiệu cho thấy các cuộc tấn công supply chain đang bước sang một giai đoạn mới: tự động hóa, tự lây lan và có khả năng mở rộng ở quy mô công nghiệp.
Điểm đáng chú ý nhất của chiến dịch này nằm ở khả năng self-propagation theo chiều ngang trong cùng hệ sinh thái phần mềm. Trong nhiều năm qua, các cuộc tấn công chuỗi cung ứng phổ biến thường xoay quanh typosquatting, dependency confusion hoặc chiếm quyền một số package phổ biến để phát tán mã độc. Tuy nhiên, Shai-Hulud đã tiến xa hơn khi sử dụng chính các credentials bị đánh cắp để tiếp tục xâm nhập tài khoản maintainer, CI/CD pipeline hoặc repository khác, từ đó phát hành thêm các phiên bản package độc hại mới. Mô hình lây lan này khiến malware hoạt động tương tự một "worm" trong hệ sinh thái mã nguồn mở, nơi mỗi nạn nhân mới có thể trở thành bàn đạp cho các đợt tấn công tiếp theo.
Đối với Việt Nam, chiến dịch này có mức độ liên quan rất cao. Hầu hết các nhóm phát triển phần mềm hiện nay đều phụ thuộc vào các package từ npm và PyPI trong quá trình phát triển sản phẩm. Việc sử dụng các lệnh như pip install hoặc npm install gần như diễn ra hàng ngày trong môi trường làm việc. Trong khi đó, nhiều doanh nghiệp vẫn tập trung vào quét lỗ hổng mã nguồn hoặc kiểm tra dependencies trước khi triển khai mà chưa đầu tư tương xứng cho các giải pháp giám sát hành vi thực thi (runtime security) trên máy phát triển và hệ thống CI/CD. Điều này tạo ra khoảng trống đáng kể khi các kỹ thuật như .pth startup hook của Hades có thể thực thi mã độc mà không cần tương tác trực tiếp từ người dùng.
Trước tiên, hãy kiểm tra lại các package đã cài đặt hoặc cập nhật trong thời gian gần đây, đặc biệt là các thư viện liên quan đến AI, machine learning, bioinformatics hoặc các package mới được giới thiệu trên mạng xã hội và diễn đàn kỹ thuật.
Nếu từng cài đặt một trong các package nằm trong danh sách bị ảnh hưởng, hãy coi toàn bộ credentials trên máy phát triển là có khả năng đã bị lộ. Người dùng nên:
Đổi ngay GitHub Personal Access Token (PAT)
Tạo mới SSH Keys
Thu hồi và cấp lại API Keys
Thay đổi các cloud credentials đang sử dụng
Kiểm tra lịch sử đăng nhập GitHub và các nền tảng cloud
Các nhóm phát triển cần hạn chế việc cài đặt package trực tiếp từ Internet mà không thông qua quy trình đánh giá bảo mật.
Một số biện pháp nên áp dụng ngay:
Chỉ sử dụng package từ nguồn đáng tin cậy
Kiểm tra lịch sử cập nhật của package trước khi nâng cấp phiên bản
Pin version thay vì sử dụng phiên bản mới nhất
Xác thực checksum hoặc hash của package quan trọng
Thường xuyên rà soát dependency tree
Đặc biệt, không nên cấp quyền quá mức cho các token được sử dụng trong môi trường phát triển. Các GitHub PAT hoặc cloud credentials chỉ nên được cấp đúng phạm vi cần thiết để giảm thiểu thiệt hại nếu bị đánh cắp.
Các tổ chức cần xem các máy tính của lập trình viên là mục tiêu tấn công có giá trị cao, bởi đây là nơi lưu trữ source code, credentials và quyền truy cập vào hệ thống CI/CD.
Doanh nghiệp nên:
Giám sát hoạt động bất thường trên GitHub, GitLab và các nền tảng cloud
Áp dụng xác thực đa yếu tố (MFA) cho tất cả tài khoản quan trọng
Thường xuyên luân chuyển (rotate) access tokens và secrets
Tách biệt môi trường phát triển với môi trường sản xuất
Triển khai giải pháp phát hiện hành vi bất thường trên endpoint
Ngoài ra, cần xây dựng quy trình ứng phó khi phát hiện package bị compromise, bao gồm việc thu hồi credentials, đánh giá phạm vi ảnh hưởng và kiểm tra các package nội bộ đã phát hành.
dc48b09b2a5954f7ff79ab8a2fd80202bd3b59c08c7cdbc6025aa923cb4c0efe (Variant 1, 4.8 MB, 17 packages)
e1342a80d4b5e83d2c7c22e1e0aaa95f2d88e3dbf0d853a4994b180c93a4b17d (Variant 2, 4.7 MB, 2 packages)
c539766062555d47716f8432e73adbe3a0c0c954a0b6c4005017a668975e275c
*-setup.pth
_index.js
.bun_ran
bun-v1.3.13
oven-sh/bun/releases/download
urllib.request
urlretrieve
tempfile.gettempdir
hxxps://api[.]anthropic[.]com/v1/api - legitimate Anthropic API host abused as a camouflage exfiltration destinationHades - The End for the Damned
IfYouYankThisTokenItWillNukeTheComputerOfTheOwnerFully
results/results-*.json
format-results
Run Copilot
Shai-Hulud Descends to Hades: Miasma Worm Campaign Spreads w...
New Shai-Hulud attack trojanizes 19 science-focused PyPI packages
Shai-Hulud Malware Campaign Abuses 23 PyPI Packages in Developer-Focused Attack