Phát hiện phần mềm độc hại chủ đề Shai-Hulud trong thư viện huấn luyện AI PyTorch Lightning

30 tháng 4, 2026·5 phút đọc

Gói 'lightning' trên PyPI đã bị xâm phạm trong một cuộc tấn công chuỗi cung ứng, ảnh hưởng đến các phiên bản 2.6.2 và 2.6.3. Malware này đánh cắp thông tin xác thực, khóa đám mây và cố tình lây nhiễm các kho lưu trữ GitHub với chủ đề lấy cảm hứng từ bộ phim Dune.

Phát hiện phần mềm độc hại chủ đề Shai-Hulud trong thư viện huấn luyện AI PyTorch Lightning

Gói phần mềm lightning trên PyPI, một khung học sâu (deep learning framework) được sử dụng rộng rãi, vừa trở thành nạn nhân của một cuộc tấn công chuỗi cung ứng nghiêm trọng. Cuộc tấn công này ảnh hưởng đến các phiên bản 2.6.2 và 2.6.3 được phát hành vào ngày 30 tháng 4 năm 2026.

Các nhóm phát triển đang xây dựng bộ phân loại hình ảnh, tinh chỉnh mô hình ngôn ngữ lớn (LLM), chạy các mô hình khuếch tán (diffusion models) hoặc phát triển công cụ dự báo chuỗi thời gian thường có lightning trong cây phụ thuộc của họ. Chỉ cần chạy lệnh pip install lightning là đủ để kích hoạt mã độc.

Cơ chế hoạt động của mã độc

Các phiên bản độc hại chứa một thư mục ẩn _runtime với payload JavaScript bị làm rối mã (obfuscated) thực thi tự động khi mô-đun được nhập. Cuộc tấn công này đánh cắp thông tin xác thực, mã thông báo xác thực (authentication tokens), biến môi trường và bí mật đám mây, đồng thời cố tình đầu độc các kho lưu trữ GitHub.

Đáng chú ý, mã độc này mang chủ đề Shai-Hulud (một sinh vật khổng lồ trong vũ trụ Dune), bao gồm việc tạo các kho lưu trữ công khai có tên EveryBoiWeBuildIsaWormBoi. Các nhà nghiên cứu tin rằng đây là tác phẩm của cùng một tác nhân đe dọa đứng sau chiến dịch mini Shai-Hulud trước đó.

Lây lan chéo hệ sinh thái: Từ PyPI sang npm

Khác với mini Shai-Hulud vốn nhắm trực tiếp vào npm, điểm nhập vào lần này là PyPI. Tuy nhiên, payload mã độc vẫn là JavaScript và sự lây lan sâu (worm propagation) diễn ra thông qua npm.

Sau khi chạy, nếu mã độc tìm thấy thông tin xác thực để xuất bản npm, nó sẽ chèn một tệp setup.mjsrouter_runtime.js vào mọi gói mà mã thông báo đó có thể xuất bản. Nó thiết lập scripts.preinstall để thực thi tệp dropper, tăng phiên bản vá (patch version) và xuất bản lại. Bất kỳ nhà phát triển hạ nguồn nào cài đặt một trong các gói đó sẽ chạy toàn bộ mã độc trên máy của họ, khiến mã thông báo bị đánh cắp và các gói bị lây nhiễm.

Phương thức đánh cắp dữ liệu

