एक कस्टमर सपोर्ट चैट खोलता है और पूछता है, “क्या आप बता सकते हैं कि इनवॉइस INV-1042 को ‘लेट’ (देरी से आया) क्यों मार्क किया गया था?” सपोर्ट असिस्टेंट आत्मविश्वास के साथ जवाब देता है और एक ऐसे इंटरनल नोट का ज़िक्र करता है जो किसी दूसरी कंपनी का है, जिसमें यह लाइन भी शामिल है: “ACME रिन्यूअल शर्तों के अनुसार, net-60 पर फ़ीस माफ़ करें।” सपोर्ट UI ने एजेंट या कस्टमर को कभी कोई ACME टिकट नहीं दिखाया, फिर भी असिस्टेंट ने उस नोट को जवाब में शामिल कर लिया। यहाँ कुछ भी अजीब नहीं हुआ। कस्टमर को बस सामान्य चैनल में एक सामान्य सवाल पूछना था, और बाकी काम एप्लीकेशन ने किया।
जिस सिस्टम स्ट्रक्चर की वजह से यह लीक हुआ, वह इतना छोटा है कि हम उसे आसानी से समझ सकते हैं। एक एंड-यूज़र सपोर्ट एप्लीकेशन को मैसेज भेजता है, एप्लीकेशन डेटाबेस से संबंधित रिकॉर्ड निकालता है, एप्लीकेशन एक प्रॉम्प्ट तैयार करता है जिसमें यूज़र का मैसेज और निकाली गई रो (rows) शामिल होती हैं, और एप्लीकेशन उस प्रॉम्प्ट को मॉडल प्रोवाइडर को भेजता है। मॉडल टेक्स्ट देता है, और एप्लीकेशन उस टेक्स्ट को असिस्टेंट के जवाब के तौर पर दिखाता है। यह गड़बड़ी क्रॉस-टेनेंट साइटेशन (एक टेनेंट की जानकारी दूसरे टेनेंट को दिखाना) के रूप में दिखती है। एप्लीकेशन ने एक टेनेंट का प्राइवेट डेटा दूसरे टेनेंट के यूज़र को दिखा दिया।
हम लीक को तभी ठीक कर सकते हैं जब हम उस सटीक बाउंड्री (सीमा) की पहचान कर लें जहाँ अनट्रस्टेड (अविश्वसनीय) डेटा ट्रस्टेड (विश्वसनीय) एक्शन में बदलता है। ट्रस्ट बाउंड्री वह जगह है जहाँ एक तरफ़ का डेटा अपने-आप दूसरी तरफ़ के अधिकार (privileges) हासिल नहीं कर सकता, क्योंकि दोनों तरफ़ के मकसद और एक्सेस अलग-अलग होते हैं। हमारे सपोर्ट असिस्टेंट में, एक तरफ़ एंड-यूज़र होता है और दूसरी तरफ़ एप्लीकेशन का डेटा एक्सेस, लेकिन यह बाउंड्री हर उस स्टेप (हॉप) पर दोहराई जाती है जहाँ पढ़ा या दिखाया जाने वाला डेटा बदल सकता है।
पूरे रिक्वेस्ट पाथ में, हम चार चीज़ों को अनट्रस्टेड मानते हैं क्योंकि हर एक में ऐसे निर्देश या कंटेंट हो सकते हैं जिन्हें एप्लीकेशन ने नहीं बनाया है। एंड-यूज़र का मैसेज अनट्रस्टेड होता है क्योंकि उसे यूज़र कंट्रोल करता है। डेटाबेस की रो (rows) अनट्रस्टेड होती हैं क्योंकि अगर क्वेरी या फ़िल्टर गलत हो तो डेटाबेस अप्रत्याशित रो दे सकता है, और इसलिए भी क्योंकि निकाले गए टेक्स्ट में निर्देश जैसे कंटेंट हो सकते हैं जो जवाब का हिस्सा नहीं होने चाहिए। मॉडल का आउटपुट अनट्रस्टेड होता है क्योंकि मॉडल उसे मिले टेक्स्ट का पालन करता है और ऐसे रीड, राइट या डिस्क्लोज़र का सुझाव दे सकता है जिनका एप्लीकेशन ने कभी इरादा नहीं किया था। सिर्फ़ एप्लीकेशन का अपना कॉन्फ़िगरेशन, जैसे टूल के नामों की स्टैटिक अलाउलिस्ट या चुने जाने वाले कॉलम की हार्ड-कोडेड लिस्ट, शुरू में ट्रस्टेड होता है, और कॉन्फ़िगरेशन भी तभी ट्रस्टेड रहता है जब एप्लीकेशन उसे किसी कंट्रोल्ड सोर्स से लोड करे। नीचे दिया गया ट्रस्ट-बाउंड्री डायग्राम हर हॉप और उससे होकर जाने वाले डेटा के नाम बताता है। आइए उन जगहों को मार्क करें जहाँ हर अनट्रस्टेड इनपुट फ्लो में आता है: