- PyPI
lightning के 2.6.2 और 2.6.3 वर्ज़न 30 अप्रैल 2026 को प्रकाशित होने के बाद सप्लाई-चेन हमले में इस्तेमाल किए गए, और सिर्फ pip install lightning से छिपी हुई _runtime डायरेक्टरी और obfuscated JavaScript payload चल सकता है
- malicious payload मॉड्यूल import होते ही अपने-आप चल जाता है और credentials, auth token, environment variable, cloud secret चुराता है, साथ ही GitHub repository को संक्रमित करने की भी कोशिश करता है
- इस हमले का entry point PyPI है, लेकिन worm का propagation npm के जरिए होता है; अगर npm publish credentials मिल जाते हैं, तो publish किए जा सकने वाले पैकेजों में
setup.mjs dropper और router_runtime.js inject करके patch version फिर से publish किया जाता है
- data exfiltration के लिए HTTPS POST, GitHub commit search dead drop, attacker-controlled public GitHub repository, और victim repository में direct push समेत 4 parallel channel इस्तेमाल होते हैं;
EveryBoiWeBuildIsAWormyBoi commit prefix और "A Mini Shai-Hulud has Appeared" repository description इसके संकेतक हैं
- मालवेयर Claude Code की
.claude/settings.json SessionStart hook और VS Code की .vscode/tasks.json runOn: folderOpen task डालकर repository खुलते ही dropper चलाता है; प्रभावित अवधि में malicious package import करने वाली किसी भी मशीन को पूरी तरह compromised मानना चाहिए
प्रभावित पैकेज और जांच प्रक्रिया
lightning एक deep learning framework है, जो image classifier बनाने, LLM fine-tuning, diffusion model चलाने, और time-series predictor विकसित करने वाली टीमों की dependency tree में अक्सर शामिल होता है
-
प्रभावित पैकेज
lightning वर्ज़न 2.6.2
lightning वर्ज़न 2.6.3
-
Semgrep ग्राहकों के लिए जांच प्रक्रिया
- अगर हाल में project scan नहीं किया है, तो नया scan चलाना चाहिए
- advisories page में देखा जा सकता है कि project ने हाल में उस package version को install किया था या नहीं
- dependency filter में matching item देखे जा सकते हैं; अगर “No matching dependencies” दिखता है, तो इसका मतलब है कि project अभी malicious dependency का सक्रिय उपयोग नहीं कर रहा है
- अगर match मिलता है, तो नीचे दिए गए indicators of compromise के अनुसार repository में
.claude/ और .vscode/ डायरेक्टरी के भीतर unexpected files का audit करना चाहिए
- प्रभावित environment में मौजूद हो सकने वाले GitHub token, cloud credentials, और API key बदल देने चाहिए
- सप्लाई-चेन हमले के response और waiting period से जुड़ी सामान्य सलाह $foo compromised in $packagemanager और Attackers are Still Coming for Security Companies में दी गई है
PyPI से npm तक फैलने की संरचना
- mini Shai-Hulud के npm को सीधे निशाना बनाने के विपरीत, इस बार हमले का entry point PyPI है
- malicious payload अब भी JavaScript है, और worm का propagation npm के जरिए होता है
- चलने के बाद, अगर मालवेयर को npm publish credentials मिलते हैं, तो उस token से publish किए जा सकने वाले सभी पैकेजों में
setup.mjs dropper और router_runtime.js inject कर देता है
- इसके बाद
scripts.preinstall को dropper execution पर सेट किया जाता है, patch version बढ़ाया जाता है, और पैकेज दोबारा publish किया जाता है
- उस पैकेज को install करने वाले downstream developer अपनी मशीन पर पूरा malicious code चला बैठते हैं, जिसके बाद token theft और package worm infection जारी रहता है
डेटा exfiltration के तरीके
- चोरी करने वाला यह component पिछले campaign के Mini Shai-Hulud mechanism और design को साझा करता है, और किसी एक path के block होने पर भी डेटा बाहर ले जाने के लिए 4 parallel channel इस्तेमाल करता है
- हमले में
EveryBoiWeBuildIsaWormBoi नाम की public repository बनाना जैसी Shai-Hulud theme शामिल है
- attack indicator की संरचना पिछले mini Shai-Hulud campaign से मेल खाती है, लेकिन malicious commit message
EveryBoiWeBuildIsAWormyBoi prefix इस्तेमाल करते हैं, जिससे यह मूल Mini Shai-Hulud हमले से अलग पहचाना जाता है
-
HTTPS POST के जरिए C2 ट्रांसफर
- चोरी किया गया डेटा port 443 के जरिए attacker-controlled server पर तुरंत POST किया जाता है
- domain और path payload के अंदर encrypted string के रूप में रखे जाते हैं, जिससे static analysis कठिन हो जाती है
-
GitHub commit search dead drop
- मालवेयर GitHub commit search API को poll करके
EveryBoiWeBuildIsAWormyBoi prefix वाले commit message ढूंढता है
- commit message
EveryBoiWeBuildIsAWormyBoi:<base64(base64(token))> फ़ॉर्मैट में double Base64-encoded token ले जाते हैं
- decode किया गया token बाद की गतिविधियों के लिए Octokit client authentication में इस्तेमाल होता है
-
attacker-controlled public GitHub repository
- Dune से लिए गए शब्दों जैसे random नाम और
"A Mini Shai-Hulud has Appeared" description वाली नई public repository बनाई जाती है
- यह description GitHub पर सीधे searchable है
- चुराए गए credentials को
results/results-<timestamp>-<n>.json के रूप में commit किया जाता है; API के जरिए यह Base64-encoded होता है, लेकिन अंदर साधारण JSON होता है
- 30MB से बड़े file numbered chunk में बांटे जाते हैं
- commit message छिपाने के लिए
chore: update dependencies इस्तेमाल किया जाता है
-
victim repository में direct push
- अगर मालवेयर को
ghs_ GitHub server token मिल जाता है, तो यह victim के GITHUB_REPOSITORY की सभी branch में exfiltrated data सीधे push कर देता है
चोरी के लक्ष्य
- मालवेयर local file, environment, CI/CD pipeline, और cloud provider में मौजूद credentials को निशाना बनाता है
-
file system
- 80 से अधिक credential file path scan करके
ghp_, gho_, npm_ token खोजे जाते हैं
- प्रति file अधिकतम 5MB तक process किया जाता है
-
shell और environment variable
gh auth token चलाया जाता है
process.env के सभी environment variable dump किए जाते हैं
-
GitHub Actions
- Linux runner पर built-in Python से
Runner.Worker process memory dump की जाती है
"isSecret":true से चिह्नित सभी secret के साथ GITHUB_REPOSITORY और GITHUB_WORKFLOW निकाले जाते हैं
-
GitHub organization
- token scope
repo, workflow की जांच की जाती है
- GitHub Actions organization secret को enumerate किया जाता है
-
AWS
- environment variable,
~/.aws/credentials profile, IMDSv2 169.254.169.254, और ECS 169.254.170.2 आज़माकर sts:GetCallerIdentity कॉल किया जाता है
- Secrets Manager के सभी value और SSM parameter enumerate करके fetch किए जाते हैं
-
Azure
DefaultAzureCredential का इस्तेमाल करके subscription enumerate की जाती हैं और Key Vault secret तक पहुंच बनाई जाती है
-
GCP
GoogleAuth से authentication किया जाता है
- Secret Manager के सभी secret enumerate और fetch किए जाते हैं
- target scope में local development environment, CI runner, और 3 बड़े cloud provider सभी शामिल हैं
- प्रभावित अवधि में malicious package import करने वाली हर मशीन को पूरी तरह compromised मानना चाहिए
developer tool के जरिए persistence हासिल करना
- repository के अंदर पहुंचने के बाद मालवेयर आमतौर पर इस्तेमाल होने वाले developer tool Claude Code और VS Code को निशाना बनाकर persistence hook डालता है
-
Claude Code
- मालवेयर repository की Claude Code config file
.claude/settings.json में matcher: "*" वाला SessionStart hook लिखता है
- यह hook
node .vscode/setup.mjs की ओर इशारा करता है
- developer जब भी infected repository में Claude Code खोलता है, यह चल जाता है; session start के अलावा किसी tool use या user action की जरूरत नहीं होती
-
VS Code
- VS Code user को निशाना बनाते हुए
.vscode/tasks.json में runOn: folderOpen task डाला जाता है
- project folder खुलते ही
node .claude/setup.mjs चलाया जाता है
-
dropper setup.mjs
- दोनों hook self-contained Bun runtime bootstrapper
setup.mjs को call करते हैं
- अगर Bun install नहीं है, तो GitHub releases से
bun-v1.3.13 quietly download किया जाता है
- Linux x64, Linux arm64, Linux musl, macOS x64, macOS arm64, Windows x64, और Windows arm64 handle किए जाते हैं
- इसके बाद पूरा 14.8MB payload
.claude/router_runtime.js चलाया जाता है और /tmp से cleanup किया जाता है
-
malicious GitHub Actions workflow
- अगर मालवेयर के पास write permission वाला GitHub token हो, तो यह victim repository में
Formatter नाम का workflow push करता है
- हर push पर
${{ toJSON(secrets) }} के जरिए सभी repository secret dump किए जाते हैं
- नतीजों को
format-results नाम के downloadable Actions artifact के रूप में upload किया जाता है
- Actions को सामान्य दिखाने के लिए खास commit SHA पर pin किया जाता है
- जिन repository ने CI में संक्रमित
lightning package लिया हो और जिनके पास write-permission token हो, उन्हें इन files का audit करना चाहिए
indicators of compromise
-
searchable indicators
EveryBoiWeBuildIsAWormyBoi prefix वाले commit message dead-drop token carrier के रूप में इस्तेमाल होते हैं और GitHub commit search से खोजे जा सकते हैं
"A Mini Shai-Hulud has Appeared" description वाली GitHub repository attacker exfiltration repository हैं और सीधे खोजी जा सकती हैं
-
package
lightning@2.6.2
lightning@2.6.3
-
file और system artifact
_runtime/start.py: import के समय payload initialize करने वाला Python loader
_runtime/router_runtime.js: obfuscated JavaScript payload और 14.8MB Bun runtime
_runtime/: malicious package version में जोड़ी गई डायरेक्टरी
.claude/router_runtime.js: victim repository में inject की गई malicious code की copy
.claude/settings.json: victim repository में inject की गई Claude Code hook config
.claude/setup.mjs: victim repository में inject किया गया dropper
.vscode/tasks.json: victim repository में inject की गई VS Code auto-run task
.vscode/setup.mjs: victim repository में inject किया गया dropper
अभी कोई टिप्पणी नहीं है.