एक डेवलपर असिस्टेंट से कस्टमर सर्च क्वेरी को ठीक करने के लिए कहता है जो काम नहीं कर रही थी। सुझाया गया पैच टेस्ट को तो पास करा देता है, लेकिन ‘टेनेंट-स्कोप वाले फ़िल्टर’ की जगह सिर्फ़ customerId से लुकअप का इस्तेमाल करता है। पुल रिक्वेस्ट (pull request) के मर्ज होने के बाद, कोई ऐसा यूज़र जिसे किसी दूसरे टेनेंट का आइडेंटिफ़ायर पता है, उस कस्टमर का रिकॉर्ड देख सकता है। हमलावर को रिपॉज़िटरी, CI सिस्टम या कोडिंग असिस्टेंट तक पहुँचने की ज़रूरत नहीं पड़ी। हमलावर ने बस एक सामान्य एप्लिकेशन रिक्वेस्ट का इस्तेमाल किया, जो ऐसे एंडपॉइंट पर भेजी गई थी जिसका ऑथराइज़ेशन चेक चुपचाप हट गया था।
अनट्रस्टेड चेंज (भरोसेमंद न होने वाला बदलाव) कोई भी ऐसा प्रस्तावित कोड, डिपेंडेंसी, कॉन्फ़िगरेशन या वर्कफ़्लो एडिट है जिसे अभी तक उसके लेखक से स्वतंत्र कंट्रोल (जाँच-पड़ताल) से गुज़रना बाकी है। असिस्टेंट का आउटपुट भी इसी श्रेणी में आता है, भले ही वह कंपाइल हो जाए, उसका कोई तर्कसंगत स्पष्टीकरण हो और वह बताई गई खराबी को ठीक कर दे। असिस्टेंट ने प्रॉम्प्ट और रिपॉज़िटरी के संदर्भ (context) से टेक्स्ट बनाया। इनमें से कोई भी बात यह साबित नहीं करती कि बनने वाली क्वेरी एप्लिकेशन की टेनेंट बाउंड्री (सीमा) को बनाए रखती है।
संबंधित रास्ता कई सीमाओं को पार करता है। असिस्टेंट का पैच, उसका सुझाया गया पैकेज वर्शन और कोई भी बनाया गया कॉन्फ़िगरेशन, रिपॉज़िटरी में ‘अनट्रस्टेड आर्टिफ़ैक्ट’ के तौर पर आते हैं। CI प्रस्तावित बदलाव की जाँच तो करता है, लेकिन यह अपने-आप यह पक्का नहीं करता कि ऑथराइज़ेशन सही है। प्रोडक्शन में सिर्फ़ मर्ज किया गया आर्टिफ़ैक्ट चलता है, जहाँ गायब फ़िल्टर की वजह से एक कस्टमर का डेटा दूसरे टेनेंट को दिख जाता है। नीचे दिया गया बाउंड्री मैप उन आर्टिफ़ैक्ट्स को अलग-अलग दिखाता है:
बाउंड्री मैप दिखाता है कि यह कोर्स एक सिक्योरिटी कॉन्ट्रैक्ट का इस्तेमाल क्यों करता है। AI से बने हर आर्टिफैक्ट को तब तक भरोसेमंद न मानें जब तक कि स्वतंत्र मानवीय समीक्षा और ज़रूरी ऑटोमेटेड जांच बदलाव को स्वीकार न कर लें। मॉडल कभी भी लागू करने का पॉइंट नहीं होता है। टेनेंट आइसोलेशन (tenant isolation) के लिए कहा गया प्रॉम्प्ट उसी चैनल से आती प्राथमिकता है जिससे सुझाया गया कोड आता है, न कि कोई ऐसा कंट्रोल जो असुरक्षित मर्ज को रोकता है।
कस्टमर-सर्च पैच के लिए, पुल रिक्वेस्ट रिव्यूअर यह जांचता है कि क्या क्वेरी अभी भी ऑथेंटिकेटेड यूज़र के टेनेंट अधिकार (entitlement) को लागू करती है। CI अलग-अलग सबूतों की जांच करता है: सोर्स एनालिसिस इम्प्लीमेंटेशन पैटर्न की जांच करता है, डिपेंडेंसी एनालिसिस नए जोड़े गए पैकेज की जांच करता है, और सीक्रेट स्कैनिंग क्रेडेंशियल्स के लिए बदले हुए सोर्स और कॉन्फ़िगरेशन की जांच करती है। रिपॉजिटरी ब्रांच प्रोटेक्शन उन जांचों और मंज़ूरियों की मांग करके मर्ज के फ़ैसले को लागू करता है। किसी भी कंट्रोल को इस बात पर निर्भर नहीं रहना चाहिए कि असिस्टेंट दावा कर रहा है कि पैच सुरक्षित है।
परीक्षा का नियम
AI से बने कोड को तभी स्वीकार किया जाता है जब स्वतंत्र समीक्षा और ज़रूरी सिक्योरिटी गेट्स रिकॉर्डेड सबूत देते हैं। मॉडल आउटपुट और प्रॉम्प्ट की शब्दावली एक्सेस कंट्रोल लागू नहीं करती है।
हर कंट्रोल की एक सीमा होती है। समीक्षा में डेटा-फ़्लो की कोई बारीक गलती छूट सकती है, इसलिए ऑटोमेटेड जांच एक और संकेत देती है। स्कैनर ऑथराइज़ेशन लॉजिक को छोड़ सकता है जिसके लिए एप्लिकेशन कॉन्टेक्स्ट की ज़रूरत होती है, इसलिए योग्य समीक्षा ज़रूरी बनी रहती है। पास होने वाली पाइपलाइन यह साबित नहीं करती कि कोई कमज़ोरी (vulnerability) नहीं है। यह साबित करती है कि इस रिविज़न के लिए तय गेट के सबूत मौजूद हैं। जब कोई ज़रूरी गेट फ़ेल हो जाता है, तो रिपॉजिटरी उस जानकारी को रिकॉर्ड करती है, पॉलिसी के अनुसार मर्ज को रोकती है, और स्वीकृति या अपवाद के फ़ैसले के लिए ऑडिट ट्रेल सुरक्षित रखती है।
चल रहा आर्टिफैक्ट एक पुल रिक्वेस्ट है जो मल्टी-टेनेंट वेब सर्विस में GET /search?q=... जोड़ता है और टेक्स्ट-सर्च डिपेंडेंसी जोड़ता है। यूज़र की रिक्वेस्ट एक अनट्रस्टेड इनपुट होती है। हैंडलर ऑथेंटिकेटेड यूज़र की पहचान प्राप्त करता है, डेटाबेस क्वेरी बनाता है, और डेटाबेस द्वारा रो (rows) लौटाने से पहले उस यूज़र के टेनेंट अधिकार को लागू करता है। डेटाबेस ऑपरेशन एप्लिकेशन की सर्विस आइडेंटिटी के तहत चलता है, जबकि क्वेरी या पॉलिसी लेयर यह तय करती है कि एंड-यूज़र क्या देख सकता है। अगर नया एंडपॉइंट ऑथेंटिकेटेड एंटाइटेलमेंट से तुलना किए बिना रिक्वेस्ट से tenantId स्वीकार करता है, तो इसका असर उस सर्विस आइडेंटिटी के ज़रिए एक्सेस किए जा सकने वाले हर रिकॉर्ड पर पड़ सकता है।
पुल रिक्वेस्ट भी भरोसेमंद नहीं होती। इसके ‘डिफ़’ (diff) में टेनेंट प्रेडिकेट हट सकता है, इसके डिपेंडेंसी मैनिफ़ेस्ट में कोई कमज़ोर या अनुपयुक्त पैकेज आ सकता है, और इसके बनाए गए कॉन्फ़िगरेशन में कोई गुप्त जानकारी (सीक्रेट) उजागर हो सकती है। असिस्टेंट का स्पष्टीकरण इन सवालों का समाधान नहीं कर सकता। सबूत ‘डिफ़’, बदली हुई डिपेंडेंसी मैनिफ़ेस्ट, स्कैनर कैटेगरी, रिव्यूअर की मंज़ूरी और मर्ज रिकॉर्ड से मिलते हैं।
एक स्टैटिक एप्लिकेशन सिक्योरिटी टेस्ट सोर्स कोड और कोड-लेवल डेटा फ़्लो में जानी-पहचानी कमज़ोरियों के पैटर्न को स्कैन करता है। सॉफ्टवेयर कंपोज़िशन एनालिसिस सप्लाई-चेन की स्थितियों के लिए डिपेंडेंसी और कंपोनेंट मेटाडेटा की जाँच करता है। सीक्रेट स्कैनिंग बदले हुए रिपॉज़िटरी आर्टिफैक्ट्स में ऐसे क्रेडेंशियल या टोकन को खोजती है जिन्हें कमिट नहीं किया जाना चाहिए। ये जाँचें अलग-अलग आर्टिफैक्ट्स का निरीक्षण करती हैं, इसलिए एक जाँच का सफल परिणाम दूसरी जाँच की जगह नहीं ले सकता। रिक्वेस्ट पाथ और CI पाथ यह दिखाते हैं कि सुझाव कहाँ से आते हैं और सत्यापन से स्वीकृति का प्रमाण कहाँ मिलता है: