flawopen.com/संदर्भ/Dependency Confusion
Dependency Confusion: पैकेज स्रोत की गड़बड़ी कैसे होती है
मान लें आपकी टीम किसी कैटलॉग से component मँगाती है, लेकिन दो suppliers एक ही product name इस्तेमाल करते हैं। यदि नियम भरोसेमंद supplier तय न करें, तो build को अनचाहा component मिल सकता है। Dependency Confusion पैकेज स्रोत चुनने की विफलता है: build ऐसे registry या namespace से dependency लेता है जिस पर संगठन भरोसा नहीं करना चाहता था।
Dependency Confusion कैसे होती है
व्यवहार package manager और configuration पर निर्भर करता है। pip दस्तावेज़ चेतावनी देते हैं कि निजी --index-url के साथ सार्वजनिक --extra-index-url जोड़ने पर उसी नाम का सार्वजनिक पैकेज चुना जा सकता है। npm package scope या default configuration से registry चुनता है; वह हमेशा versions की तुलना करके बड़ा version नहीं चुनता। मूल समस्या अस्पष्ट source policy है। सक्षम install scripts build job के उपलब्ध अधिकारों से चलती हैं।
[global]
index-url = https://packages.example.internal/simple
extra-index-url = https://pypi.org/simple
corp-auth-utils
@corp:registry=https://packages.example.internal/repository/npm/
{
"dependencies": {
"@corp/billing-engine": "1.2.0"
}
}
Dependency Confusion की विफलता-श्रृंखला
- 1आंतरिक पैकेज नाम या namespace संगठन के बाहर पता चल जाता है।
- 2सार्वजनिक registry पर बिना scope वाला वही नाम मौजूद है, या configuration उसे request पूरा करने देती है।
- 3Resolver अनपेक्षित स्रोत चुनता है; lockfile न हो, दोबारा बना हो या बिना जाँच स्वीकार हो तो बदलाव छूट सकता है।
- 4यदि install या build scripts सक्षम हैं, तो पैकेज code job के अधिकारों से चलता है। प्रभाव credentials, network access और isolation पर निर्भर है; root अधिकार अनिवार्य नहीं हैं।
इंजीनियरिंग सुरक्षा नियंत्रण
- ✓Source policy स्पष्ट करें: संगठन के scope या namespace का उपयोग करें, उसे निर्धारित registry पर भेजें और निजी नामों के लिए सार्वजनिक स्रोत पर fallback रोकें। Python में निजी packages के लिए निजी index के साथ
--extra-index-urlन जोड़ें; नियंत्रित proxy या एक authoritative index अपनाएँ। - ✓Namespace का स्वामित्व नियंत्रित करें: registry अनुमति दे तो संगठन के नाम reserve करें, लेकिन इसे resolver नीति का विकल्प न मानें। आंतरिक नामों की सूची रखें और सार्वजनिक टकराव देखें।
- ✓Lockfile की समीक्षा और enforcement करें: lockfile commit करें और manager का frozen/CI install mode अपनाएँ (npm में
npm ci)। नाम, registry URL, version और integrity बदलावों की समीक्षा करें। Lockfile स्रोत के सही publisher होने का प्रमाण नहीं है। - ✓Build execution सीमित करें: संभव हो तो dependency scripts बंद करें और अपवादों की समीक्षा करें। अल्पकालिक न्यूनतम-अधिकार credentials दें, build को production secrets से अलग रखें और outbound network सीमित करें।