एक AI-जनरेटेड cron job ने दस सेकंड से भी कम समय में एक स्टार्टअप के सभी सक्रिय Stripe subscriptions को डिलीट कर दिया, जिससे कंपनी का मंथली रिकरिंग रेवेन्यू (MRR) घटकर केवल $38 रह गया। यह घटना दर्शाती है कि खतरा डिप्लॉयमेंट पाइपलाइन में है, न कि उस लैंग्वेज मॉडल में जिसने कोड लिखा था।
क्या हुआ
पिछले हफ्ते BridgeMindAI की टीम जब जागी, तो डैशबोर्ड पर मंथली रिकरिंग रेवेन्यू (MRR) केवल $38 दिख रहा था। एक AI मॉडल ने कोड की एक सिंगल लाइन बनाई जिसे शेड्यूलर ने ऑटोमैटिकली रन कर दिया। उस लाइन ने हर कस्टमर रिकॉर्ड के लिए Stripe के subscription-cancellation endpoint को कॉल किया। यह कॉल सात सेकंड में पूरी हो गई और पूरे कस्टमर बेस को मिटा दिया।
स्क्रिप्ट ने एक खाली डिलीशन क्यू (deletion queue) को सब कुछ डिलीट करने के सिग्नल के रूप में गलत पढ़ लिया। यह “empty = all” पैटर्न जनरेटिव AI के आने से बहुत पहले, 1980 के दशक से ही प्रोडक्शन कोड में मौजूद है।
मॉडल दोषी क्यों नहीं है
लोगों ने तुरंत AI मॉडल को अविश्वसनीय मानकर उसे दोष देना शुरू कर दिया। मॉडल को बदलने से भी यह डेटा डिलीट होना नहीं रुकता, क्योंकि खामी ह्यूमन-रिटन लॉजिक (human-written logic) में थी, न कि किसी हैलुसिनेशन (hallucination) या बायस (bias) में।
असली विफलताएं आर्किटेक्चरल (architectural) थीं:
- स्क्रिप्ट में एक लाइव प्रोडक्शन Stripe API key स्टोर थी जो subscriptions को कैंसिल कर सकती थी।
- यह बिना किसी रनटाइम सुपरविजन (runtime supervision) के चला।
- कोड जनरेशन और एक्जीक्यूशन के बीच कोई ह्यूमन चेकपॉइंट (human checkpoint) नहीं था।
इन कमियों की वजह से एक सिंगल बग ने कुछ ही सेकंड में रेवेन्यू स्ट्रीम को तबाह कर दिया।
किसी भी ऑटोनॉमस पाइपलाइन के लिए तीन सुरक्षा प्रश्न
कौन से ऑपरेशन्स अपरिवर्तनीय (irreversible) हैं? सब्सक्रिप्शन कैंसिल करना, रिकॉर्ड डिलीट करना, या रिफंड जारी करना वापस नहीं लिया जा सकता। उन्हें रीड-ओनली क्वेरीज़ की तुलना में अधिक सुरक्षा की आवश्यकता होती है।
एजेंट के पास कौन से क्रेडेंशियल्स (credentials) हैं? किसी ऑटोनॉमस प्रोसेस को मास्टर Stripe key देने का मतलब है उसे असीमित शक्ति देना। 'लीस्ट-प्रिविलेज प्रिंसिपल' (least-privilege principle) लागू करें: केवल स्कॉप्ड कीज़ (scoped keys) का उपयोग करें जो केवल आवश्यक कार्य ही कर सकें।
ह्यूमन चेकपॉइंट कहाँ है? केवल कोड रिव्यू काफी नहीं है। कोड जनरेशन के बाद और किसी भी विनाशकारी (destructive) एक्शन से पहले एक गेट (gate) लगाएं।
व्यावहारिक सुरक्षा उपाय (Practical safety rails)
- ड्राय-रन गेट (Dry-run gate) – किसी भी डिलीट या कैंसिल कॉल से पहले, लक्षित (intended) टारगेट को लॉग करें। यदि लिस्ट खाली है या असामान्य रूप से बड़ी है, तो प्रक्रिया रोक दें और किसी इंसान को अलर्ट करें।
- स्कॉप्ड क्रेडेंशियल्स (Scoped credentials) – डिफ़ॉल्ट रूप से रीड-ओनली कीज़ का उपयोग करें। जब किसी टास्क के लिए सब्सक्रिप्शन कैंसिल करना ज़रूरी हो, तो एक ऐसी रिस्ट्रिक्टेड की (restricted key) बनाएं जो एक बार में केवल एक ही कस्टमर आईडी पर काम कर सके।
- ह्यूमन-इन-द-लूप प्रॉम्प्ट (Human-in-the-loop prompt) – किसी चैनल (जैसे Slack) पर एक छोटा संदेश भेजें, जैसे “मैं 47 सब्सक्रिप्शन कैंसिल करने वाला हूँ। क्या पुष्टि करें?” इसकी लागत नगण्य है; लेकिन सुरक्षा का लाभ बहुत बड़ा है।
ये उपाय इस बात पर निर्भर नहीं करते कि कोड कौन सा मॉडल लिख रहा है, क्योंकि ये जनरेटर को नहीं, बल्कि एक्जीक्यूशन एनवायरनमेंट (execution environment) को सुरक्षित करते हैं।
ऑटोनॉमस एजेंट्स के लिए प्रोडक्शन चेकलिस्ट
- हर ऑपरेशन को read, reversible, या irreversible के रूप में वर्गीकृत करें।
- सभी irreversible कार्यों के लिए स्पष्ट मानवीय स्वीकृति (human approval) अनिवार्य करें।
- क्रेडेंशियल्स को केवल कार्य के लिए आवश्यक न्यूनतम अनुमतियों (permissions) तक सीमित रखें।
- उन लूप्स पर साइज लिमिट लगाएं जो रिकॉर्ड्स को डिलीट या मॉडिफाई करते हैं।
- एजेंट्स को पहले एक सैंडबॉक्स (sandbox) में चलाएं जो प्रोडक्शन डेटा की नकल करता हो; लाइव डेटा को छूने से पहले परिणाम की पुष्टि करें।
- एक्जीक्यूशन से पहले एजेंट की योजना को सरल भाषा में लॉग करें ताकि रिव्यूअर एक नज़र में इरादे को समझ सके।
इस चेकलिस्ट का पालन करने से "एक बार चलाओ और भूल जाओ" वाला स्क्रिप्ट एक नियंत्रित वर्कफ़्लो में बदल जाता है, जिसे ऑडिट किया जा सकता है और कुछ गलत दिखने पर रोका जा सकता है।
सबक साफ है: प्रक्रिया पर भरोसा करें, मॉडल पर नहीं।
