Heoanchayyy
Member
-
20/08/2025
-
0
-
8 bài viết
Mini Shai-Hulud: Khi một package npm trở thành backdoor đánh cắp toàn bộ hạ tầng CI/CD
Một cuộc tấn công chuỗi cung ứng phần mềm quy mô lớn vừa được phát hiện trong hệ sinh thái npm sau khi tài khoản atool bị chiếm quyền vào ngày 19/5/2026. Chỉ trong 22 phút, tin tặc đã tự động phát hành 637 phiên bản độc hại lên 317 package khác nhau trong chiến dịch hiện được Microsoft theo dõi dưới tên gọi “Mini Shai-Hulud”. Nhiều thư viện JavaScript phổ biến với hàng triệu lượt tải mỗi tháng bị ảnh hưởng, bao gồm size-sensor, echarts-for-react, @antv/scale và timeago.js.
Điểm đặc biệt của vụ việc không nằm ở kỹ thuật khai thác zero-day hay malware phức tạp trên endpoint, mà ở cách tin tặc đe dọa lợi dụng niềm tin mặc định dành cho các thư viện mã nguồn mở phổ biến. Chỉ cần một package bị đầu độc trong chuỗi phụ thuộc (dependency chain), mã độc có thể lan xuống hàng nghìn pipeline CI/CD gần như ngay lập tức.
Điểm đặc biệt của vụ việc không nằm ở kỹ thuật khai thác zero-day hay malware phức tạp trên endpoint, mà ở cách tin tặc đe dọa lợi dụng niềm tin mặc định dành cho các thư viện mã nguồn mở phổ biến. Chỉ cần một package bị đầu độc trong chuỗi phụ thuộc (dependency chain), mã độc có thể lan xuống hàng nghìn pipeline CI/CD gần như ngay lập tức.
Tấn công vào mắt xích tin cậy nhất của hệ sinh thái npm
Theo phân tích ban đầu, tin tặc đã chiếm quyền một tài khoản maintainer thuộc tổ chức @antv, hệ sinh thái thư viện trực quan hóa dữ liệu được sử dụng rộng rãi trong các ứng dụng dashboard, phân tích dữ liệu và frontend doanh nghiệp.
Sau khi có quyền phát hành package, tin tặc nhanh chóng đưa các phiên bản độc hại vào nhiều thư viện lõi. Do @antv xuất hiện trong chuỗi phụ thuộc của nhiều dự án lớn, mã độc nhanh chóng lan xuống các package liên quan, trong đó đáng chú ý nhất là echarts-for-react với hơn một triệu lượt tải mỗi tuần.
Khác với các chiến dịch phát tán malware thông thường yêu cầu người dùng tự chạy file độc hại, Mini Shai-Hulud lợi dụng cơ chế script cài đặt của npm để kích hoạt payload ngay trong quá trình cài package. Một hook preinstall được nhúng trực tiếp vào thư viện khiến mã độc tự động thực thi mỗi khi developer hoặc hệ thống CI chạy lệnh npm install. Điều này biến quá trình build phần mềm tưởng chừng an toàn thành điểm xâm nhập ban đầu của tin tặc.
Sau khi có quyền phát hành package, tin tặc nhanh chóng đưa các phiên bản độc hại vào nhiều thư viện lõi. Do @antv xuất hiện trong chuỗi phụ thuộc của nhiều dự án lớn, mã độc nhanh chóng lan xuống các package liên quan, trong đó đáng chú ý nhất là echarts-for-react với hơn một triệu lượt tải mỗi tuần.
Khác với các chiến dịch phát tán malware thông thường yêu cầu người dùng tự chạy file độc hại, Mini Shai-Hulud lợi dụng cơ chế script cài đặt của npm để kích hoạt payload ngay trong quá trình cài package. Một hook preinstall được nhúng trực tiếp vào thư viện khiến mã độc tự động thực thi mỗi khi developer hoặc hệ thống CI chạy lệnh npm install. Điều này biến quá trình build phần mềm tưởng chừng an toàn thành điểm xâm nhập ban đầu của tin tặc.
Payload được thiết kế chuyên biệt cho môi trường GitHub Actions
Microsoft cho biết payload chính là một file JavaScript được làm rối mã mạnh với dung lượng khoảng 499 KB. Malware không được thiết kế để hoạt động đại trà trên mọi hệ thống mà chỉ kích hoạt trong những môi trường phù hợp nhằm giảm nguy cơ bị phát hiện trong quá trình phân tích. Điều này cho thấy tin tặc không đơn thuần phát tán mã độc hàng loạt mà đã chủ động xây dựng payload chuyên biệt cho các pipeline CI/CD sử dụng GitHub Actions.Một cơ chế kiểm tra môi trường thực thi được tích hợp trực tiếp trong mã độc để xác định hệ điều hành Linux, môi trường GitHub Actions và đặc điểm hoạt động của runner CI. Nếu không thỏa điều kiện, malware sẽ lập tức thoát tiến trình mà không thực hiện bất kỳ hành vi đáng ngờ nào. Cách tiếp cận này giúp tin tặc né tránh hiệu quả các sandbox phân tích tự động, môi trường nghiên cứu và hệ thống máy trạm thông thường của developer. Đây cũng là lý do khiến payload khó bị phát hiện trong giai đoạn đầu, bởi phần lớn công cụ phân tích chỉ quan sát được một đoạn mã JavaScript đã bị làm rối nhưng không ghi nhận hành vi thực thi thực tế.
Quá trình làm rối mã được triển khai theo hai lớp độc lập nhằm che giấu toàn bộ logic hoạt động của payload. Ở lớp đầu tiên, malware sử dụng hơn 1.700 chuỗi Base64 được hoán vị liên tục trong một mảng xoay vòng để làm nhiễu luồng xử lý. Điều này khiến việc đọc mã nguồn gần như trở nên vô nghĩa nếu không tái dựng chính xác thứ tự thực thi ban đầu.
Lớp thứ hai phức tạp hơn khi sử dụng cơ chế giải mã tùy biến dựa trên PBKDF2 kết hợp SHA-256 để giải mã các chuỗi quan trọng ngay trong thời gian chạy. Thay vì lưu trữ trực tiếp domain điều khiển, tên hàm hoặc các thành phần nhạy cảm dưới dạng rõ ràng, malware chỉ giải mã chúng tại thời điểm cần sử dụng rồi nhanh chóng đưa trở lại trạng thái mã hóa trong bộ nhớ.
Việc chỉ giải mã động trong thời gian chạy khiến quá trình phân tích tĩnh trở nên khó khăn hơn nhiều, bởi các công cụ kiểm tra thông thường gần như không thể nhìn thấy đầy đủ hành vi thực tế của payload nếu không theo dõi trực tiếp quá trình thực thi trong bộ nhớ. Đây là kỹ thuật ngày càng phổ biến trong các chiến dịch tấn công chuỗi cung ứng hiện đại nhằm kéo dài thời gian ẩn mình và làm chậm quá trình điều tra.
Mục tiêu chính: đánh cắp secret trong CI/CD pipeline
Khác với nhiều chiến dịch tấn công chuỗi cung ứng trước đây thường tập trung vào phá hoại hệ thống hoặc âm thầm khai thác tài nguyên để đào tiền mã hóa, Mini Shai-Hulud được xây dựng gần như hoàn toàn để đánh cắp credential và secret trong môi trường CI/CD. Điều này cho thấy mục tiêu chính của tin tặc không phải gây gián đoạn tức thời mà là chiếm quyền truy cập lâu dài vào hạ tầng phát triển phần mềm và cloud infrastructure của nạn nhân.Payload chủ động truy tìm secret trên nhiều nền tảng khác nhau như GitHub Actions, Amazon Web Services (AWS), HashiCorp Vault, Kubernetes, npm và cả 1Password. Thay vì chỉ thu thập các biến môi trường thông thường, malware còn tìm cách truy xuất trực tiếp bộ nhớ tiến trình của GitHub Actions runner nhằm lấy các secret đã được inject trong quá trình build hoặc deploy ứng dụng.
Kỹ thuật này đặc biệt nguy hiểm bởi GitHub Actions vốn chỉ triển khai cơ chế masking secret khi dữ liệu xuất hiện trên log, trong khi các giá trị thực tế vẫn tồn tại trong bộ nhớ của tiến trình đang chạy. Bằng cách đọc trực tiếp vùng nhớ này, malware có thể thu thập token, API key hoặc credential mà không cần tương tác với cơ chế bảo vệ mặc định của nền tảng.
Đối với môi trường AWS, malware gọi Instance Metadata Service để lấy temporary credential được gán cho instance, sau đó tiếp tục truy vấn AWS Secrets Manager trên nhiều region khác nhau nhằm mở rộng phạm vi đánh cắp dữ liệu. Điều này cho phép tin tặc không chỉ lấy credential của riêng pipeline CI/CD mà còn có khả năng tiếp cận thêm nhiều secret liên quan tới hạ tầng cloud của doanh nghiệp.
Trong môi trường Kubernetes, payload tìm kiếm token của các tài khoản dịch vụ, rà soát những dữ liệu bí mật được lưu trong từng namespace và thu thập thông tin về cụm máy chủ Kubernetes nhằm tìm cách mở rộng quyền truy cập trong hệ thống quản lý container. Nếu các token này có đặc quyền cao, tin tặc có thể lợi dụng chúng để xâm nhập sâu hơn vào hạ tầng production hoặc các dịch vụ nội bộ đang vận hành.
Đối với HashiCorp Vault, malware rà soát nhiều đường dẫn lưu token khác nhau nhằm tìm kiếm các credential vẫn còn hiệu lực. Trong khi đó, với 1Password, payload thậm chí còn thử vượt qua cơ chế xác thực hai lớp để chiếm quyền truy cập vào credential quản trị chính. Việc đồng thời nhắm tới nhiều nền tảng quản lý secret và dịch vụ cloud cho thấy tin tặc hiểu rất rõ cách vận hành của các pipeline DevOps hiện đại cũng như tầm quan trọng của hệ thống CI/CD trong hạ tầng doanh nghiệp hiện nay.
Duy trì truy cập và giả mạo chuỗi tin cậy phần mềm
Sau khi đánh cắp credential, malware tiếp tục triển khai nhiều cơ chế persistence nhằm duy trì quyền truy cập lâu dài vào môi trường CI/CD và hạ tầng bị xâm nhập. Payload tự động tải và cài đặt Bun runtime, một nền tảng JavaScript runtime hiệu năng cao, để thực thi các stage payload tiếp theo mà không phụ thuộc hoàn toàn vào môi trường Node.js mặc định của hệ thống. Nhờ đó, tin tặc có thể linh hoạt triển khai thêm module đánh cắp dữ liệu hoặc thực thi lệnh từ xa sau khi quá trình xâm nhập ban đầu hoàn tất.Đồng thời, malware còn can thiệp trực tiếp vào cấu hình hệ thống nhằm mở rộng khả năng kiểm soát. Payload chỉnh sửa file hosts để thay đổi cơ chế phân giải tên miền, can thiệp cấu hình DNS và tạo bind mount nhằm chèn thêm quy tắc sudo không cần mật khẩu. Nếu thành công, tin tặc có thể thực thi lệnh với đặc quyền cao mà không cần xác thực lại, từ đó duy trì quyền truy cập ngay cả khi credential ban đầu bị thay đổi hoặc thu hồi.
Một trong những chi tiết đáng chú ý nhất của chiến dịch là khả năng giả mạo provenance attestation thông qua Sigstore, cơ chế được sử dụng để xác minh nguồn gốc và tính hợp lệ của artifact trong chuỗi cung ứng phần mềm. Malware cố gắng tạo ra các bằng chứng xác thực giả nhằm khiến package độc hại trông giống như được build và phát hành từ nguồn hợp pháp.
Hiện nay, nhiều tổ chức đang dựa vào provenance verification như một lớp bảo vệ quan trọng để kiểm tra tính toàn vẹn của package và pipeline build. Vì vậy, nếu cơ chế xác thực nguồn gốc bị qua mặt, package độc hại hoàn toàn có thể vượt qua các bước kiểm tra bảo mật tự động và đi sâu vào môi trường production mà không bị phát hiện. Điều này cho thấy các nhóm tấn công hiện nay không chỉ nhắm vào developer hay máy chủ CI/CD, mà còn bắt đầu tìm cách thao túng chính những cơ chế bảo mật được xây dựng để bảo vệ chuỗi cung ứng phần mềm hiện đại.
GitHub API bị biến thành kênh exfiltration dự phòng
Dữ liệu đánh cắp được gửi về máy chủ điều khiển thông qua kết nối HTTPS tới domain t.m-kosche[.]com. Tuy nhiên, chiến dịch còn triển khai thêm một cơ chế dự phòng tinh vi hơn thông qua GitHub Git Data API nhằm đảm bảo quá trình exfiltration không bị gián đoạn nếu hạ tầng điều khiển chính gặp sự cố hoặc bị chặn.Nếu không thể gửi dữ liệu trực tiếp về máy chủ điều khiển, malware sẽ tự động tạo commit trên các branch không được bảo vệ của repository nạn nhân để lưu trữ thông tin đánh cắp. Nói cách khác, GitHub bị lợi dụng như một kênh trung chuyển dữ liệu bí mật thay vì chỉ là nền tảng quản lý mã nguồn thông thường.
Kỹ thuật này đặc biệt nguy hiểm vì lưu lượng giao tiếp với GitHub thường được xem là hợp pháp trong môi trường doanh nghiệp và rất khó bị firewall hoặc hệ thống giám sát chặn lại. Đồng thời, các thao tác tạo commit hay tương tác với GitHub API cũng dễ hòa lẫn vào hoạt động CI/CD bình thường, khiến quá trình phát hiện trở nên phức tạp hơn nhiều.
Microsoft cho biết đã phát hiện hơn 2.200 public repository bị tạo trái phép dưới tài khoản của nạn nhân. Đây được xem như một trong những dấu hiệu nhận diện nổi bật của chiến dịch Mini Shai-Hulud, đồng thời cho thấy quy mô ảnh hưởng thực tế có thể đã lan rộng tới hàng nghìn pipeline phát triển phần mềm khác nhau.
Quy mô ảnh hưởng và phản ứng khẩn cấp
Ngay sau khi chiến dịch bị phát hiện, GitHub đã triển khai hàng loạt biện pháp ứng phó nhằm ngăn chặn nguy cơ tiếp tục phát tán mã độc trong hệ sinh thái npm. Theo Microsoft, hơn 640 package độc hại đã bị gỡ bỏ, đồng thời hơn 61.000 npm token có quyền publish cũng bị vô hiệu hóa để hạn chế nguy cơ tin tặc tiếp tục phát hành package bị cài backdoor.Bên cạnh đó, GitHub còn phát hành cảnh báo thông qua Dependabot và npm audit nhằm hỗ trợ developer nhanh chóng xác định các dependency bị ảnh hưởng trong pipeline và môi trường build hiện tại. Các maintainer của @antv cũng xác nhận sự cố đã được xử lý sau khi tài khoản bị chiếm quyền được kiểm soát trở lại.
Tuy nhiên, phạm vi ảnh hưởng thực tế có thể lớn hơn nhiều so với những gì đã được ghi nhận ban đầu. Do đặc tính lan truyền của dependency chain trong hệ sinh thái JavaScript, chỉ một package lõi bị đầu độc cũng đủ kéo theo hàng loạt thư viện downstream và pipeline CI/CD liên quan. Điều này đồng nghĩa nhiều tổ chức có thể đã vô tình chạy payload độc hại trong quá trình build hoặc deploy trước khi các package bị gỡ khỏi npm registry.
Các indicator of compromise (IoC) được công bố bao gồm:
- Các package được tài khoản atool ([email protected]) phát hành trong khoảng thời gian từ 01:44 đến 02:06 UTC ngày 19/05/2026
- Script preinstall chứa lệnh: bun run index.js
- Payload có mã SHA-256: a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c
- Commit GitHub đáng ngờ: antvis/G2#1916faa365f2788b6e193514872d51a242876569 với thông báo “New package”
- Sự xuất hiện của dependency @antv/setup trong optionalDependencies,
- Dependency @antv/setup được tham chiếu trực tiếp tới GitHub: github:antvis/G2#1916faa365f2788b6e193514872d51a242876569
- Các repository GitHub mang chủ đề Dune chứa file: results/results-<timestamp>-<counter>.json
- Mô tả repository xuất hiện các biến thể của câu: "Shai-Hulud: The spice must flow again"
- Lưu lượng HTTP gửi tới máy chủ điều khiển với User-Agent python-requests/2.31.0 từ các tiến trình Bun
- Sự xuất hiện bất thường của file.claude/settings.json chứa hook SessionStart
- Sự xuất hiện bất thường của.vscode/tasks.json với tác vụ được kích hoạt qua sự kiện folderOpen.
Khi CI/CD trở thành mục tiêu giá trị cao mới của tin tặc
Mini Shai-Hulud cho thấy một sự dịch chuyển rõ rệt trong chiến thuật của các nhóm tấn công hiện đại. Thay vì khai thác trực tiếp endpoint hoặc máy chủ doanh nghiệp, mục tiêu giờ đây là toàn bộ quy trình phát triển phần mềm và hạ tầng CI/CD phía sau nó.Hiện nay, CI/CD pipeline không chỉ đơn thuần là hệ thống build ứng dụng mà còn nắm giữ cloud credential, signing key, token triển khai production cùng hàng loạt secret quan trọng của doanh nghiệp. Chỉ cần chiếm được một package phổ biến trong chuỗi phụ thuộc, tin tặc có thể mở rộng phạm vi ảnh hưởng tới hàng nghìn tổ chức cùng lúc mà không cần xâm nhập trực tiếp từng hệ thống riêng lẻ.
Vụ việc cũng cho thấy mức độ phụ thuộc ngày càng lớn vào mã nguồn mở đang tạo ra thêm nhiều rủi ro cho chuỗi phát triển phần mềm hiện đại. Khi hàng nghìn package bên thứ ba được tích hợp mặc định vào pipeline phát triển, chỉ một maintainer bị chiếm quyền cũng có thể trở thành điểm khởi đầu cho một chiến dịch xâm nhập diện rộng vào hạ tầng doanh nghiệp trên toàn cầu.
Các biện pháp giảm thiểu
Microsoft khuyến nghị các tổ chức:- Rà soát dependency tree liên quan tới @antv
- Kiểm tra các public repository bất thường được tạo gần đây
- Thay đổi toàn bộ credential có khả năng đã bị lộ
- Pin version package thay vì sử dụng version động
- Chạy npm install --ignore-scripts khi phù hợp
- Giới hạn quyền của GitHub Actions token
- Triển khai cơ chế provenance verification độc lập
- Cô lập runner CI/CD khỏi hạ tầng production