पेनलिजेंट हेडर

पाइथन स्टार्टअप हुक्स और पाइपीआई रिलीज़ ट्रस्ट, LiteLLM घटना ने एआई इंफ्रास्ट्रक्चर के लिए क्या बदला

LiteLLM घटना में सबसे महत्वपूर्ण तकनीकी विवरण केवल यह नहीं था कि दो PyPI संस्करण दुर्भावनापूर्ण थे। बल्कि यह था कि उनमें से एक ने Python स्टार्टअप हुक का उपयोग किया था। LiteLLM की अपनी घटना संबंधी सामग्री में कहा गया है। 1.82.7 में एक दुर्भावनापूर्ण पेलोड था लिटेलएम/प्रॉक्सी/प्रॉक्सी_सर्वर.पाइ, जबकि 1.82.8 जोड़ा गया लिटेलएम_इनिट.पीथ, जिससे पैकेज स्पष्ट रूप से बताए बिना पाइथन स्टार्टअप पर कोड निष्पादित करने में सक्षम हो जाता है litellm आयात करें. पाइथन का साइट दस्तावेज़ीकरण इस बात को स्पष्ट करता है कि यह क्यों मायने रखता है: से शुरू होने वाली पंक्तियाँ आयात करें एक के अंदर .पथ फ़ाइलें हर पाइथन स्टार्टअप पर निष्पादित की जाती हैं।लाइटएलएलएम)

इसने घटना के सुरक्षा संबंधी अर्थ को बदल दिया। एक विषाक्त निर्भरता जो केवल तभी सक्रिय होती है जब कोई विशिष्ट मॉड्यूल आयात किया जाता है, समस्या का एक वर्ग है। एक विषाक्त निर्भरता जो सामान्य इंटरप्रेटर स्टार्टअप को एक निष्पादन पथ में बदल देती है, समस्या का एक अन्य वर्ग है। MITRE अब Python Startup Hooks को ATT&CK उप-तकनीक के रूप में दस्तावेज़ित करता है। टी1546.018, लिनक्स, विंडोज़ और macOS पर स्थायित्व और निष्पादन के लिए पाइथन स्टार्टअप तंत्र के दुरुपयोग का वर्णन करते हुए। LiteLLM घटना इसलिए सिर्फ "PyPI पर एक और दुर्भावनापूर्ण पैकेज" नहीं थी। यह एक विश्वसनीय रजिस्ट्री पथ के माध्यम से प्रदान की गई अब मान्यता प्राप्त विरोधी तकनीक का एक जीवंत उदाहरण था। (माइट्रे अटैक)

दूसरा कारण कि यह घटना LiteLLM से परे क्यों मायने रखती है, वह है वास्तुकला (architectural) संबंधी। LiteLLM सिर्फ एक दिखावटी आवरण (cosmetic wrapper) नहीं है। इसका अपना PyPI पेज और दस्तावेज़ इसे एक पाइथन SDK और एक केंद्रीकृत LLM गेटवे, दोनों के रूप में स्थापित करते हैं, जिसमें प्रमाणीकरण और प्राधिकरण, बहु-किरायेदार खर्च ट्रैकिंग, प्रति-परियोजना लॉगिंग और गार्डरेल, वर्चुअल कुंजियाँ, और कुंजी, टीम, या संगठन के अनुसार अनुमति नियंत्रणों के साथ MCP गेटवे क्षमताएँ शामिल हैं। कई वास्तविक तैनातीओं में, इसका मतलब है कि यह पैकेज प्रदाता API कुंजियों, राउटिंग नीति, उपयोग लॉग, किरायेदार पृथक्करण, और टूल-पहुँच सीमाओं के करीब स्थित होता है। उस स्थिति में किसी घटक से समझौता हो जाने पर, हमलावर सिर्फ "एक कुंजी" ही नहीं चुरा सकता। वे एक नियंत्रण सतह चुरा सकते हैं। (पाइपाई)

यही कारण है कि LiteLLM घटना को केवल एक घटना-प्रतिक्रिया कहानी के रूप में नहीं, बल्कि एक रिलीज़-सुरक्षा केस स्टडी के रूप में भी पढ़ा जाना चाहिए। तत्काल प्रतिक्रिया कार्य स्पष्ट और तात्कालिक है: सीक्रेट्स को रोटेट करें, खोजें के लिए लिटेलएम_इनिट.पीथ, संपर्क की जाँच करें मॉडल्स.लिटेल्एम.क्लाउड, और ऑडिट कहाँ 1.82.7 या 1.82.8 पहुँच गया। LiteLLM के आधिकारिक मार्गदर्शन में ठीक यही कहा गया है। लेकिन एक बार ये कदम पूरे हो जाने के बाद, कठिन सवाल यह बच जाता है: जब एक ही पैकेज मॉडल एक्सेस, टीम बजट, MCP टूल्स और क्लाउड क्रेडेंशियल्स को जोड़ सकता है, तो Python रिलीज़ और इंस्टॉलेशन प्रथाएँ कैसी दिखनी चाहिए? (लाइटएलएलएम)

LiteLLM की घटना केवल स्रोत कोड के बारे में नहीं, बल्कि आर्टिफैक्ट्स के बारे में थी।

LiteLLM की घटना थ्रेड में कहा गया है कि दुर्भावनापूर्ण संस्करण PyPI पर प्रकाशित किए गए थे, लेकिन उन्हें कभी भी प्रोजेक्ट के आधिकारिक GitHub CI/CD फ्लो के माध्यम से रिलीज़ नहीं किया गया, और GitHub रिलीज़ केवल तक ही अपलोड की गई थीं। वी1.82.6.डेव1 जबकि 1.82.7 और 1.82.8 यह सीधे PyPI पर दिखाई दिया। यह महत्वपूर्ण है क्योंकि यह कई इंजीनियरिंग टीमों की अभी भी बनी हुई आदत को तोड़ता है: वे पहले रिपॉजिटरी के इतिहास को देखते हैं और मान लेते हैं कि रिपॉजिटरी की अखंडता से आर्टिफैक्ट की अखंडता सुनिश्चित होती है। इस मामले में, रिपॉजिटरी दृश्य और प्रकाशित-आर्टिफैक्ट दृश्य अलग हो गए। आर्टिफैक्ट ही हमला सतह थी। (गिटहब)

उस विचलन को स्थायी रूप से बदल देना चाहिए कि पाइथन टीमें भरोसे के बारे में कैसे सोचती हैं। एक साफ Git ट्री एक साफ पहिया साबित नहीं करता। एक हस्ताक्षरित कमिट एक साफ अपलोड साबित नहीं करता। एक टैग की गई रिलीज़ प्रक्रिया आपको तब तक सुरक्षित नहीं रखती जब तक पैकेज उस मार्ग के बाहर प्रकाशित नहीं किए जा सकते। LiteLLM मामले में, परियोजना के आधिकारिक अपडेट में कहा गया है कि दुर्भावनापूर्ण पैकेज थे 1.82.7 और 1.82.8, दोनों की खोज के बाद PyPI से हटा दिया गया, जबकि PyPI पर वर्तमान में दिखाई देने वाला नवीनतम संस्करण है 1.82.6. PyPI का प्रोजेक्ट पेज और फ़ाइल विवरण भी दिखाते हैं कि 1.82.6 के साथ अपलोड किया गया सूतली और उस फ़ाइल के लिए ट्रस्टेड पब्लिशिंग का उपयोग नहीं किया गया था। यह अपने आप में कारण-प्रमाण नहीं है, लेकिन यह दिखाता है कि कई पाइथन प्रोजेक्ट्स में पब्लिश-पाथ ट्रस्ट अभी भी क्रेडेंशियल हैंडलिंग पर कितना निर्भर करता है।लाइटएलएलएम)

व्यापक सबक सरल है: स्रोत उत्पत्ति और आर्टिफैक्ट उत्पत्ति संबंधित हैं, लेकिन ये एक ही नियंत्रण नहीं हैं। सुरक्षा समीक्षा जो केवल कोड समीक्षा तक सीमित रहती है, सार्वजनिक इंडेक्स के माध्यम से रिलीज़ आर्टिफैक्ट्स वितरित करने वाले किसी भी प्रोजेक्ट के लिए अधूरी है। आर्टिफैक्ट स्वयं, अपलोड पथ, और जिस पहचान ने इसे उत्पन्न किया, ये सभी विश्वास मॉडल का हिस्सा होने चाहिए।

पाइथन .पथ फ़ाइलें अस्पष्ट पैकेजिंग विवरण से अग्रिम सुरक्षा चिंता में स्थानांतरित

पाइथन का आधिकारिक साइट दस्तावेज़ कहता है .पथ फ़ाइलें विस्तारित हो सकती हैं सिस्टम पाथ, लेकिन यह कुछ और भी महत्वपूर्ण कहता है: से शुरू होने वाली पंक्तियाँ आयात करें निष्पादित किए जाते हैं, और एक निष्पादन योग्य पंक्ति में एक .पथ यह फ़ाइल हर Python स्टार्टअप पर चलती है, चाहे संबंधित मॉड्यूल का उपयोग हो या न हो। दस्तावेज़ों में यह भी उल्लेख है कि इस व्यवहार को जानबूझकर सीमित रखा गया है ताकि जटिल लॉजिक को हतोत्साहित किया जा सके। वह चेतावनी तब तक अकादमिक लगती है जब तक कोई हमलावर ठीक उसी तंत्र के भीतर रहने का निर्णय नहीं ले लेता। (पाइथन दस्तावेज़ीकरण)

लाइटएलएलएम 1.82.8 उस तंत्र को कहानी में बदल दिया। मूल GitHub मुद्दे में कहा गया है कि पहिये में शामिल था लिटेलएम_इनिट.पीथ, 34,628 बाइट्स लंबी, और कि फ़ाइल पैकेज के अपने में सूचीबद्ध थी रिकॉर्ड. अगली कड़ी में ट्रिगर अंतर को एक पंक्ति में संक्षेपित किया गया: 1.82.7 पर गोली चलाई गई import litellm.proxy, जबकि 1.82.8 यह किसी भी Python स्टार्टअप पर चल सकता है, किसी इम्पोर्ट की आवश्यकता नहीं। यह एक तकनीकी बदलाव है जिसके परिचालन परिणाम होते हैं। इसका मतलब है कि पैकेज समीक्षा केवल "हमारा ऐप कौन सा कोड इम्पोर्ट करता है" पर नहीं रुक सकती। इसे यह पूछना होगा कि "यह वातावरण हमारे ऐप के शुरू होने से पहले कौन सा कोड निष्पादित कर सकता है।" (गिटहब)

