- Shai-Hulud 2.0 malicious npm package ने डेवलपर मशीनों को संक्रमित करके Trigger.dev के GitHub organization access को चुरा लिया
- संक्रमण तब शुरू हुआ जब डेवलपर ने
pnpm install चलाया और malicious package का preinstall script execute हुआ; TruffleHog tool का इस्तेमाल कर credentials चुराए गए
- हमलावर ने 17 घंटे तक 669 repositories clone कीं, और फिर 10 मिनट के दौरान 199 branches पर force push तथा 42 PR बंद करने की कोशिश की
- Packages और production systems प्रभावित नहीं हुए, और हमला 4 मिनट के भीतर detect होकर account access block कर दिया गया
- घटना के बाद npm scripts disable करना, pnpm 10 upgrade, OIDC-आधारित npm deployment, branch protection का पूर्ण लागूकरण जैसी security measures मजबूत की गईं
हमले का अवलोकन
- 25 नवंबर 2025 को, internal Slack debugging के दौरान कई repositories में Linus Torvalds के नाम से “init” commit बनने जैसी असामान्य गतिविधि दिखी
- जांच में पता चला कि Shai-Hulud 2.0 supply-chain worm ने डेवलपर मशीन को संक्रमित कर GitHub credentials चुरा लिए थे
- रिपोर्ट के अनुसार इस worm ने 500 से अधिक npm packages को संक्रमित किया और 25,000 से अधिक repositories को प्रभावित किया
- Trigger.dev के official npm packages (
@trigger.dev/*, CLI) संक्रमित नहीं हुए
हमले की टाइमलाइन
- 24 नवंबर 04:11 UTC: malicious package का वितरण शुरू
- 20:27 UTC: जर्मनी में एक डेवलपर मशीन संक्रमित
- 22:36 UTC: हमलावर की पहली पहुंच और बड़े पैमाने पर repository cloning शुरू
- 15:27~15:37 UTC (25 नवंबर): 10 मिनट तक destructive attack
- 15:32 UTC: असामान्य गतिविधि detect हुई और 4 मिनट के भीतर access block
- 22:35 UTC: सभी branches की recovery पूरी
संक्रमण की प्रक्रिया
- जब डेवलपर ने
pnpm install चलाया, malicious package का preinstall script execute हुआ, जिसने TruffleHog को download और run किया
- TruffleHog ने GitHub tokens, AWS credentials, npm tokens, environment variables आदि scan करके बाहर exfiltrate किए
- संक्रमित मशीन में
.trufflehog-cache directory और उससे जुड़े files मिले
- संक्रमण का कारण बना package delete कर दिया गया था, इसलिए tracing संभव नहीं रही
हमलावर की गतिविधियां
- संक्रमण के बाद 17 घंटे तक reconnaissance activity जारी रही
- अमेरिका और भारत-आधारित infrastructure का उपयोग करके 669 repositories clone की गईं
- डेवलपर गतिविधियों की monitoring करते हुए GitHub token access बनाए रखा गया
- “Sha1-Hulud: The Second Coming” नाम की repository बनाई गई, जिसका उपयोग credentials store करने के लिए हुआ माना गया
- इसके बाद 10 मिनट तक destructive actions की गईं
- 16 repositories में 199 branches पर force push की कोशिश
- 42 PR बंद किए गए, जिनमें कुछ branch protection settings के कारण block हो गए
- सभी commits “Linus Torvalds <email> / init” के रूप में दिखे
detection और response
- Slack alerts के जरिए असामान्य गतिविधि real time में detect हुई
- 4 मिनट के भीतर संक्रमित account का GitHub access block किया गया, और उसके बाद AWS·Vercel·Cloudflare सहित सभी services की access revoke की गई
- AWS CloudTrail log analysis में सिर्फ read-only API calls मिले, production data access नहीं मिला
- AWS ने अलग से Shai-Hulud से जुड़ी संदिग्ध गतिविधि detect कर warning भेजी
नुकसान और recovery
- 669 repositories clone, 199 branches पर force push, 42 PR बंद
- GitHub में server-side reflog न होने से recovery कठिन थी, लेकिन event API और local reflog की मदद से 7 घंटे में पूरा restore कर लिया गया
- npm packages और production infrastructure प्रभावित नहीं हुए
GitHub App key exposure
- जांच के दौरान डेवलपर laptop के trash में GitHub App private key मिली
- इस key के पास customer repositories पर read/write permission थी, इसलिए इसे तुरंत rotate किया गया
- database (installation ID storage) प्रभावित नहीं हुआ, इसलिए customer repository access का कोई प्रमाण नहीं मिला, हालांकि इसे पूरी तरह नकारा नहीं जा सकता
- GitHub support team से अतिरिक्त logs मांगे गए और customers को email notice भेजा गया
Shai-Hulud का तकनीकी विश्लेषण
setup_bun.js चलने पर Bun runtime install होता है और background में bun_environment.js execute होता है
- TruffleHog का उपयोग कर
$HOME directory के credentials इकट्ठा किए जाते हैं
- इकट्ठा किया गया data (
contents.json, cloud.json, truffleSecrets.json आदि) random GitHub repositories पर triple base64 encoding के रूप में upload किया जाता है
- अगर npm token मौजूद हो, तो संक्रमित account के packages को modify और republish कर worm फैलाया जाता है
- अगर credentials न मिलें, तो home directory delete करने की कोशिश की जाती है
- infection indicators:
setup_bun.js, bun_environment.js, .trufflehog-cache/ आदि
security hardening measures
- npm scripts पूरी तरह disable (
ignore-scripts=true)
- pnpm 10 upgrade: scripts default रूप से disabled,
minimumReleaseAge (3 दिन) सेट कर नए packages की install delay
- OIDC-आधारित npm Trusted Publishers अपनाकर long-lived tokens हटाए गए
- सभी repositories पर branch protection लागू
- AWS SSO में Granted लागू, session tokens encrypt किए गए
- GitHub Actions में external contributor workflows चलाने के लिए approval अनिवार्य किया गया
अन्य टीमों के लिए सबक
- npm install के दौरान होने वाला arbitrary code execution model स्वयं एक attack surface है
ignore-scripts=true सेट करना और सिर्फ जरूरी packages को whitelist करना आवश्यक है
- pnpm minimumReleaseAge से नए packages की installation delay की जा सकती है
- branch protection और OIDC-आधारित deployment आवश्यक security controls हैं
- local machine पर long-lived credentials store नहीं करने चाहिए; deployment सिर्फ CI के जरिए होना चाहिए
- Slack alert noise ही detection की key साबित हुई
मानवीय पहलू
- संक्रमित डेवलपर की कोई गलती नहीं थी; सिर्फ
npm install चलाने से यह नुकसान हुआ
- हमले के दौरान उस account से सैकड़ों random repositories को अपने-आप ‘star’ किए जाने के संकेत मिले
- इस घटना ने किसी एक व्यक्ति की गलती नहीं, बल्कि ecosystem की structural vulnerability को उजागर किया
सारांश मेट्रिक्स
- पहली infection से पहले attack तक: लगभग 2 घंटे
- हमलावर का access बना रहने का समय: 17 घंटे
- destructive activity की अवधि: 10 मिनट
- detection तक 5 मिनट, block तक 4 मिनट
- पूरी recovery में 7 घंटे
- cloned repositories: 669 / प्रभावित branches: 199 / बंद PR: 42
संदर्भ संसाधन
- Socket.dev: Shai-Hulud Strikes Again V2
- PostHog, Wiz, Endor Labs, HelixGuard की analysis reports
- npm Trusted Publishers, pnpm
onlyBuiltDependencies, minimumReleaseAge, Granted documentation
अभी कोई टिप्पणी नहीं है.