
چند وقت پیش موقع بررسی امنیت یک سامانه دانشگاهی به یک SQL Injection برخوردم. اولش فکر میکردم مثل خیلی از موارد دیگه با یک آسیبپذیری معمولی طرف هستم، اما هرچه بیشتر بررسی کردم، ابعاد ماجرا جدیتر شد.
بعد از تأیید SQL Injection، تونستم به پنل مدیریت سایت دسترسی پیدا کنم. چیزی که انتظارش رو نداشتم این بود که داخل پنل، اطلاعات کاربران به این شکل نگهداری شده باشه.
در بخش مدیریت کاربران، اطلاعات نزدیک به ۲۰۰۰ نفر قابل مشاهده بود؛ شامل ایمیل، شماره تلفن و حتی رمز عبور کاربران.
بزرگترین مشکل اینجا بود که رمزها هش نشده بودند و بهصورت Plaintext ذخیره شده بودند. یعنی هر کسی که به این بخش دسترسی پیدا میکرد، میتوانست رمز واقعی کاربران را ببیند.

همین موضوع باعث شد شدت آسیبپذیری چند برابر شود. دیگر فقط بحث دسترسی به یک پنل ادمین نبود؛ بلکه اطلاعات ورود تعداد زیادی از کاربران در معرض خطر قرار داشت.
برای ارزیابی تأثیر واقعی مشکل، یکی از ایمیل را بهصورت رندوم بررسی کردم. مشخص شد کاربر از همان رمز عبور در سرویس ایمیل خود نیز استفاده کرده است.
زمانی که اطلاعات ورود را تست کردم، سرویس ایمیل تلاش برای ورود را مشکوک تشخیص داد و درخواست تأیید هویت اضافی نمایش داده شد. احتمالاً دلیل این موضوع تفاوت IP و موقعیت جغرافیایی من با محل معمول ورود صاحب حساب بود.

همان لحظه دوباره یاد یکی از مهمترین توصیههای امنیتی افتادم؛ اینکه هیچوقت از یک رمز عبور برای چند سرویس مختلف استفاده نکنید.
خیلی از افراد تصور میکنند اگر اطلاعات یک سایت نشت کند، فقط همان حساب در خطر است. اما وقتی یک رمز در چند سرویس مختلف استفاده شود، نشت اطلاعات از یک وبسایت میتواند روی ایمیل، شبکههای اجتماعی و سایر حسابهای مهم کاربر هم تأثیر بگذارد.
از طرف دیگر این اتفاق اهمیت احراز هویت دومرحلهای را هم نشان میدهد. حتی زمانی که رمز عبور افشا شده باشد، وجود یک لایه امنیتی اضافه میتواند جلوی دسترسی غیرمجاز را بگیرد.
بعد از مستندسازی کامل موضوع، گزارش به مسئولانه مربوطه ارسال شد. تمام شواهد و تصاویر قبل از اشتراکگذاری سانسور شدند و هیچ اطلاعاتی از کاربران منتشر نشد.
خوشبختانه پس از بررسی، آسیبپذیری رفع شد و مشکل ذخیرهسازی ناامن رمزهای عبور نیز برطرف شد.
چیزی که این مورد را برای من جالب کرد، خود SQL Injection نبود؛ بلکه زنجیرهای از مشکلات امنیتی بود که از دل آن بیرون آمد. یک SQL Injection ساده در نهایت به دسترسی به پنل مدیریت، مشاهده اطلاعات نزدیک به ۲۰۰۰ کاربر و آشکار شدن ضعفهای جدی در مدیریت اطلاعات حساس منتهی شد.
این تجربه یک بار دیگر ثابت کرد که گاهی یک آسیبپذیری بهظاهر کوچک، میتواند در عمل به یک ریسک بزرگ برای تعداد زیادی از کاربران تبدیل شود.