एक बार जब यह क्लिक हो जाता है, तो कई ब्लू-टीम निहितार्थ सामने आते हैं। साइट-पैकेज अब यह केवल एक डिपेंडेंसी निर्देशिका नहीं है; यह निष्पादन सतह का हिस्सा है। .पथ, साइटकस्टमाइज़.पाइ, और उपयोगकर्ताअनुकूलित करें.पाइ वे प्रथम श्रेणी के शिकार लक्ष्य बन जाते हैं। पाइथन इंटरप्रेटर की शुरुआत एक ऐसी घटना बन जाती है जिसे अप्रत्याशित नेटवर्क गतिविधि से सहसंबंधित करना महत्वपूर्ण होता है। एजेंट, डेवलपर लैपटॉप और अस्थायी रनर सभी और अधिक रोचक हो जाते हैं क्योंकि आधुनिक स्वचालन में पाइथन हर जगह मौजूद है, न कि केवल दीर्घकालिक एप्लिकेशन सेवाओं में। MITRE द्वारा पाइथन स्टार्टअप हुक्स को स्थायित्व और विशेषाधिकार-उन्नयन की उप-तकनीक के रूप में वर्गीकृत करना एक उपयोगी अनुस्मारक है कि यह कोई एकबारगी चाल नहीं है। यह एक पुन: प्रयोज्य तकनीक है जो व्यापक प्लेटफ़ॉर्म कवरेज प्रदान करती है। (माइट्रे अटैक)

यह अकेले ही कई संगठनों के भीतर प्रक्रिया परिवर्तन को उचित ठहराने के लिए पर्याप्त है। यदि आपकी एंडपॉइंट या सर्वर निगरानी पहले से ही नए की निगरानी नहीं करती है .पथ के अंतर्गत फाइलें साइट-पैकेज और डिस्ट-पैकेजेज़, वह अंतर अब महत्वपूर्ण है। यदि आपकी रिलीज़ समीक्षा यह नहीं बता सकती कि कौन से व्हील्स इंस्टॉल किए गए थे, किस इंडेक्स से, किन होस्ट्स पर, किस बिल्ड विंडो के दौरान, तो वह अंतर भी महत्वपूर्ण है।

एआई गेटवे आपूर्ति-श्रृंखला समझौते को पैकेज की संख्या से संकेतित खतरे से कहीं अधिक खतरनाक बनाते हैं।

एक सप्लाई-चेन घटना केवल इस बारे में नहीं है कि कितने वातावरणों ने एक खराब पैकेज को हल किया। यह इस बारे में है कि वह पैकेज क्या देखने के लिए स्थित है। LiteLLM के अपने दस्तावेज़ एक केंद्रीकृत API गेटवे का वर्णन करते हैं जिसमें प्रमाणीकरण, खर्च प्रबंधन, वर्चुअल कुंजियाँ, लॉगिंग, गार्डरेल और एक MCP गेटवे शामिल है जो कुंजी, टीम या संगठन के आधार पर टूल तक पहुंच को प्रतिबंधित कर सकता है। PyPI प्रोजेक्ट पेज भी इसे 100 से अधिक LLMs के लिए एक एकीकृत इंटरफ़ेस के रूप में वर्णित करता है, जो या तो एक गेटवे या एक Python SDK के रूप में उपलब्ध है। यह संयोजन LiteLLM को एक सामान्य यूटिलिटी निर्भरता की तुलना में कहीं अधिक महत्वपूर्ण लक्ष्य बनाता है। (लाइटएलएलएम)

LiteLLM की आधिकारिक चेतावनी में कहा गया है कि दुर्भावनापूर्ण संस्करणों ने पर्यावरण चर, SSH कुंजी, AWS, GCP और Azure के लिए क्लाउड-प्रदाता क्रेडेंशियल, Kubernetes टोकन और डेटाबेस पासवर्ड एकत्र किए, फिर डेटा को बाहर भेज दिया। मॉडल्स.लिटेल्एम.क्लाउड, जिसे प्रोजेक्ट के अनुसार कोई आधिकारिक LiteLLM या BerriAI डोमेन नहीं है। वह लक्ष्य सूची ठीक इसलिए समझ में आती है क्योंकि LiteLLM अक्सर वहीं मौजूद रहता है जहाँ गेटवे सीक्रेट्स, प्रोवाइडर क्रेडेंशियल्स, क्लस्टर क्रेडेंशियल्स और एडमिन सामग्री सह-अस्तित्व में होती हैं। मैलवेयर को प्रत्येक पीड़ित की आर्किटेक्चर की पूर्ण समझ की आवश्यकता नहीं थी। उसे केवल वहीं खोजने की जरूरत थी जहाँ गेटवे-क्लास सॉफ़्टवेयर स्वाभाविक रूप से रहता है। (लाइटएलएलएम)

यह इंजीनियरिंग टीमों द्वारा निर्भरता जोखिम को रैंक करने के तरीके को बदलता है। सही रैंकिंग "सबसे लोकप्रिय पैकेज पहले" नहीं है। यह "सबसे विशेषाधिकार प्राप्त पैकेज पहले" है। एक ऐसा पैकेज जो OpenAI, Anthropic, Azure OpenAI, Bedrock, Vertex, या MCP टूल्स तक पहुंच को मध्यस्थता करता है, उसे उसी डाउनलोड संख्या वाले उस पैकेज की तुलना में अधिक विश्वास का मानदंड मिलना चाहिए जो केवल स्ट्रिंग्स को प्रारूपित करता है या तिथियों को पार्स करता है। परिणाम ठोस है: गेटवे-क्लास निर्भरताओं को साधारण एप्लिकेशन लाइब्रेरियों की तरह नहीं, बल्कि पहचान अवसंरचना की तरह माना जाना चाहिए।

