جعل درخواست یاCSRF (Cross Site Request Forgery) یک آسیبپذیری وب است که Attacker با استفاده از آن میتواند کاری کند که قربانی اقداماتی را انجام دهد که قصد انجام آنها را نداشته.
به عنوان مثال تصویر زیر که نشان میدهد قربانی با کلیک بروی پیوندی باعث اجرا کردن یک اسکریپت مخرب شده است که آدرس ایمیل او بصورت ناخواسه عوض شده است
معمولاً در این نوع حمله، هکرها از کوکیهای مرورگر یا پارامترهای URL برای انجام درخواستهای تقلبی استفاده میکنند. این درخواستها ممکن است عملیات حذف، ویرایش یا افزودن دادهها را در سایت هدف انجام دهند و میتواند منجر به خسارت جدی و نقض امنیت سایت شود
چگونه کار میکند؟
برای اجرای حمله CSRF سه شرط کلیدی زیر باید وجود داشته باشد:
اجرای اقدام مرتبط توسط مهاجم: یک اقدام مرتبط در داخل برنامهکاربردی که مهاجم دلیلی برای انجام آن داشته باشد. این اقدام ممکن است شامل تغییر مجوز و سطح دسترسی سایر کاربران یا هر اقدامی در خصوص دادههای خاص کاربر (مانند تغییر رمز عبور خود کاربر) باشد.
امکان دستدرازی به جلسه جاری (Session) بر مبنای کوکی: انجام این عمل شامل ارسال یک یا چند درخواست HTTP (HTTP Request) است. دراین حالت، برای اینکه حمله CSRF اجرا شود، نرمافزار کاربردی برای شناسایی کاربری که درخواستها را ارسال کرده، تنها به کوکیهای Session متکی است. هیچ مکانیسم دیگری برای ردیابی و پویش Session یا اعتبارسنجی درخواستهای کاربر وجود ندارد.
قابل پیشبینی بودن تمام پارامترهای درخواست موردنظر: درخواستهایی که منجر به حملات CSRF میشوند نباید حاوی پارامتری باشند که مهاجم نتواند مقادیر آنها را تعیین کند یا حدس بزند. به عنوان مثال، هنگامی که مهاجم کاربر را وادار به تغییر رمز عبور خود میکند، اگر مهاجم نیاز به دانستن مقدار رمز عبور فعلی باشد، کاربر نسبت به تغییر رمزعبور آسیبپذیر نخواهد بود.
به عنوان مثال، فرض کنید یک وب سایت کاربردی دارای قابلیتی است که به کاربر اجازه تغییر نشانی ایمیل حساب را میدهد. هنگامی که کاربر این اقدام را انجام میدهد، یک درخواست HTTP مانند زیر ارسال میشود:
این درخواست HTTP شرایط لازم برای اجرای یک حمله CSRF را دارا میباشد:
عمل تغییر نشانی ایمیل مربوط به یکی از حسابهای کاربری. پس از این تغییر نشانی، مهاجم معمولاً قادر به تنظیم مجدد رمز عبور و کنترل کامل حساب کاربری خواهد بود.
این برنامهکاربردی از کوکی جلسه (Session Cookie) برای تشخیص اینکه کدام کاربر درخواست را ارسال کرده، استفاده میکند. هیچ نشانه یا مکانیزم دیگری برای ردیابی جلساتجاری (Session) کاربر وجود ندارد.
مهاجم به راحتی میتواند مقادیر پارامترهای درخواستی برای انجام اقدام مورد نیاز را تعیین کند.
با برآورده شدن این سه شرط بالا، مهاجم میتواند صفحه وبی حاوی کد HTML زیر ایجاد نماید:
اگر کاربر قربانی از صفحه وب مهاجم بازدید کند، موارد زیر رخ میدهد:
صفحه مهاجم یک درخواست HTTP را به وب سایت آسیبپذیر ارسال میکند.
اگر کاربر به وب سایت آسیبپذیر وارد شده باشد (لاگین کرده باشد)، مرورگر او به طور خودکار کوکی جلسه (Session Cookie) خود را در درخواست میآورد (با فرض اینکه از قابلیت SameSite در کوکیها استفاده نشده باشد).
وبسایت آسیبپذیر درخواست را به روش معمولی پردازش میکند؛ آن را همانند سایر درخواستهای کاربر قربانی، قلمداد نموده و نشانی ایمیل این کاربر را تغییر میدهد.