Thành phần exfiltration (tống xuất dữ liệu) chia sẻ thiết kế của nó với cơ chế "Mini Shai-Hulud" từ chiến dịch trước, sử dụng bốn kênh song song để đảm bảo dữ liệu bị đánh cắp vẫn được gửi đi ngay cả khi các đường dẫn riêng lẻ bị chặn:

  1. HTTPS POST đến C2: Dữ liệu bị đánh cắp được POST ngay lập tức đến máy chủ do kẻ tấn công kiểm soát qua cổng 443.
  2. GitHub commit search dead-drop: Mã độc thăm dò API tìm kiếm commit của GitHub để tìm các thông điệp commit có tiền tố EveryBoiWeBuildIsAWormyBoi, chứa mã thông báo được mã hóa base64 kép.
  3. Kho lưu trữ GitHub công khai do kẻ tấn công kiểm soát: Một kho lưu trữ công cộng mới được tạo với tên ngẫu nhiên theo phong cách Dune và mô tả "A Mini Shai-Hulud has Appeared". Thông tin xác thực bị đánh cắp được commit vào tệp results/results--.json.
  4. Đẩy vào kho của nạn nhân: Nếu mã độc lấy được mã thông báo máy chủ GitHub ghs_, nó sẽ đẩy dữ liệu bị đánh cắp trực tiếp đến tất cả các nhánh của GITHUB_REPOSITORY của nạn nhân.

Mục tiêu bị đánh cắp

Mã độc nhắm đến thông tin xác thực trên các tệp cục bộ, môi trường, đường ống CI/CD và nhà cung cấp đám mây:

  • Hệ thống tệp: Quét hơn 80 đường dẫn tệp thông tin xác thực cho các mã thông báo ghp_, gho_npm_.
  • Shell / Môi trường: Chạy gh auth token và đổ tất cả các biến môi trường từ process.env.
  • GitHub Actions: Trên các trình chạy Linux, nó đổ bộ nhớ quy trình Runner.Worker và trích xuất tất cả các bí mật được đánh dấu isSecret:true.
  • Đám mây: Nó cố gắng truy cập và lấy bí mật từ AWS (Secrets Manager, SSM), Azure (Key Vault) và GCP (Secret Manager).

Tính bền vững thông qua công cụ phát triển

Khi đã xâm nhập vào một kho lưu trữ, mã độc đặt các hook tính bền vững nhắm đến hai công cụ phát triển phổ biến nhất: Claude Code và VS Code. Đây có thể là một trong những trường hợp đầu tiên được ghi nhận về phần mềm độc hại lạm dụng hệ thống hook của Claude Code trong một cuộc tấn công thực tế.

  • Claude Code: Mã độc ghi một hook SessionStart vào tệp .claude/settings.json của kho lưu trữ, kích hoạt mỗi lần nhà phát triển mở Claude Code trong kho bị nhiễm.
  • VS Code: Một hook song song nhắm đến người dùng VS Code thông qua một tác vụ runOn: folderOpen chạy mỗi khi thư mục dự án được mở.
  • Payload thưởng: Nếu mã độc giữ mã thông báo GitHub có quyền ghi, nó sẽ đẩy một quy trình làm việc (workflow) GitHub Actions độc hại có tên "Formatter" để đổ tất cả các bí mật của kho lưu trữ.

Dấu hiệu bị xâm phạm (IOC)

Bạn nên tìm kiếm các dấu hiệu sau để kiểm tra xem hệ thống của mình có bị ảnh hưởng hay không:

  • Thông điệp commit có tiền tố EveryBoiWeBuildIsAWormyBoi.
  • Các kho lưu trữ GitHub có mô tả: "A Mini Shui-Hulud has Appeared".
  • Các gói bị ảnh hưởng: [email protected][email protected].
  • Các tệp/biểu tượng hệ thống:
    • _runtime/start.py
    • _runtime/routerruntime.js (Payload JavaScript 14.8 MB)
    • .claude/router_runtime.js
    • .claude/settings.json
    • .claude/setup.mjs
    • .vscode/tasks.json
    • .vscode/setup.mjs

Nếu bạn phát hiện mình đang sử dụng các phiên bản bị ảnh hưởng, hãy ngay lập tức xoay vòng (rotate) các mã thông báo GitHub, thông tin xác thực đám mây hoặc khóa API có thể đã có mặt trong môi trường bị ảnh hưởng và kiểm tra kho lưu trữ của bạn để loại bỏ các tệp độc hại được liệt kê trên.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