उसी तर्क से यह भी समझा जा सकता है कि LiteLLM की आधिकारिक अप्रभावित मार्गदर्शिका इतनी प्रकट करने वाली क्यों है। परियोजना कहती है कि LiteLLM Cloud उपयोगकर्ता प्रभावित नहीं हुए, GitHub से स्रोत इंस्टॉलेशन प्रभावित नहीं हुए, और आधिकारिक उपयोगकर्ता ghcr.io/berriai/litellm डॉकर इमेज प्रभावित नहीं हुईं क्योंकि उस डिप्लॉयमेंट पथ में निर्भरताएँ पिन की गई हैं। आवश्यकताएँ.txt और यह समझौता किए गए PyPI पैकेजों पर निर्भर नहीं करता है। यह केवल एक सहायक स्कोपिंग नोट नहीं है। यह एक वास्तविक-विश्व का प्रदर्शन है कि वितरण पथ और निर्भरता निर्धारवाद एक्सपोज़र को तीव्रता से बदल सकते हैं, भले ही एप्लिकेशन कोड नाममात्र रूप से समान ही क्यों न हो।लाइटएलएलएम)

पाइथन स्टार्टअप हुक्स और पाइपीआई रिलीज ट्रस्ट

सटीक पिन, संगत निर्दिष्टकर्ता, और "हमने इसे पिन कर दिया" की झूठी सांत्वना

कई पाइथन टीमें संस्करण प्रतिबंधों से मिलने वाली सुरक्षा का अतिआकलन करती हैं। PyPA के संस्करण-निर्दिष्टीकरण दस्तावेज़ में कहा गया है कि compatible-release ऑपरेटर ~= यह बाद के रिलीज़ों को अनुमति देने के लिए है, जिनके संगत बने रहने की उम्मीद है। पाइथन पैकेजिंग यूज़र गाइड मोटा-मोटी समतुल्यता बताता है। नाम ~= X.Yनाम >= X.Y, == X.*. इसका मतलब है कि एक ऐसी आवश्यकता जो मानव को संकीर्ण प्रतीत होती है, फिर भी नए प्रकाशित पैच रिलीज़ स्वीकार कर सकती है। (पाइथन पैकेजिंग)

LiteLLM मामले पर लागू होने पर, यह अंतर सैद्धांतिक नहीं है:

litellm
litellm>=1.82.6
litellm~=1.82.6
litellm==1.82.*

चारों पैटर्न में भटक सकते हैं 1.82.7 या 1.82.8केवल निम्नलिखित जैसी एक सटीक पिन ही उन रिलीज़ों को बाहर करती है:

छोटा करें==1.82.6

महत्वपूर्ण हिस्सा किसी एक घटना के आंकड़ों को याद करना नहीं है। यह श्रेणी त्रुटि को पहचानना है। कई टीमें "pinned" कहती हैं जबकि उनका वास्तविक मतलब होता है "इतनी ढीली सीमाओं के साथ बाँधना कि नए पैच रिलीज़ प्राप्त होते रहें।" नियमित संचालन में यह कुशल प्रतीत हो सकता है। दुर्भावनापूर्ण रिलीज़ घटना के दौरान, यह निर्धारणीय तैनाती और आकस्मिक ग्रहण के बीच का अंतर है। PyPA के निर्दिष्टीकरण नियम इतने स्पष्ट हैं कि टीमों को इस अंतर को नीति में शामिल करना चाहिए, इसे केवल परंपरा पर छोड़ने के बजाय। (पाइथन पैकेजिंग)

यहाँ तक कि सटीक पिन भी केवल आंशिक समाधान हैं। ये रेज़ॉल्वर ड्रिफ्ट को रोकते हैं, लेकिन ये आर्टिफैक्ट स्वयं की पुष्टि नहीं करते। यदि कोई बिल्ड सिस्टम सार्वजनिक इंडेक्स से रेज़ॉल्व करता है और उस आर्काइव पर भरोसा करता है जो पिन किए गए संस्करण नाम से मेल खाता है, तो सुरक्षा गारंटी अभी भी रजिस्ट्री पथ, आर्काइव मेटाडेटा और आपकी डाउनलोड प्रक्रिया की अखंडता पर निर्भर करती है। इसलिए अगला नियंत्रण कई टीमों के अंदाजे से कहीं अधिक महत्वपूर्ण है।

हैश-चेक्ड इंस्टॉल्स न्यूनतम आर्टिफैक्ट-विश्वास आधार हैं, जिन्हें अधिकांश टीमें अभी भी छोड़ देती हैं।

पिप के सुरक्षित-स्थापना दस्तावेज़ में कहा गया है --हैश-आवश्यक हैश जांच मोड को लागू करता है और डिप्लॉय स्क्रिप्ट्स में उपयोगी है ताकि यह सुनिश्चित हो सके कि आवश्यकताएँ फ़ाइल में लेखक द्वारा प्रदान किए गए हैश मौजूद हैं। पाइप इंस्टॉल संदर्भ कहता है --हैश-आवश्यक दोहराए जाने वाले इंस्टॉल्स के लिए प्रत्येक आवश्यकता हेतु एक हैश की आवश्यकता होती है, और पाइप हैश विशेष रूप से हैश-चेकिंग मोड में उपयोग के लिए डिजेस्ट की गणना करने के लिए मौजूद है। पाइप-टूल्स उसके ऊपर एक व्यावहारिक वर्कफ़्लो जोड़ता है पाइप-कंपाइल --जेनरेट-हैशेसइनमें से कुछ भी विदेशी नहीं है। यह मुख्यधारा का टूलिंग है जिसे कई टीमें अभी भी नजरअंदाज करती हैं।पाइप)

