ایک صارف سپورٹ چیٹ کھولتا ہے اور پوچھتا ہے، “کیا آپ وضاحت کر سکتے ہیں کہ انوائس INV-1042 کو ‘لیٹ’ (تاخیر کا شکار) کیوں قرار دیا گیا؟” سپورٹ اسسٹنٹ پراعتماد انداز میں وضاحت کرتا ہے اور ایک ایسے اندرونی نوٹ کا حوالہ دیتا ہے جس کا تعلق کسی دوسری کمپنی سے ہے؛ اس نوٹ میں یہ جملہ شامل ہوتا ہے: “ACME کی تجدید کی شرائط کے مطابق، net-60 (ادائیگی کی 60 دن کی مدت) پر فیس معاف کر دی جائے۔” سپورٹ کے یوزر انٹرفیس (UI) نے ایجنٹ یا صارف کو کبھی بھی ACME کی ٹکٹس نہیں دکھائی تھیں، لیکن اس کے باوجود اسسٹنٹ نے وہ نوٹ اپنے جواب میں شامل کر لیا۔ یہاں کوئی غیر معمولی واقعہ پیش نہیں آیا۔ صارف کو صرف معمول کے چینل کے ذریعے ایک عام سوال پوچھنے کی ضرورت تھی، اور باقی کام ایپلی کیشن نے خود کر دیا۔
اس لیک (ڈیٹا کے غیر مجاز اخراج) کا سبب بننے والا سسٹم کا ڈھانچہ اتنا سادہ ہے کہ اسے آسانی سے سمجھا جا سکتا ہے۔ ایک اینڈ یوزر سپورٹ ایپلی کیشن کو پیغام بھیجتا ہے، ایپلی کیشن ڈیٹا بیس سے متعلقہ ریکارڈز حاصل کرتی ہے، پھر وہ ایک ‘پرامپٹ’ (ہدایت نامہ) تیار کرتی ہے جس میں صارف کا پیغام اور حاصل کردہ ڈیٹا کی قطاریں (rows) شامل ہوتی ہیں، اور آخر میں ایپلی کیشن اس پرامپٹ کو ماڈل فراہم کرنے والے (model provider) کو بھیج دیتی ہے۔ ماڈل متن واپس بھیجتا ہے، اور ایپلی کیشن اس متن کو اسسٹنٹ کے جواب کے طور پر ظاہر کرتی ہے۔ اس خرابی کو مختلف صارفین (tenants) کے درمیان ڈیٹا کے باہمی تبادلے یا حوالے (cross-tenant citation) کے طور پر دیکھا جا سکتا ہے۔ ایپلی کیشن نے ایک صارف (tenant) کا نجی ڈیٹا دوسرے صارف کے لیے کام کرنے والے شخص کو دکھا دیا۔
ہم اس لیک کو تب ہی درست کر سکتے ہیں جب ہم اس عین حد (boundary) کی نشاندہی کر سکیں جہاں غیر مصدقہ ڈیٹا کسی ایسے عمل میں داخل ہوتا ہے جس پر بھروسہ کیا جاتا ہے۔ اعتماد کی حد وہ مقام ہے جہاں ایک طرف کا ڈیٹا خود بخود دوسری طرف کے استحقاق یا رسائی کے اختیارات حاصل نہیں کر سکتا، کیونکہ دونوں اطراف کے مقاصد اور رسائی کے اختیارات مختلف ہوتے ہیں۔ ہمارے سپورٹ اسسٹنٹ کے معاملے میں، ایک طرف اینڈ یوزر ہوتا ہے اور دوسری طرف ایپلی کیشن کی ڈیٹا تک رسائی کا نظام؛ تاہم یہ حد ہر اس مرحلے (hop) پر دہرائی جاتی ہے جہاں پڑھنے یا ظاہر کیے جانے والے ڈیٹا میں تبدیلی آ سکتی ہے۔
درخواست کے پورے عمل کے دوران، ہم چار چیزوں کو غیر مصدقہ (untrusted) سمجھتے ہیں کیونکہ ان میں سے ہر ایک ایسی ہدایات یا مواد لے کر آ سکتی ہے جسے ایپلی کیشن نے خود تخلیق نہ کیا ہو۔ اینڈ یوزر کا پیغام غیر مصدقہ ہوتا ہے کیونکہ اس پر صارف کا اختیار ہوتا ہے۔ ڈیٹا بیس کی قطاریں (rows) غیر مصدقہ ہوتی ہیں کیونکہ اگر استفسار (query) یا فلٹر غلط ہو تو ڈیٹا بیس غیر متوقع نتائج دے سکتا ہے، اور اس لیے بھی کہ حاصل کردہ متن میں ہدایات پر مبنی مواد ہو سکتا ہے جو جواب کا حصہ نہیں ہونا چاہیے۔ ماڈل کا آؤٹ پٹ غیر مصدقہ ہوتا ہے کیونکہ ماڈل موصول ہونے والے متن کی پیروی کرتا ہے اور ایسے اقدامات (جیسے ڈیٹا پڑھنا، لکھنا یا ظاہر کرنا) تجویز کر سکتا ہے جن کا ارادہ ایپلی کیشن نے کبھی نہیں کیا تھا۔ صرف ایپلی کیشن کی اپنی کنفیگریشن—جیسے ٹولز کے ناموں کی ‘الاؤ لسٹ’ (static allowlist) یا منتخب کیے جانے والے کالموں کی پہلے سے طے شدہ فہرست (hard-coded list)—ہی شروع سے قابلِ اعتماد سمجھی جاتی ہے؛ اور یہ کنفیگریشن بھی تب ہی قابلِ اعتماد رہتی ہے جب ایپلی کیشن اسے کسی ایسے ذریعے سے لوڈ کرے جو مکمل کنٹرول میں ہو۔ نیچے دیا گیا ‘ٹرسٹ باؤنڈری’ (trust-boundary) کا خاکہ ہر ‘ہاپ’ (hop) اور اس کے ذریعے منتقل ہونے والے ڈیٹا کی نشاندہی کرتا ہے۔ آئیے اس مقام کی نشاندہی کریں جہاں ہر غیر مصدقہ (untrusted) ان پٹ اس بہاؤ میں داخل ہوتی ہے: