Cover Image for npm की बड़ी घटना: सप्लाई-चेन हमलों से प्रोजेक्ट्स को कैसे बचाएँ
[npm][JavaScript][Security][SupplyChain][Node.js]
12 अगस्त 2025

npm की बड़ी घटना: सप्लाई-चेन हमलों से प्रोजेक्ट्स को कैसे बचाएँ

जुलाई 2025 में, npm इकोसिस्टम ने अपनी इतिहास की सबसे बड़ी सप्लाई-चेन हमलों में से एक का सामना किया। हमलावरों ने लोकप्रिय पैकेजों के मेंटेनरों के खातों तक पहुँच बना ली और ऐसे दुर्भावनापूर्ण संस्करण प्रकाशित किए जिन्हें लाखों डेवलपर्स ने इंस्टॉल कर लिया।

क्या हुआ

प्रभावित पैकेज:

  • eslint-config-prettier — प्रति सप्ताह 30M+ डाउनलोड। दुर्भावनापूर्ण संस्करण: 8.10.1, 9.1.1, 10.1.6, 10.1.7
  • eslint-plugin-prettier
  • synckit
  • @pkgr/core
  • napi-postinstall
  • is — प्रति सप्ताह 2.8M डाउनलोड। दुर्भावनापूर्ण संस्करण: 3.3.1–5.0.0

हमला कैसे हुआ:

  1. टाइपो-स्क्वाटेड डोमेन npnjs.com के जरिए फ़िशिंग → मेंटेनरों ने क्रेडेंशियल्स दर्ज कर दिए।
  2. हमलावरों ने एक्सेस पाकर सीधे npm पर दुर्भावनापूर्ण बिल्ड प्रकाशित किए।
  3. दुर्भावनापूर्ण कोड postinstall स्क्रिप्ट के रूप में छुपाया गया, जो DLL डाउनलोड करता था या WebSocket बैकडोर खोलता था।
  4. रिलीज़ GitHub रिपॉज़िटरी को बायपास करके की गईं — सामान्य कमिट मॉनिटरिंग बेअसर रही।

कुल प्रभाव — प्रति सप्ताह 180M+ डाउनलोड।

स्रोत:


ऐसे हमलों से कैसे बचें

1. सटीक संस्करण फिक्स करें (Pin exact versions)

package.json में:

"eslint-config-prettier": "10.1.0"

इसके बजाय:

"eslint-config-prettier": "^10.1.0"

भविष्य की इंस्टॉलेशन्स में डिफ़ॉल्ट रूप से सटीक संस्करण सेव करने के लिए npm कमांड:

npm config set save-exact true

और रिपॉज़िटरी के .npmrc में यह नियम फोर्स करें:

save-exact=true

पूरे प्रोजेक्ट में तेज़ी से संस्करण फिक्स कैसे करें

यदि आपके package.json में पहले से ^ या ~ लगा है, तो उन्हें हटाकर सटीक संस्करण फिक्स कर सकते हैं।

npm के लिए:

npx npm-check-updates -f "/.*/" --removeRange --upgrade
  • npm-check-updates निर्भरताओं के संस्करण मैनेज करने का टूल है।
  • --removeRange सभी एंट्रियों से ^ और ~ हटा देता है।

npm-check-updates package-lock.json नहीं पढ़ता। यह केवल आपके package.json पर काम करता है और निर्भरता संस्करणों को npm के नवीनतम संस्करणों से बदलता है (आपके दिए फ़िल्टर/कंस्ट्रेंट के अनुसार)। यदि आप package-lock.json को रिपॉज़िटरी में कमिट रखते हैं, तो बेहतर है कि सीधे लॉकफ़ाइल से सटीक संस्करण फिक्स करें। यहाँ एक काम करने वाला Node.js स्क्रिप्ट है जो package-lock.json से सटीक संस्करण पढ़कर package.json में बिना ^ और ~ के लिख देता है।

2. लॉक-फाइलें उपयोग करें

package-lock.json को रिपॉज़िटरी में कमिट रखें। इससे सभी (ट्रांजिटिव सहित) निर्भरताएँ फिक्स रहती हैं।

3. निर्भरताओं का ऑडिट सक्षम करें

  • npm audit

4. postinstall स्क्रिप्ट्स को न्यूनतम रखें

जब तक अत्यंत आवश्यक न हो, इंस्टॉलेशन के समय कोड चलाने वाली निर्भरताओं से बचें।

5. अपने npm अकाउंट पर 2FA सक्षम करें

पासवर्ड लीक होने पर भी अकाउंट टेकओवर का जोखिम कम होता है।

6. ईमेल और डोमेनों की जाँच करें

“आधिकारिक” ईमेल में आए लिंक पर क्लिक करने से पहले पता जाँचें। npmjs.com और npnjs.com में सिर्फ एक अक्षर का फर्क है।


निष्कर्ष

सप्लाई-चेन हमले लगातार बढ़ रहे हैं, और वर्षों पुराने लोकप्रिय पैकेज भी समझौता हो सकते हैं। ऑटो-अपडेट को सीमित करना, निर्भरताओं पर नियंत्रण रखना और सतर्क रहना — आपके प्रोजेक्ट्स की सुरक्षा के लिए प्रमुख कदम हैं।

अगला पढ़ें

हमारे समुदाय से जुड़ें