← नवीनतम पेपर
💻 computer science

PyPitfall: Dependency Chaos and Software Supply Chain Vulnerabilities in Python

यह शोध पत्र PyPitfall प्रस्तुत करता है, जो पायथन सॉफ्टवेयर सप्लाई चेन के भीतर असुरक्षित डिपेंडेंसीज़ और ट्रांसिटिव सुरक्षा जोखिमों की व्यापक व्यापकता को उजागर करने के लिए 378,000 से अधिक PyPI पैकेज की डिपेंडेंसी संरचनाओं का विश्लेषण करने वाला एक मात्रात्मक अध्ययन है।

मूल लेखक: Jacob Mahon, Chenxi Hou, Zhihao Yao

प्रकाशित 2026-03-11
📖 5 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Jacob Mahon, Chenxi Hou, Zhihao Yao

मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें

कल्पना कीजिए कि आप एक विशाल, जटिल किला बना रहे हैं। हर ईंट, खिड़की और दरवाजे को शून्य से तराशने के बजाय, आप PyPI (पायथन पैकेज इंडेक्स) नामक एक विशाल, खुले बाजार से पहले से बने मॉड्यूल खरीदने का निर्णय लेते हैं। आप एक "डोर मॉड्यूल" (दरवाजा मॉड्यूल), एक "वॉल मॉड्यूल" (दीवार मॉड्यूल) और एक "रूफ मॉड्यूल" (छत मॉड्यूल) खरीदते हैं।

यहाँ एक पेच है: जो "डोर मॉड्यूल" आपने खरीदा है, वह केवल वहीं नहीं पड़ा रहता। उसे किसी और ने बनाया था जिसने एक "हिंज मॉड्यूल" (कब्जा मॉड्यूल) का उपयोग किया था, जिसने एक "स्क्रू मॉड्यूल" (पेंच मॉड्यूल) का उपयोग किया था, जिसने एक "मेटल अलॉय मॉड्यूल" (धातु मिश्र धातु मॉड्यूल) का उपयोग किया था। यह एक सॉफ्टवेयर सप्लाई चेन (Software Supply Chain) है।

शोध पत्र "PyPitfall" एक विशाल सुरक्षा निरीक्षक की तरह है जो इस बाजार में गया, लगभग 3,वास 3,80,000 अलग-अलग किले के डिजाइनों (पायथन पैकेज) को देखा और एक भयानक सवाल पूछा: "इनमें से कितने किले उन टूटे हुए, जंग लगे या खतरनाक हिस्सों पर बने हैं जिनके बारे में हमें पहले से पता है?"

उनके निष्कर्षों का सरल उपमाओं (analogies) का उपयोग करके विवरण यहाँ दिया गया है:

1. निर्भरताओं का "भूलभुलैया" (The "Labyrinth" of Dependencies)

जब आप एक पहले से बना मॉड्यूल खरीदते हैं, तो आपको अक्सर पता नहीं चलता कि उसके साथ कुछ अतिरिक्त सामान भी आता है।

  • प्रत्यक्ष निर्भरताएँ (Direct Dependencies): ये वे हिस्से हैं जिन्हें आपने स्पष्ट रूप से मांगा है (जैसे, "मुझे एक दरवाजा चाहिए")।
  • परिवर्ती निर्भरताएँ (Transitive Dependencies): ये वे छिपे हुए हिस्से हैं जिनकी दरवाजे को काम करने के लिए आवश्यकता है (जैसे, दरवाजे को कब्जे चाहिए, कब्जों को पेंच चाहिए)।

शोधकर्ताओं ने पाया कि इनमें से कुछ श्रृंखलाएं अविश्वसनीय रूप से गहरी हैं। उन्हें मिला एक पैकेज रूसी नेस्टिंग डॉल (Russian nesting doll) की तरह था जिसमें 23 परतें थीं। आप एक किला बना रहे हो सकते हैं, लेकिन गहराई में, 20वीं परत में, एक पेंच है जो दोषपूर्ण है। यदि वह पेंच टूट जाता है, तो आपका पूरा किला ढह सकता है, भले ही आपने उस पेंच को कभी छुआ भी न हो।

2. "टूटे हुए हिस्सों" की समस्या (The "Broken Parts" Problem)

शोधकर्ताओं ने नए टूटे हुए हिस्से नहीं बनाए; उन्होंने बस उन हिस्सों की सूची देखी जिन्हें लोग पहले से ही टूटा हुआ जानते हैं (जिन्हें CVEs, या कॉमन वल्नरेबिलिटीज़ एंड एक्सपोज़र्स कहा जाता है)। उन्होंने जांचा कि क्या कोई अभी भी उनके साथ निर्माण करने की कोशिश कर रहा है।

