मैन्युअल रूप से एनपीएम कमजोरियों को कैसे ठीक करें?


98

जब मैं चलता हूं तो npm installयह कहता है found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details

हालाँकि, npm audit fixआउटपुटup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

क्या reviewइसका मतलब यह है कि यह उपयोगकर्ता द्वारा तय नहीं किया जाना चाहिए?

जब मैं npm auditइसे चलाता हूं तो मुझे इसके समान तालिकाओं की सूची दी जाती है:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

इस उदाहरण में लिंक्ड पेज का रेमेडिएशन सेक्शन कहता है Update to version 4.17.5 or later.। हालांकि, /node_modules/browser-sync/package.jsonवहाँ लाइनें हैं:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

और कोई और अधिक निर्भरता निर्भरता नहीं है। तो यह पहले से ही v4.17.5 होना चाहिए। मैंने भी चेक किया /node_modules/lodash/lodash.jsonजिसमें var VERSION = '4.17.10';लाइन है। में /node_modules/lodash/package.jsonइन पंक्तियों देखते हैं:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

मेरा मानना ​​है कि "_id" में दिखाया गया संस्करण "_from" में नहीं है, इसलिए संस्करण सही हैं, लेकिन ऑडिट सूची में भेद्यता अभी भी दिखाई देती है।

मैं अभी भी नोड.जेएस में नया हूं और उन संदेशों ने मुझे बहुत भ्रमित किया है। क्या इसे मैन्युअल रूप से ठीक करने या उन संदेशों से छुटकारा पाने का कोई तरीका है, मैं कुछ नहीं कर सकता?


जवाबों:


35

lodash-cliमें devDependenciesप्रभावित नहीं करता है browser-syncअपनी परियोजना में काम करता है, devDependenciesजब एक पैकेज एक निर्भरता के रूप में स्थापित किया गया है ध्यान नहीं दिया जाता।

क्या auditरिपोर्ट में कहा गया कि यह है easy-extenderकि है lodashनिर्भरता:

browser-sync > easy-extender > lodash        

यह लोडश 3 पर निर्भर करता है , जबकि समस्या लॉडश 4 में तय की गई थी। समस्या को easy-extenderएनपीएम सार्वजनिक रजिस्ट्री से पैकेज के बजाय फोर्किंग , इसे अपडेट करने और इसे स्थापित करने से ठीक किया जा सकता है । लेकिन इस निर्भरता के साथ कोई वास्तविक समस्या नहीं है।

auditरिपोर्ट महत्व का मूल्यांकन मैन्युअल रूप से किया जाना चाहिए। यहां तक ​​कि अगर नेस्टेड निर्भरता में सुरक्षा जोखिम है, तो इसका मतलब यह नहीं है कि इस जोखिम का परिचय देने वाली एक सुविधा का उपयोग किया गया था। इसका मतलब यह भी नहीं है कि यदि इसका उपयोग किया जाता है, तब भी यह वास्तविक जोखिम का परिचय देता है कि इसका उपयोग कैसे किया जाता है।

browser-syncविकास उपकरण का उपयोग उत्पादन में नहीं किया जाता है, ऐसे कई परिदृश्य नहीं हैं जहां इसकी कमजोरियों का फायदा उठाया जा सकता है। और प्रोटोटाइप प्रदूषण बिल्कुल भी भेद्यता नहीं है, बस एक नोटिस कि एक पैकेज अच्छी प्रथाओं का पालन नहीं करता है, इसे अनदेखा किया जा सकता है।

आमतौर पर, यह रिपोर्ट की गई कमजोरियों को ठीक करने का तरीका है:

  • एक पवित्रता की जाँच करें
  • यदि यह एक वास्तविक समस्या है, तो मौजूदा मुद्दों और पीआर के लिए असुरक्षित पैकेज के भंडार की जांच करें
  • मामले में कोई नहीं है, एक मुद्दा प्रस्तुत करें
  • एक रिपॉजिटरी का उपयोग करें या मौजूदा पीआर का उपयोग git निर्भरता के रूप में करें जब तक कि यह NPM रिलीज़ में तय न हो जाए
  • नेस्टेड निर्भरता के मामले में, नेस्टिंग के कई स्तरों पर ऐसा करें

