
در این Write up مربوط به آسیب پذیری منطقی، که توسط Firdaus Muhammad Ismail تهیه شده است به یک آسیبپذیری امنیتی در فرآیند بازنشانی رمز عبور پرداخته میشود.
مقدمه
نویسنده در این مقاله تجربهی خود را از کشف یک آسیبپذیری امنیتی در فرآیند بازنشانی رمز عبور یک برنامه وب به اشتراک میگذارد. در این فرآیند، کاربر برای بازنشانی رمز عبور خود باید یک کد تأیید دریافتشده از طریق ایمیل یا پیامک را وارد کند. با این حال، نویسنده متوجه میشود که میتوان با ارسال یک درخواست خاص به نقطه پایان بازنشانی رمز عبور، بدون وارد کردن کد تأیید، رمز عبور را تغییر داد.
این آسیبپذیری به دلیل عدم اعتبارسنجی مناسب کد تأیید در سمت سرور به وجود آمده است. نویسنده با استفاده از ابزارهای تست نفوذ مانند Burp Suite، توانسته است این نقص امنیتی را شناسایی و بهرهبرداری کند.
در پایان، نویسنده تأکید میکند که توسعهدهندگان باید همواره اعتبارسنجیهای لازم را در سمت سرور انجام دهند و به هیچ وجه به اعتبارسنجیهای سمت کاربر اکتفا نکنند.
سلام دوستان! در این مقاله قصد دارم تجربهام رو از پیدا کردن یک آسیبپذیری در یکی از شرکتهای بزرگ با شما به اشتراک بذارم. خب، بریم سر اصل مطلب.
خلاصه
زمانی که من بررسی بخش بازنشانی رمز عبور رو انجام دادم، متوجه شدم اپلیکیشن برای این فرآیند از کد تأیید استفاده میکنه.
مراحل بازتولید
اولین بار کدی صحیح وارد کردم تا ببینم سمت سرور چه واکنشی نشون میده. پاسخ به صورت یک JSON برگشت داده میشد که وضعیت و پیامی مرتبط با داده وارد شده رو نشون میداد.
بهترین عملکرد نبود
من خروجی رو کپی کردم و در برنامه nano ذخیره کردم.
آزمایش دوم
این بار کدی اشتباه وارد کردم و دوباره رفتار سیستم رو بررسی کردم.
بعد از کلیک روی “OK”، با استفاده از Burp Suite پاسخ سرور رو مانیتور کردم. پاسخ چیزی شبیه به این بود:
status: false
در Burp Suite، با کلیک راست روی درخواست گزینه Intercept رو فعال کردم و پاسخ خطا رو با همون JSON مرحله اول جایگزین کردم.
بعد از ارسال مجدد، بدون کد صحیح مستقیماً به مرحله بعد منتقل شدم!
راهکار
به تغییرات سمت کلاینت اعتماد نکنید.
پیغام خطای مناسب مانند 400 Bad Request رو برگردونید.
امیدوارم از مطالعه لذت برده باشید!
منبع:
https://firdausmuhammadismail.medium.com/bypass-verification-code-in-reset-password-endpoint-91c2fa97e27b