एक सुरक्षित इंस्टॉलेशन पथ कुछ इस तरह दिखता है:

pip-compile --generate-hashes requirements.in
pip install --require-hashes -r requirements.txt

और परिणामस्वरूप आवश्यकता लाइन कुछ इस तरह दिखती है:

litellm==1.82.6 \
    --hash=sha256:164a3ef3e19f309e3cabc199bef3d2045212712fefdfa25fc7f75884a5b5b205

PyPI का वर्तमान फ़ाइल मेटाडेटा के लिए litellm-1.82.6-py3-none-any.whl यह प्रकाशित करता है कि SHA256, जो उदाहरण को अमूर्त के बजाय ठोस बनाता है। हैश जांच का मूल्य यह नहीं है कि यह हर आपूर्ति-श्रृंखला समस्या का समाधान करता है। यह नहीं करता। इसका मूल्य यह है कि यह चुपचाप होने वाले कलाकृतियों के विचलन को उजागर कर देता है। एक अप्रत्याशित पहिया, एक बदला हुआ संग्रह, या स्रोत-और-पहिया प्राप्त करने में असंगति अब अदृश्य नहीं रहती। इंस्टॉलेशन जोरदार तरीके से विफल हो जाता है।पाइपाई)

उत्पादन और CI में आपको ठीक ऐसी ही विफलता चाहिए। हमलावर तब जीतते हैं जब निर्भरता समाधान शांत, सामान्य दिखने वाला और बाद में तर्कसंगत ठहराना आसान हो। हैश-चेक्ड इंस्टॉलेशन अस्पष्टता की एक बड़ी श्रेणी को त्रुटि की स्थिति में बदल देते हैं। AI गेटवे, एजेंट रनटाइम या MCP इंफ्रास्ट्रक्चर संचालित करने वाली टीमों के लिए, यह पैकेजिंग परफेक्शनिज्म नहीं है। यह कंट्रोल-प्लेन स्वच्छता है।

पाइथन स्टार्टअप हुक्स और पाइपीआई रिलीज ट्रस्ट

ट्रस्टेड पब्लिशिंग केवल यह नहीं बदलता कि प्रकाशित करना कितना सुविधाजनक लगता है, बल्कि यह भी बदलता है कि किसे प्रकाशित करने की अनुमति है।

PyPI की Trusted Publishing दस्तावेज़ीकरण मॉडल का सीधे वर्णन करती है: एक बाहरी सेवा और PyPI के बीच अल्पकालिक पहचान टोकन का आदान-प्रदान करने के लिए OpenID Connect का उपयोग करें, जिससे स्वचालित वातावरण में मैन्युअल रूप से उत्पन्न API टोकन की आवश्यकता समाप्त हो जाती है। GitHub की PyPI के लिए आधिकारिक OIDC मार्गदर्शन कहती है कि आप एक विश्वास संबंध कॉन्फ़िगर करते हैं जो एक PyPI प्रोजेक्ट को एक विशिष्ट रिपॉजिटरी और वर्कफ़्लो से जोड़ता है, और यह चेतावनी देती है कि गलत रिपॉजिटरी या वर्कफ़्लो असाइन करना API टोकन साझा करने के बराबर है। PyPI के अपने उपयोग दस्तावेज़ कहते हैं कि यह प्रक्रिया एक OIDC टोकन प्राप्त करती है, उसे एक अल्पकालिक API कुंजी के लिए बदलती है, और फिर अपलोड के लिए उस कुंजी का उपयोग करती है, के साथ आईडी-टोकन: लिखें GitHub Actions में आवश्यक। (पाइपाई दस्तावेज़)

यह ट्रस्ट संरचना में एक सार्थक परिवर्तन है। दीर्घकालिक प्रकाशित टोकन पोर्टेबल रहस्य हैं। इन्हें कॉपी किया जा सकता है, इच्छित वर्कफ़्लो के बाहर पुन: उपयोग किया जा सकता है, और अक्सर वे उन लोगों या नौकरियों से भी अधिक समय तक जीवित रहते हैं जिन्हें इन्हें सबसे पहले चाहिए था। ट्रस्टेड पब्लिशिंग उस मॉडल को सीमित करता है, प्रकाशित करने को एक विशिष्ट वर्कफ़्लो पहचान से बाँधकर और मांग पर अल्पकालिक प्रमाणपत्र जारी करके। इससे रिलीज़ समझौता असंभव नहीं हो जाता, लेकिन यह मानदंडों को ऊँचा कर देता है और अनुमत प्रकाशित पथ को कहीं अधिक स्पष्ट बना देता है।पाइपाई दस्तावेज़)

इसलिए एक न्यूनतम GitHub Actions रिलीज़ जॉब कुछ इस तरह दिखती है:

नाम: release

ऑन:
  release:
    प्रकार: [published]

जॉब्स:
  publish:
    रन्स-ऑन: ubuntu-latest
    अनुमति:
 id-token: write
    स्टेप्स:
 - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
 with:
 python-version: "3.12"
 - run: python -m pip install -U build
 - run: python -m build
 - uses: pypa/gh-action-pypi-publish@release/v1

सटीक YAML आपके वर्कफ़्लो पर निर्भर करता है, लेकिन सुरक्षा सिद्धांत नहीं। एक पब्लिश एक्शन को एक रिपॉजिटरी, एक वर्कफ़्लो, और वरीयता से एक संरक्षित वातावरण के साथ बांधा जाना चाहिए, जिसमें स्पष्ट डिप्लॉयमेंट नियम हों। GitHub की अपनी मार्गदर्शिका में सिफारिश की गई है कि जब वर्कफ़्लो या OIDC पॉलिसीज़ में वातावरण का उपयोग किया जाता है, तो वातावरण सुरक्षा नियम जोड़े जाएँ, ताकि ब्रांच और टैग नियंत्रण भी रिलीज ट्रस्ट बाउंड्री का हिस्सा बन जाएँ।GitHub दस्तावेज़)