उन्होंने दो प्रकार के खतरे पाए:

  • "गारंटीकृत जाल" (4,655 पैकेज): ये ऐसे हैं जैसे एक "दरवाजा" ऑर्डर करना जिसमें केवल एक टूटा हुआ कब्जा आता है। यदि आप यह किला बनाने की कोशिश करते हैं, तो आपको उस टूटे हुए हिस्से का उपयोग करना ही पड़ेगा। दरवाजे को पूरी तरह से तोड़े बिना इसे ठीक करने का कोई तरीका नहीं है।
  • "संभावित जाल" (1,41,044 पैकेज): ये ऐसे हैं जैसे एक "दरवाजा" ऑर्डर करना जिसमें एक टूटा हुआ कब्जा हो सकता है, लेकिन इसमें एक अच्छा कब्जा भी हो सकता है। यह इस पर निर्भर करता है कि सप्लायर कौन है। यदि सप्लायर के पास अच्छे कब्जों की कमी हो जाती है, तो आपके किले को टूटा हुआ कब्जा मिल जाएगा। यह एक जुआ है, और अक्सर संभावना टूटे हुए हिस्से के पक्ष में होती है।

3. "चक्रीय भूलभुलैया" (The "Circular Maze")

कभी-कभी निर्देश इतने भ्रमित हो जाते हैं कि हिस्से अपनी ही पूंछ का पीछा करने लगते हैं।

  • उपमा: कल्पना कीजिए कि एक दरवाजा कहता है, "मुझे एक कब्जा चाहिए," और एक कब्जा कहता है, "मुझे एक दरवाजा चाहिए।"
  • शोधकर्ताओं को 10 लाख से अधिक ऐसे लूप मिले। यदि कोई कंप्यूटर इन्हें बनाने की कोशिश करता है, तो यह एक अनंत लूप में फंस जाता है, जैसे एक कुत्ता अपनी ही पूंछ का पीछा कर रहा हो, जब तक कि वह क्रैश न हो जाए। इनमें से कुछ लूप इतने चतुराई से छिपे हुए थे कि वास्तव में उनका उपयोग सुडोकू खेलने के लिए किया जा रहा था!

4. "वर्जन का भ्रम" (The "Version Confusion")

वास्तविक दुनिया में, यदि कोई हिस्सा टूटा हुआ है, तो निर्माता आमतौर पर कहता है, "वर्जन 1.0 का उपयोग न करें, वर्जन 2.0 का उपयोग करें।" लेकिन पायथन की दुनिया में, नियम बहुत अव्यवस्थित हैं।

  • कुछ पैकेज कहते हैं, "मुझे वर्जन 1.0 से 1.5 चाहिए।"
  • अन्य कहते, "मुझे वर्जन 1.4 से 2.0 चाहिए।"
  • "टूटा हुआ" वर्जन 1.45 हो सकता है।
  • क्योंकि नियम इतने जटिल हैं, कंप्यूटर अक्सर टूटे हुए वर्जन को चुन लेता है क्योंकि वह गणित में फिट बैठता है, भले ही एक सुरक्षित वर्जन मौजूद हो।

5. मुख्य निष्कर्ष (The Big Takeaway)

शोध पत्र यह निष्कर्ष निकालता है कि हालांकि पहले से बने हिस्सों का उपयोग करना सॉफ्टवेयर बनाना तेज़ और आसान बनाता है (जैसे लेगो ब्रिक्स खरीदना), यह एक छिपा हुआ जोखिम पैदा करता है।

  • पैमाना: उन्होंने लगभग 3,80,000 पैकेज देखे।
  • परिणाम: हजारों पैकेज मजबूरन टूटे हुए हिस्सों का उपयोग कर रहे हैं, और 1,40,000 से अधिक जोखिम में हैं।
  • गहराई: टूटे हुए हिस्से अक्सर श्रृंखला के भीतर गहराई में दबे होते हैं (औसत गहराई 4 से 6 परतें), जिससे उन्हें देखना कठिन हो जाता है।

आपको इसकी परवाह क्यों करनी चाहिए?

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

PyPitfall हमें बता रहा है: "हे, पायथन सॉफ्टवेयर की सप्लाई चेन में जहरीले गेहूं से भरा हुआ है। हमें केवल अंतिम सैंडविच की सामग्री की जांच करने के बजाय, सामग्रियों की भी सामग्री की जांच करने की आवश्यकता है।"

लेखकों ने अपने निष्कर्ष उन लोगों के साथ साझा किए हैं जो इस बाजार (PyPI) को चलाते हैं ताकि वे नियमों को ठीक करने और डेवलपर्स को उनके "किले" ढहने से पहले चेतावनी देने का प्रयास कर सकें।

अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?

आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।

Digest आज़माएँ →