• Nx पैकेज और प्लगइन्स के दुर्भावनापूर्ण वर्ज़न npm पर वितरित किए गए, जो फ़ाइल सिस्टम को स्कैन करते हैं, credentials इकट्ठा करते हैं, और फिर उन्हें उपयोगकर्ता के Github अकाउंट के रिपॉज़िटरी में भेज देते हैं
  • यह जाँचने के लिए कि आप प्रभावित हुए हैं या नहीं, देखें कि आपके Github अकाउंट में s1ngularity-repository रिपॉज़िटरी बनाई गई है या नहीं
  • संक्रमित होने पर टोकन और पासवर्ड बदलना, दुर्भावनापूर्ण रिपॉज़िटरी हटाना, और shell config फ़ाइलों की जाँच करना अनिवार्य है
  • दुर्भावनापूर्ण वर्ज़न postinstall स्क्रिप्ट के जरिए सिस्टम को प्रभावित करते हैं, और खासकर VSCode Nx Console प्लगइन इस्तेमाल करते समय अनजाने में इनके चलने का जोखिम बढ़ जाता है
  • Nx की ओर से पुनरावृत्ति रोकने और अतिरिक्त सुरक्षा उपाय लागू किए गए हैं, और संबंधित वर्ज़न npm से हटा दिए गए हैं

अवलोकन और सारांश

  • यह सुरक्षा सलाह Nx पैकेज और कुछ संबंधित प्लगइन्स पर हुए एक गंभीर सप्लाई-चेन हमले के बारे में है, जिसमें दुर्भावनापूर्ण कोड npm के जरिए वितरित किया गया
  • ये दुर्भावनापूर्ण वर्ज़न उपयोगकर्ता के फ़ाइल सिस्टम को स्कैन करके credentials, paths आदि इकट्ठा करते हैं और उन्हें Github रिपॉज़िटरी (s1ngularity-repository) पर अपलोड करते हैं
  • दुर्भावनापूर्ण postinstall स्क्रिप्ट उपयोगकर्ता की shell config फ़ाइलों (.zshrc, .bashrc) को भी बदलती है और सिस्टम shutdown command जोड़ती है
  • हमले के vector और प्रगति, प्रभावित वर्ज़न, उपयोगकर्ताओं को तुरंत क्या करना चाहिए, और पुनरावृत्ति रोकने के उपायों को विस्तार से बताया गया है

आपातकालीन कार्रवाई का तरीका

सभी को क्या जाँचना चाहिए

  1. अपने Github अकाउंट की रिपॉज़िटरी सूची में देखें कि s1ngularity-repository बनाई गई है या नहीं
  2. उस रिपॉज़िटरी में शामिल फ़ाइलों को डाउनलोड करके रिकॉर्ड के लिए सुरक्षित रखें
  3. Github से उस रिपॉज़िटरी को हटा दें
  4. security@nrwl.io पर ईमेल भेजकर लीक हुई जानकारी को डिकोड करने के तरीके की जानकारी लें
  5. सभी अकाउंट्स के credentials और tokens तुरंत बदलें

Github टोकन बदलने का तरीका

  • https://github.com/settings/connections/… पर जाएँ
  • connected app की access permissions रद्द करके मौजूदा टोकन अमान्य करें
  • gh CLI का उपयोग करते हैं तो दोबारा authentication करके नया टोकन बनाएँ
  • अगर यह नहीं किया गया, तो पुराने टोकन के दुरुपयोग का जोखिम बना रहेगा

दुर्भावनापूर्ण Nx वर्ज़न का उपयोग रोकना और सफाई

  • npm ls nx कमांड से जाँचें कि वर्तमान में इस्तेमाल किया जा रहा Nx वर्ज़न दुर्भावनापूर्ण वर्ज़न है या नहीं
  • यदि संक्रमित वर्ज़न है, तो npm uninstall nx && npm install nx@latest से अपडेट करें
  • npm cache clean --force से cache साफ करें

जो उपयोगकर्ता पहले से संक्रमित हैं

  • npm और Github tokens बदलें
  • Github और संबंधित सेवाओं के सभी पासवर्ड और credentials रीसेट करें
  • .zshrc, .bashrc फ़ाइलों में कोई अनजान कमांड डाली गई है या नहीं, जाँचें और हटाएँ

आंतरिक पैकेज रिपॉज़िटरी एडमिनिस्ट्रेटर के लिए

  • कंपनी के भीतर Jersey-based proxy या internal package mirror में मौजूद दुर्भावनापूर्ण वर्ज़न तुरंत हटाकर आगे के प्रसार को रोकना आवश्यक है

प्रभावित वर्ज़न की जानकारी

Nx पैकेज

  • 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
  • 10:44 PM EDT तक npm से हटाए जा चुके हैं

@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud

  • 10:44 PM, 6:20 AM EDT तक npm से हटाए जा चुके हैं

हमले के vector का विवरण

कमजोर workflow का कारण

  • Github Actions workflow में arbitrary code execution संभव करने वाली एक कमजोरी शामिल कर दी गई थी
  • PR title में खास bash code डालने पर workflow के भीतर system commands चल सकते थे; यह कमजोरी Bash Injection थी
  • pull_request_target trigger के कारण elevated permissions (GITHUB_TOKEN आदि) मिल जाते थे, जिससे इसका दुरुपयोग हुआ
  • हटाए जाने तक यह कमजोर workflow main के बजाय पुराने branch में बना रहा, और हमलावर ने दुर्भावनापूर्ण PR के जरिए workflow चलाकर secrets चुराने में सफलता पाई