अधिकांश बार यह उम्मीद की जाती है कि आप एक स्वच्छता जांच से आगे नहीं बढ़ेंगे।

patch-packageनेस्टेड निर्भरता को जगह में पैच करने में मदद कर सकता है, लेकिन यह auditरिपोर्ट को प्रभावित नहीं करेगा ।


मैंने पथ अनुभाग पर ध्यान नहीं दिया, और यह वास्तव में लॉश v3.10.1 का उपयोग करता है, धन्यवाद। लेकिन ब्राउज़र-सिंक केवल उदाहरण है, सूची में अंतिम। इसलिए, मैं 2 कम कमजोरियों को अनदेखा कर सकता हूं, लेकिन क्या मैं 31 उदारवादी लोगों की उपेक्षा कर सकता हूं? मुझे लगता है कि मुझे कुछ भी संशोधित नहीं करना चाहिए node_modules, इसलिए फोर्किंग और फिक्सिंग उनसे छुटकारा पाने का एकमात्र तरीका है? और नए उपयोगकर्ता के रूप में मुझे ऐसा करने की क्षमता नहीं है? क्या मुझे उनके बारे में पैकेज डेवलपर्स जारी करना चाहिए?
जकुपोव

4
लेकिन क्या मैं 31 उदारवादी लोगों की उपेक्षा कर सकता हूं? - यह 'पवित्रता की जाँच' है, अपने निर्णय का उपयोग करें। जितना अधिक आप इन रिपोर्टों पर वास्तव में ध्यान देते हैं, बेहतर डेवलपर आप बन सकते हैं, सुरक्षा-वार। क्या मुझे उनके बारे में पैकेज डेवलपर्स जारी करना चाहिए? - आप की संभावना है (कम से कम बंद auditकरने के लिए), जवाब है कि जवाब देना चाहिए। लोग बिना npm auditकिसी तरह रहते थे । संभावना है कि वे वास्तविक सुरक्षा समस्याओं का कारण ऐप के लिए बहुत कम हैं, फिर भी यह जाने बिना कि वे आपके ऐप में क्या हैं और उनका उपयोग कैसे किया जाता है, मैं इसकी गारंटी नहीं दे सकता।
एस्टस फ्लास्क

धन्यवाद! टिप्पणी लिखने का समय लिया, इसलिए टिप्पणी करने से पहले संपादित भाग नहीं देखा।
जकुपोव

6

यदि आप पूरी तरह से निश्चित हैं कि आप ऑडिट को छोड़ना चाहते हैं, तो आप --no-ऑडिट करके ऐसा कर सकते हैं

 npm install --no-audit

3

'npm ऑडिट फ़िक्स' पैकेज में निर्भरता के संस्करण को बढ़ाएगा। जो कि कोड को तोड़ने का कारण हो सकता है। इतना बेहतर तरीका है कि पैकेज-लॉक खोलना। आगजनी और निर्भरता / उप-निर्भरता संस्करणों को आवश्यक संस्करण में अपडेट करना। रिपॉजिटरी में पैकेज-लॉक.जॉन को बनाए रखें।

कभी-कभी भेद्यता देव पैकेजों से होती है, उस मामले में उन कमजोरियों को अनदेखा कर देते हैं क्योंकि वे उत्पादन में नहीं उठाए जाते हैं।


-3

मेरे सिस्टम में सबसे अधिक समस्या npm पैकेज के कारण हुई। मैंने कोशिश की,

npm un npm

आपको फिर से स्थापित करने की आवश्यकता नहीं है।

बस फिर से कार्यक्रम चलाएं। इसने मेरे लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.