LiteLLM का मामला इस विरोधाभास को समझना आसान बनाता है। लेखन के समय, LiteLLM के लिए PyPI फ़ाइल मेटाडेटा 1.82.6 कहता है "ट्रस्टेड पब्लिशिंग का उपयोग करके अपलोड किया गया? नहीं" और एक अपलोड दिखाता है via सूतली. फिर से, यह अपने आप समझौते को पीछे मुड़कर स्पष्ट नहीं करता, लेकिन यह दिखाता है कि कई महत्वपूर्ण Python परियोजनाएँ अभी भी एक रिलीज़ मॉडल में मौजूद हैं जहाँ पोर्टेबल प्रकाशन प्रमाण-पत्र प्रासंगिक बने रहते हैं। सीख यह नहीं है कि "हर घटना OIDC की कमी के कारण होती है।" सीख यह है कि "प्रकाशन पहचान को उस कार्यप्रवाह से यथासंभव मजबूती से बांधा जाना चाहिए जो प्रकाशित करने के लिए निर्धारित है।" (पाइपाई)

एक बार बनाएँ, एक बार सत्यापित करें, कई बार प्रचारित करें, यह हर जगह लाइव समाधान करने से बेहतर पैटर्न है।

सार्वजनिक पैकेज इंडेक्स एक वितरण चैनल है, सुरक्षित कक्ष की गारंटी नहीं। जितनी बार बिल्ड पाइपलाइन सीधे लाइव सार्वजनिक इंडेक्स से रिज़ॉल्व होती है, उतनी ही बार वह पाइपलाइन रजिस्ट्री की विश्वसनीयता का सवाल फिर से उठाती है। यह विशेष रूप से जोखिम भरा होता है जब वही पाइपलाइन डिप्लॉयमेंट क्रेडेंशियल्स, रजिस्ट्री एक्सेस, या चोरी करने लायक अन्य सीक्रेट्स भी रखती हो। LiteLLM के आधिकारिक मार्गदर्शन में स्पष्ट रूप से उपयोगकर्ताओं को स्थानीय वातावरण, CI/CD पाइपलाइन्स, Docker बिल्ड्स, और डिप्लॉयमेंट लॉग्स का ऑडिट करने के लिए कहा गया था। 1.82.7 और 1.82.8, जो पैकेजिंग जोखिम और पाइपलाइन जोखिम के आपस में जुड़े होने की एक असामान्य रूप से सीधी याद दिलाता है। (लाइटएलएलएम)

अधिक लचीला पैटर्न यह है कि एक नियंत्रित पथ में एक बार समाधान करें, सटीक संस्करणों और हैशों को लॉक करें, उस हल किए गए सेट से आर्टिफैक्ट्स बनाएं, उन्हें सत्यापित करें, और फिर उन्हीं आर्टिफैक्ट्स को आगे बढ़ाएं। लक्ष्य अपने आप में पूर्ण अपरिवर्तनीयता का नहीं है। लक्ष्य आश्चर्य को कम करना है। जब कोई दुर्भावनापूर्ण रिलीज़ सामने आती है, तो आप एक द्विआधारी प्रश्न का उत्तर देना चाहते हैं: "क्या हमारे प्रमोशन पथ ने कभी उस आर्टिफैक्ट को शामिल किया था?" यह तब कहीं अधिक आसान होता है जब संगठन के पास एक ही रिज़ॉल्यूशन पॉइंट हो, बजाय इसके कि हर टीम, Dockerfile और अस्थायी रनर सार्वजनिक इंडेक्स से ताज़ा लाइव रिज़ॉल्यूशन करें।

यहीं वह बिंदु है जहाँ रिलीज सुरक्षा उपयोगी, गैर-विपणन तरीके से आक्रामक सत्यापन से मिलती है। सप्लाई-चेन घटना के बाद, कुछ टीमें यह सत्यापित करना चाहती हैं कि क्या उजागर होस्ट या गेटवे ने वास्तव में पार्श्वीय गति, गुप्त दुरुपयोग, या पहुँच योग्य निम्नलिखित समझौते की अनुमति दी थी। उस संकीर्ण सत्यापन चरण में, ऐसे उपकरण जो इंस्टॉलेशन पथों को पुन: उत्पन्न कर सकते हैं, समझौते के बाद के प्रवाहों का अनुकरण कर सकते हैं, और साक्ष्य संरक्षित कर सकते हैं, उपयोगी हो सकते हैं। उस संदर्भ में पेनलिजेंट द्वारा स्वचालित पेंटस्टिंग और साक्ष्य-आधारित आक्रामक वर्कफ़्लो पर प्रकाशित सामग्री प्रासंगिक है। मुद्दा यह नहीं है कि अटैक सत्यापन पैकेज ट्रस्ट नियंत्रणों की जगह ले लेता है। बल्कि यह है कि एक बार रिलीज़-पथ में विफलता होने पर, नियंत्रित सत्यापन यह समझने में मदद करता है कि समझौता किया गया वातावरण वास्तव में कहाँ तक पहुँच सकता था। (पेनलिजेंट)

सही तुलना केवल CVE ही नहीं है, बल्कि CVE-2024-3094 अभी भी सही सबक सिखाता है।