npm टोकन चोरी की प्रक्रिया

  • कमजोर workflow के जरिए publish.yml चलाया गया
  • publish.yml npm token को Github Secrets में रखता था, और इस प्रक्रिया में token को बाहरी webhook पर भेज दिया गया
  • अंततः हमलावर ने इसी token के जरिए Nx और सपोर्ट पैकेजों के दुर्भावनापूर्ण वर्ज़न npm पर अपलोड किए

दुर्भावनापूर्ण पैकेज का व्यवहार

credentials सहित जानकारी इकट्ठा करना और Github रिपॉज़िटरी पर प्रकाशित करना

  • संक्रमित Nx पैकेज की postinstall स्क्रिप्ट चलते समय विभिन्न text files की locations और credential जानकारी इकट्ठा की जाती है
  • इन्हें s1ngularity-repository नाम की Github रिपॉज़िटरी में base64 में encode करके अपलोड किया जाता है
  • वास्तविक रिपॉज़िटरी हटाई जा चुकी हो, तब भी पहले यह public थी, इसलिए जानकारी लीक होने की संभावना मानकर चलना चाहिए

shell profile (.zshrc, .bashrc) में छेड़छाड़

  • postinstall sudo shutdown -h 0 कमांड जोड़ देता है, जिससे terminal चलाते समय सिस्टम shutdown हो सकता है और पासवर्ड उजागर होने की संभावना बनती है

postinstall के चलने के विभिन्न परिदृश्य

  • सिर्फ npm install/yarn/pnpm install को सीधे चलाने पर ही नहीं, बल्कि transitive dependency, editor extension, script execution जैसी कई स्थितियों में भी यह चल सकता है

  • खासकर VSCode के लिए Nx Console extension (वर्ज़न 18.6.30 ~ 18.65.1) editor शुरू होने पर अपने-आप nx@latest इंस्टॉल करता था, जिससे postinstall चल सकता था

  • मूल रूप से, बिना इरादे के भी कई जगह NPM modules इंस्टॉल हो सकते हैं, इस बात से सावधान रहना चाहिए

  • Nx Console (18.66.0) से latest nx इंस्टॉल करने की प्रक्रिया हटा दी गई है

हमले और प्रतिक्रिया की टाइमलाइन

21 अगस्त

  • 4:31 PM: Bash injection कमजोरी वाला PR merge किया गया
  • 10:48 PM: कमजोरी की ओर इशारा करने वाली पोस्ट X (पूर्व Twitter) पर प्रकाशित हुई

22 अगस्त

  • दोपहर: आंतरिक जाँच, कमजोर workflow rollback (अपूर्ण)
  • CodeQL लागू किया गया ताकि भविष्य के PR में ऐसी कमजोरियों का पता लगाया जा सके

24 अगस्त

  • हमलावर के fork में npm token लीक होने के संकेत वाला commit हुआ
  • दुर्भावनापूर्ण PR बनाया गया और हटाया गया, और publish.yml उसी PR के कारण चला

26 अगस्त ~ 27 अगस्त (दुर्भावनापूर्ण वर्ज़न वितरण, प्रतिक्रिया)

  • Nx और प्लगइन्स के कई दुर्भावनापूर्ण वर्ज़न npm पर क्रमशः वितरित किए गए
  • Github/NPM community में issues रिपोर्ट किए गए
  • 10:44 PM: NPM ने संबंधित सभी वर्ज़न हटाने सहित कार्रवाई की
  • 11:57 PM: सभी Nx-संबंधित पैकेज publishing tokens अमान्य किए गए
  • 27 अगस्त: Nx Console patch, 2FA, Trusted Publisher मॉडल पर स्विच आदि अतिरिक्त उपाय किए गए

पूर्व-निवारक कदम और आगे की प्रतिक्रिया

  • nrwl संगठन के सभी maintainers के लिए 2FA अनिवार्य किया गया
  • Trusted Publisher mechanism लागू किया गया। npm token-आधारित deployment प्रतिबंधित किया गया
  • आगे से पैकेज केवल 2FA और trust-based verification के बाद ही publish किए जाएँगे
  • अतिरिक्त risk detection, PR approval, branch protection आदि चरणबद्ध रूप से लागू किए गए

सीख और आगे की योजना

  • सप्लाई-चेन, CI/CD pipeline, और workflow permissions को न्यूनतम रखने के महत्व को फिर से रेखांकित करने वाली घटना
  • टीम के भीतर पुनरावलोकन के बाद, समुदाय के साथ सीखी गई बातें साझा करने की योजना है

संपर्क

  • security@nrwl.io पर संपर्क किया जा सकता है

संदर्भ और परिशिष्ट

  • Github के प्रमुख issues, timeline, और संबंधित posts
  • संक्रमित पैकेज में telemetry.js स्क्रिप्ट का उदाहरण दिया गया है
  • यह स्क्रिप्ट फ़ाइल सिस्टम के भीतर प्रमुख text file paths को inventory बनाने के उद्देश्य से इकट्ठा करती है

निष्कर्ष सारांश

  • Nx और संबंधित प्लगइन्स के नवीनतम अपडेट और patches लागू करना महत्वपूर्ण है
  • npm, Github आदि की प्रमुख authentication जानकारी तुरंत बदलने की सिफारिश की जाती है
  • यह घटना याद दिलाती है कि सप्लाई-चेन सुरक्षा और workflow permission management में कमी बड़े हादसे का कारण बन सकती है

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

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