نوٹس (notes) کی ایک مقامی ایپلی کیشن اپنے یونٹ ٹیسٹس میں کامیاب ہو سکتی ہے جبکہ اس کے ساتھ سیکیورٹی کی دو خامیاں بھی شامل ہوں۔ مثال کے طور پر، GET /notes/:id والا روٹ (route) ہر بار نوٹ 42 فراہم کرتا ہے جب کوئی تصدیق شدہ صارف اس کی درخواست کرتا ہے، چاہے وہ نوٹ کسی دوسرے اکاؤنٹ کی ملکیت ہی کیوں نہ ہو۔ اس کے علاوہ، ایپلی کیشن تلاش (search) کے لیے ایک ایسی اصطلاح قبول کرتی ہے جو محفوظ طریقے سے ہینڈل کیے بغیر براہِ راست ڈیٹا بیس کی استفسار (query) تک پہنچ جاتی ہے۔ تیسرا مسئلہ ریپوزٹری کے اپنے (کسٹم) کوڈ سے باہر موجود ہوتا ہے، جہاں کسی پیکج کے ورژن میں سیکیورٹی سے متعلق ایک شائع شدہ انتباہ (advisory) موجود ہوتا ہے۔ پہلے نقص کے لیے حملہ آور کو صرف کم اختیارات (low-privilege) والے ایک درست اکاؤنٹ کی ضرورت ہوتی ہے، دوسرے کے لیے قابلِ رسائی HTTP اینڈ پوائنٹ کی، اور ڈیپینڈنسی (dependency) سے جڑے خطرے کے لیے سورس کوڈ تک رسائی کی بھی ضرورت نہیں ہوتی۔
یہ خامیاں ایپلی کیشن کی اٹیک سرفیس (حملے کی ممکنہ سطح) کو ظاہر کرتی ہیں؛ یعنی کوڈ کا ہر وہ راستہ، رن ٹائم انٹرفیس، اور ڈیپینڈنسی کی حد (boundary) جس کے ذریعے غیر محفوظ ان پٹ یا حملہ آور کے زیرِ کنٹرول رویہ سسٹم کو متاثر کر سکتا ہے۔ دفاع کرنے والے کے لیے سوال یہ نہیں ہے کہ عام طور پر کون سا اسکینر بہترین ہے۔ ہمیں یہ طے کرنے کی ضرورت ہے کہ ایک ہی نوٹس ایپلی کیشن کے لیے ‘اسٹیٹک ایپلی کیشن سیکیورٹی ٹیسٹنگ’، ‘ڈائنامک ایپلی کیشن سیکیورٹی ٹیسٹنگ’، اور ‘سافٹ ویئر کمپوزیشن اینالائسز’ کو کس قسم کے شواہد فراہم کرنے چاہئیں، اور پھر ان شواہد کی بنیاد پر یہ فیصلہ کیا جائے کہ آیا کسی تبدیلی کو جاری (ship) کیا جا سکتا ہے یا نہیں۔ سورس ریپوزٹریز، چلتے ہوئے HTTP کا رویہ، اور تھرڈ پارٹی پیکجز خطرے کے مختلف پہلوؤں کو بے نقاب کرتے ہیں۔
سب سے چھوٹا مفید موازنہ /notes/42 کی درخواست کا ہے۔ سورس اینالائسز (ماخذ کا تجزیہ) اس اجازت نامے کی شرط (authorization condition) کی نشاندہی کر سکتا ہے جو درخواست کرنے والے صارف کے اکاؤنٹ کا موازنہ کبھی بھی نوٹ کے مالک کے اکاؤنٹ سے نہیں کرتی۔ رن ٹائم اینالائسز ایک صارف کے طور پر مجاز (authorized) لیب ریکویسٹ بھیج سکتا ہے اور یہ مشاہدہ کر سکتا ہے کہ آیا جواب میں کسی دوسرے صارف کا نوٹ ظاہر ہوتا ہے یا نہیں۔ ڈیپینڈنسی اینالائسز کمزور فیچر (vulnerable feature) کو چلائے بغیر ہی پیکج مینیفسٹ (package manifest) کا جائزہ لے سکتا ہے۔ کون سا تجزیہ کار کس دعوے کو ثابت کر سکتا ہے، اس کا انحصار اس بات پر ہے کہ خرابی کہاں موجود ہے۔
نوٹس ایپلی کیشن میں موجود ‘اعتماد کی حدود’ (trust boundaries) یہ ظاہر کرتی ہیں کہ ہر قسم کے شواہد کہاں سے شروع ہوتے ہیں اور کہاں ختم ہوتے ہیں۔
یہ خاکہ ظاہر کرتا ہے کہ کیوں کوئی بھی ایک اسکینر براؤزر ان پٹ، ایپلیکیشن لاجک، ڈیٹا بیس کال، اور بیرونی پیکیج کی حدود (boundary) کا یکساں طور پر جائزہ نہیں لے سکتا۔
چونکہ تینوں مشاہدہ کرنے والوں (اسکینرز) کو ایک مشترکہ ہدف درکار ہوتا ہے، اس لیے کورس میں ایک ایسی ریپوزٹری استعمال کی گئی ہے جس میں مقامی ملکیت والی اور جان بوجھ کر نقائص کے ساتھ بنائی گئی ‘نوٹس ایپلیکیشن’ موجود ہے۔ یہ ایپلیکیشن ویب API کی حدود پر HTTP پیرامیٹرز اور JSON باڈیز کو قبول کرتی ہے، مقامی لاگ ان روٹ کے ذریعے قائم کردہ شناخت (identity) کا استعمال کرتی ہے، HTML یا JSON جوابات واپس بھیجتی ہے، اور اپنے ڈیٹا تک رسائی کی تہہ (data-access layer) کے ذریعے ڈیٹا بیس آپریشنز انجام دیتی ہے۔ ہم صرف اس مقامی لیب ایپلیکیشن اور ان ماحول (environments) کو اسکین کرتے ہیں جو ہمارے کنٹرول میں ہیں۔ تحریری اجازت کے بغیر فریقِ ثالث (third-party) کی خدمات کی جانچ کرنا اس کورس کا حصہ نہیں ہے اور اس سے ریاستہائے متحدہ میں ‘کمپیوٹر فراڈ اینڈ ابیوز ایکٹ’ یا برطانیہ میں ‘کمپیوٹر مس یوز ایکٹ 1990’ جیسے قوانین کی خلاف ورزی ہو سکتی ہے۔
اس ریپوزٹری میں جان بوجھ کر شامل کیے گئے دو رویے (behaviors) موجود ہیں۔ ایک ‘انجیکشن’ (injection) کا شکار ہونے والا سرچ پاتھ ہے، جو CWE-89 (یعنی SQL کمانڈ میں استعمال ہونے والے خصوصی عناصر کو مناسب طریقے سے غیر مؤثر نہ بنانے) کی عکاسی کرتا ہے۔ دوسرا GET /notes/:id پر ‘ٹوٹے ہوئے آبجیکٹ لیول کی اجازت’ (broken object-level authorization) کا مسئلہ ہے؛ یہ ناکامی کی وہ قسم ہے جسے OWASP API Security Top 10 2023 میں API1 Broken Object Level Authorization کا نام دیا گیا ہے۔ ڈیپینڈنسی مینیفیسٹ (dependency manifest) میں ایک ایسے پیکیج کا بھی ذکر ہے جو جان بوجھ کر پرانا (outdated) رکھا گیا ہے اور اس میں ایک معلوم نقص موجود ہے۔ یہ کیسز الگ الگ رہتے ہیں کیونکہ کوڈ سے متعلق دریافت، HTTP کا مشاہدہ، اور پیکیج سے متعلق ایڈوائزری (انتباہ) ایک دوسرے کے متبادل ثبوت نہیں ہیں۔
ریپوزٹری کا اسنیپ شاٹ کسی بھی اسکین یا درخواست (request) کو چلائے بغیر روٹس، ڈیٹا تک رسائی، اور ڈیپینڈنسی کے اعلان (declaration) کی نشاندہی کرتا ہے۔