सबसे प्रसिद्ध हालिया तुलना है CVE-2024-3094, xz बैकडोर। NVD उस समस्या का वर्णन करता है कि यह अपस्ट्रीम xz टारबल्स में संस्करण से शुरू होने वाले दुर्भावनापूर्ण कोड के रूप में मौजूद है। 5.6.0, जहाँ बिल्ड प्रक्रिया ने एक छद्म परीक्षण फ़ाइल से पूर्वनिर्मित ऑब्जेक्ट फ़ाइल निकाली और बिल्ड के दौरान लाइब्रेरी के व्यवहार को संशोधित किया। महत्वपूर्ण समानता कार्यान्वयन विवरण में नहीं है। यह विश्वास की विफलता है। xz और LiteLLM दोनों में, खतरा सामान्य बग के एक्सपोज्ड एप्लिकेशन एंडपॉइंट के माध्यम से शोषित होने के बजाय, एक विश्वसनीय सॉफ़्टवेयर-वितरण मार्ग पर सवार दुर्भावनापूर्ण सामग्री से आया। (एनवीडी)

यह अंतर अभी भी स्पष्ट रूप से बताने लायक है। xz में, समझौते ने अपस्ट्रीम रिलीज़ सामग्री को प्रभावित किया और फिर बिल्ड चेन और संबंधित सॉफ़्टवेयर को बदल दिया। LiteLLM में, समझौते ने PyPI आर्टिफैक्ट्स को प्रभावित किया, और 1.82.8 इसने विशेष रूप से एक प्रलेखित पाइथन स्टार्टअप तंत्र का दुरुपयोग किया। एक मामले ने बिल्ड पाथ का सहारा लिया। दूसरे ने इंस्टॉल और स्टार्टअप पाथ का। लेकिन दोनों ही एक ही रणनीतिक सत्य दिखाते हैं: एक बार जब एक विश्वसनीय सॉफ़्टवेयर-वितरण सीमा से समझौता हो जाता है, तो सामान्य पैच-प्रबंधन की प्रवृत्तियाँ पर्याप्त नहीं होतीं। आपको आर्टिफैक्ट ट्रस्ट, वर्कफ़्लो-आधारित प्रकाशन, और निर्धारक उपभोग की आवश्यकता है।एनवीडी)

मार्च 2026 के दुर्भावनापूर्ण-पैकेज घटना की तुलना एक सामान्य LiteLLM भेद्यता से करना भी उपयोगी है। NVD की CVE-2025-45809 LiteLLM में पहले की SQL इंजेक्शन समस्या का वर्णन करता है। 1.81.0 संबंधित /कुंजी/ब्लॉक और /कुंजी/अनब्लॉक एंडपॉइंट्स। यह पारंपरिक मॉडल है: एप्लिकेशन लॉजिक में उत्पाद दोष, एक ज्ञात प्रभावित संस्करण सीमा, और एक पैच पथ। दुर्भावनापूर्ण-पैकेज की घटना मौलिक रूप से भिन्न है। पैकेज आर्टिफैक्ट स्वयं ही हमले का वाहक बन गया। इसीलिए निवारण में केवल "सुरक्षित संस्करण में अपग्रेड करें" ही नहीं, बल्कि क्रेडेंशियल रोटेशन, आर्टिफैक्ट समीक्षा, और रिलीज-पथ को मजबूत करना भी शामिल होना चाहिए। (एनवीडी)

पाइथन स्टार्टअप हुक्स और पाइपीआई रिलीज ट्रस्ट

LiteLLM के बाद क्या बदलना चाहिए, उन टीमों के लिए भी जिन्होंने कभी LiteLLM का उपयोग नहीं किया।

पहली परिवर्तन सांस्कृतिक है। पाइथन पैकेजिंग के विवरण जैसे .पथ एक्ज़ीक्यूशन, हैश-चेकिंग मोड, और OIDC-आधारित पब्लिशिंग अब विशिष्ट रिलीज़-इंजीनियरिंग की तुच्छ जानकारी नहीं रहे। ये प्रोडक्शन सुरक्षा का हिस्सा हैं। यदि आपका संगठन CI, इन्फ्रास्ट्रक्चर ऑटोमेशन, एजेंट टूलिंग, मॉडल गेटवे, डेटा प्रोसेसिंग, या प्लेटफ़ॉर्म ग्लू के लिए पाइथन पर निर्भर करता है, तो पाइथन स्टार्टअप व्यवहार और पाइथन रिलीज़ ट्रस्ट सुरक्षा समीक्षा में शामिल होने चाहिए, न कि केवल पैकेजिंग दस्तावेज़ों में।

दूसरा परिवर्तन वास्तुशिल्पीय है। बाहरी AI प्रदाताओं के सामने स्थित निर्भरताएँ, जो अनुरोधों को विभिन्न मॉडलों में भेजती हैं, वर्चुअल कुंजियाँ जारी करती हैं, या MCP टूल प्रदान करती हैं, उन्हें विशेषाधिकार प्राप्त नियंत्रण-तल सॉफ़्टवेयर माना जाना चाहिए। इन्हें सामान्य लीफ़ निर्भरताओं की तुलना में अधिक सख्त इंस्टॉल नीति, अधिक सख्त आर्टिफैक्ट विश्वसनीयता, और कड़ी रनटाइम निगरानी की आवश्यकता है। LiteLLM का सार्वजनिक फ़ीचर सेट सीधे तौर पर इस तर्क को स्थापित करता है। अन्य गेटवे-शैली के AI घटकों का मूल्यांकन भी इसी मानक के आधार पर किया जाना चाहिए।लाइटएलएलएम)

