Package PyPI lightning (PyTorch Lightning — framework deep learning được dùng rộng rãi) bị compromise trong supply chain attack ảnh hưởng version 2.6.2 và 2.6.3 publish ngày 30/04/2026. Team build image classifier, fine-tune LLM, chạy diffusion model, hoặc develop time-series forecaster thường xuyên có lightning đâu đó trong dependency tree.
Chỉ cần pip install lightning là kích hoạt. Version độc hại chứa directory ẩn _runtime với payload JavaScript obfuscated tự động execute khi module được import. Attack steal credentials, authentication token, environment variable và cloud secret, đồng thời cố gắng poison GitHub repository. Có theme Shai-Hulud bao gồm tạo public repository tên EveryBoiWeBuildIsaWormBoi.
Semgrep tin rằng attack này là của cùng threat actor đứng sau chiến dịch mini Shai-Hulud. Cấu trúc IOC nhất quán: commit message độc hại theo cùng convention Dune-themed, lần này dùng prefix EveryBoiWeBuildIsAWormyBoi để phân biệt với attack Mini Shai-Hulud gốc.
Package bị ảnh hưởng
lightningversion2.6.2lightningversion2.6.3
Cách lan rộng cross-ecosystem: từ PyPI sang npm
Khác mini Shai-Hulud target npm trực tiếp, entry point lần này là PyPI. Payload malware vẫn là JavaScript, và worm propagation xảy ra qua npm.
Khi chạy, nếu malware tìm được npm publish credentials, nó inject setup.mjs dropper và router_runtime.js vào mọi package mà token đó có thể publish, set scripts.preinstall để execute dropper, bump patch version, và republish. Bất kỳ downstream developer nào install một trong những package đó sẽ chạy full malware trên máy mình, bị steal token, và package của họ tiếp tục bị wormed.
Cách hoạt động
Thành phần exfiltration chia sẻ design với cơ chế “Mini Shai-Hulud” lần trước, dùng 4 channel song song để đảm bảo data steal được ra ngay cả khi từng đường bị block:
- HTTPS POST đến C2. Data steal được POST ngay lên server attacker qua port 443. Domain và path được store dưới dạng encrypted string trong payload, làm static analysis khó hơn.
- GitHub commit search dead-drop. Malware poll GitHub commit search API cho commit message prefix
EveryBoiWeBuildIsAWormyBoi, mang theo token double-base64-encoded formatEveryBoiWeBuildIsAWormyBoi:<base64(base64(token))>. Sau khi decode, token được dùng để authenticate Octokit client cho operation tiếp theo. - Public GitHub repo do attacker control. Repo public mới được tạo với tên random từ Dune-word và description
A Mini Shai-Hulud has Appeared, search được trực tiếp trên GitHub. Credentials steal được commit dưới dạngresults/results-<timestamp>-<n>.json(base64-encoded qua API, plain JSON bên trong), file lớn hơn 30MB chia thành numbered chunks. Commit message dùngchore: update dependencieslàm cover. - Push sang repo của victim. Nếu malware lấy được
ghs_GitHub server token, nó push data steal được trực tiếp sang mọi branch củaGITHUB_REPOSITORYcủa victim.
Steal những gì
Malware target credentials trên local file, environment, CI/CD pipeline và cloud provider:
- Filesystem: scan 80+ credential file path tìm token
ghp_,gho_, vànpm_(tối đa 5MB mỗi file). - Shell / Environment: chạy
gh auth tokenvà dump tất cả environment variable từprocess.env. - GitHub Actions: trên Linux runner, dump memory của Runner.Worker process qua embedded Python và extract mọi secret marked
"isSecret":true, kèmGITHUB_REPOSITORYvàGITHUB_WORKFLOW. - GitHub orgs: check token scope (repo, workflow) và iterate GitHub Actions org secrets.
- AWS: thử environment variable,
~/.aws/credentialsprofile, IMDSv2 (169.254.169.254), và ECS (169.254.170.2) để gọists:GetCallerIdentity; ngoài ra enumerate và fetch tất cả Secrets Manager value và SSM parameter. - Azure: dùng
DefaultAzureCredentialđể enumerate subscription và access Key Vault secret. - GCP: authenticate qua
GoogleAuthvà enumerate, fetch tất cả Secret Manager secret.
Target bao trùm local dev environment, CI runner, và cả 3 major cloud provider. Bất kỳ máy nào import package độc hại trong cửa sổ thời gian bị ảnh hưởng nên được treat như fully compromised.
Persistence qua developer tooling
Một khi vào trong repository, malware plant persistence hook target hai trong những công cụ developer 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 document về malware abuse Claude Code hook system trong real-world attack.
Claude Code: .claude/settings.json. Malware ghi SessionStart hook với matcher "*" vào Claude Code settings của repository, point đến node .vscode/setup.mjs. Nó fire mỗi lần developer mở Claude Code trong repo bị nhiễm — không cần tool use hay user action nào ngoài việc launch session.
VS Code: .vscode/tasks.json. Hook song song target VS Code user qua runOn: folderOpen task chạy node .claude/setup.mjs mỗi lần mở folder project.
Dropper: setup.mjs. Cả 2 hook đều invoke setup.mjs, một self-contained Bun runtime bootstrapper. Nếu Bun chưa được install, nó silently download bun-v1.3.13 từ GitHub release, handle Linux x64/arm64/musl, macOS x64/arm64, và Windows x64/arm64. Sau đó execute .claude/router_runtime.js (full 14.8MB payload) và cleanup từ /tmp.
Bonus payload: malicious GitHub Actions workflow. Nếu malware giữ GitHub token có quyền write, nó push workflow tên Formatter vào repository của victim. Mỗi push, nó dump tất cả repository secret qua ${{ toJSON(secrets) }} và upload dưới dạng downloadable Actions artifact tên format-results. Action được pin vào commit SHA cụ thể để trông legitimate.
Bất kỳ repository nào nhận lightning bị nhiễm trong CI và giữ token có quyền write nên được audit cho các file này.
Indicator of Compromise
Look for:
- Commit message prefix
EveryBoiWeBuildIsAWormyBoi(dead-drop token carrier, searchable qua GitHub commit search) - GitHub repo có description:
A Mini Shai-Hulud has Appeared(repo exfil của attacker, search trực tiếp được)
Package
lightning@2.6.2lightning@2.6.3
File / System Artifact
_runtime/start.py— Python loader init payload khi import_runtime/router_runtime.js— Obfuscated JS payload (14.8MB, Bun runtime)_runtime/— Directory thêm vào package độc hại.claude/router_runtime.js— Bản malware inject vào repo victim.claude/settings.json— Claude Code hook config inject.claude/setup.mjs— Dropper inject vào repo victim.vscode/tasks.json— VS Code auto-run task inject.vscode/setup.mjs— Dropper inject vào repo victim
Hành động ngay
- Check toàn bộ repo của bạn xem có dependency
lightning@2.6.2hoặc2.6.3không - Nếu match: rotate ngay GitHub token, AWS/Azure/GCP credentials, npm token đã từng có trên môi trường đó
- Audit
.claude/và.vscode/directory cho các file lạ liệt kê ở IOC - Search org GitHub cho repo có description
A Mini Shai-Hulud has Appearedhoặc commit message có prefixEveryBoiWeBuildIsAWormyBoi