pnpm v10 अब डिफ़ॉल्ट रूप से निर्भरता जीवनचक्र स्क्रिप्ट को ब्लॉक करता है

Node.jspnpmसुरक्षाDevOps

मुख्य अपडेट

pnpm v10 (स्थिर) डिफ़ॉल्ट स्थापना व्यवहार को बदलता है ताकि निर्भरताओं में परिभाषित जीवनचक्र स्क्रिप्ट अब स्थापना के दौरान तब तक न चलें जब तक कि उन्हें स्पष्ट रूप से अनुमति न दी जाए (pnpm.onlyBuiltDependencies, एक अनुमति सूची फ़ाइल, या निर्माणों को स्वीकृत करके)। यह एक जानबूझकर किया गया, महत्वपूर्ण परिवर्तन है जिसका उद्देश्य आपूर्ति-श्रृंखला हमलों को रोकना है जो दुर्भावनापूर्ण postinstall/preinstall स्क्रिप्ट को निष्पादित करते हैं। (github.com)

यह क्यों महत्वपूर्ण है

यह एक व्यावहारिक सुरक्षा परिवर्तन है जिसका तात्कालिक संचालन पर प्रभाव पड़ता है। pnpm का उपयोग करने वाली टीमें उन पैकेजों के लिए CI और स्थानीय स्थापना में विफलता देख सकती हैं जो निर्माण/स्थापना स्क्रिप्ट (जैसे bcrypt, Prisma इंजन, esbuild, sqlite3, आदि) पर निर्भर करते हैं, क्योंकि अब उन स्क्रिप्ट को अनदेखा किया जाता है जब तक कि आप उन्हें स्वीकृत नहीं करते। यह परिवर्तन अविश्वसनीय निर्भरता स्क्रिप्ट से स्वचालित हमले की सतह को कम करता है, लेकिन इसके लिए एक छोटा सा माइग्रेशन आवश्यक है: या तो नए pnpm approve-builds कमांड के साथ आवश्यक पैकेजों को पूर्व-स्वीकृत करें या pnpm.onlyBuiltDependencies में स्वीकृत नाम जोड़ें (या एक आंतरिक नीति पैकेज द्वारा प्रदान की गई प्रबंधित onlyBuiltDependenciesFile का उपयोग करें)। CI में आपको packageManager फ़ील्ड के माध्यम से pnpm संस्करण को पिन करना चाहिए, अनुमति सूची को पूर्व-बीजित करना चाहिए (या एक निश्चित, गैर-इंटरैक्टिव स्वीकृति चरण चलाना चाहिए), और परिवर्तन को मोनोरेपोस में रोल करने से पहले अंत-से-अंत निर्माणों का परीक्षण करना चाहिए। जिन टीमों के लिए अनुमति सूची को तुरंत अपनाना संभव नहीं है, pnpm एक तरीका प्रदान करता है जिससे आप pre-v10 व्यवहार को पुनर्स्थापित कर सकते हैं, लेकिन उस पर निर्भर रहना सुरक्षा लाभ को छोड़ देता है। कुल मिलाकर, यह एक छोटा प्रारंभिक संचालन लागत है जो सामान्य स्थापना-स्क्रिप्ट आपूर्ति-श्रृंखला हमलों के खिलाफ इंस्टॉलेशन को महत्वपूर्ण रूप से मजबूत करता है। (github.com)

स्रोत

आगे पढ़ें