• 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

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.