तीसरी परिवर्तन प्रक्रियात्मक है। "Pinned" का मतलब सटीक संस्करण और हैश होना चाहिए, न कि "शायद पर्याप्त संकीर्ण"। "Release automation" का मतलब वर्कफ़्लो-आधारित पहचान के साथ अल्पकालिक प्रकाशन क्रेडेंशियल्स होना चाहिए, न कि "कोई टोकन CI में कहीं मौजूद है।" "Install verification" में आर्टिफैक्ट की उत्पत्ति और स्टार्टअप-हुक दृश्यता शामिल होनी चाहिए, न कि केवल निर्भरता नाम और रिपॉजिटरी कमिट्स। इनमें से कोई भी जोखिम को समाप्त नहीं करता, लेकिन यह कई ऐसे रास्ते बंद कर देता है जिनसे सप्लाई-चेन हमलावर वर्तमान में बहुत कम प्रतिरोध के साथ गुजरते हैं। (पाइपाई दस्तावेज़)

चौथा परिवर्तन परिचालन में है। ब्लू टीमों को अपनी सामान्य हंट शब्दावली में पाइथन स्टार्टअप हुक्स जोड़ने चाहिए। यदि कोई पैकेज एप्लिकेशन द्वारा अपना कोड इम्पोर्ट करने से पहले ही निष्पादन की व्यवस्था कर सकता है, तो .पथ, साइटकस्टमाइज़.पाइ, और उपयोगकर्ताअनुकूलित करें.पाइ वे अब सीमांत मामले नहीं रहे। वे निष्पादन सतहें हैं। MITRE की ATT&CK प्रविष्टि इसलिए मौजूद है क्योंकि रक्षकों को घटनाओं और प्लेटफ़ॉर्मों में उस व्यवहार के बारे में तर्क करने के लिए एक स्थिर तरीके की आवश्यकता है।माइट्रे अटैक)

संबंधित पठन और संदर्भ

LiteLLM का आधिकारिक घटना अपडेट प्रभावित संस्करणों, आधिकारिक प्रभाव सीमाओं, IoCs और तत्काल मार्गदर्शन के लिए प्राथमिक स्रोत बना हुआ है। दो GitHub मुद्दे अभी भी स्टार्टअप-हुक विवरण, के लिए सर्वश्रेष्ठ सार्वजनिक संदर्भ हैं। प्रॉक्सी_सर्वर.पाइथन ट्रिगर इन 1.82.7, और डायरेक्ट-टू-PyPI रिलीज-पाथ की व्याख्या। (लाइटएलएलएम)

पाइथन-विशिष्ट पृष्ठभूमि के लिए, आधिकारिक साइट दस्तावेज़ीकरण इस बात का प्रमुख संदर्भ है कि कैसे .पथ फ़ाइलें कैसे व्यवहार करती हैं। पैकेज उपभोग के लिए, पाइथन पैकेजिंग यूज़र गाइड का संस्करण-निर्दिष्टीकरण दस्तावेज़, pip का सुरक्षित-स्थापना मार्गदर्शन, पाइप इंस्टॉल --require-hashes, और पाइप-टूल्स --हैश-जनरेट वे व्यावहारिक संदर्भ हैं जिनका उपयोग अधिकांश टीमों को इस घटना को नीति परिवर्तन में बदलने के लिए करना चाहिए।पाइथन दस्तावेज़ीकरण)

रिलीज़ सुरक्षा के लिए, PyPI का Trusted Publishing दस्तावेज़ीकरण और GitHub का PyPI के लिए OIDC मार्गदर्शन सबसे प्रासंगिक आधिकारिक संदर्भ हैं। ATT&CK मैपिंग के लिए, का उपयोग करें टी1546.018तुलनीय आपूर्ति-श्रृंखला केस स्टडी के लिए पढ़ें CVE-2024-3094. एक सामान्य LiteLLM उत्पाद की खामी की तुलना दुर्भावनापूर्ण आर्टिफैक्ट से करने के लिए, पढ़ें CVE-2025-45809. (पाइपाई दस्तावेज़)

इस विषय के लिए स्वाभाविक रूप से उपयुक्त Penligent पर आंतरिक पठन हेतु, सबसे प्रासंगिक पृष्ठ मौजूदा LiteLLM घटना-प्रतिक्रिया लेख, एजेंट कौशल आपूर्ति-श्रृंखला की सीमा क्यों बन गए इस पर लेख, Penligent के स्वचालित पैठ-परीक्षण कार्यप्रवाह का अवलोकन, और एक वास्तविक AI पैठ-परीक्षण उपकरण को व्यवहार में वास्तव में क्या करना चाहिए इस पर लेख हैं।पेनलिजेंट)

LiteLLM से मिलने वाला स्थायी सबक केवल यह नहीं है कि एक लोकप्रिय पैकेज समझौता हुआ था। यह है कि पाइथन स्टार्टअप व्यवहार, रिलीज़ की पहचान, आर्टिफैक्ट सत्यापन और AI गेटवे प्लेसमेंट अब सभी एक ही विश्वास की कहानी का हिस्सा हैं। जो टीमें अभी भी इन्हें अलग-अलग मामलों के रूप में देखती हैं, वे हमलावरों को "हमने कोड की समीक्षा की" और "हमने वास्तव में चलने वाली चीज़ पर भरोसा किया" के बीच बहुत अधिक जगह छोड़ रही हैं।

पोस्ट साझा करें:
संबंधित पोस्ट
hi_INHindi