‹ بازگشت به کتابخانه‌ی رایت‌آپ‌ها
Mass Assignment شدت: بحرانی

ارتقای نقش کاربر از طریق پارامتر اضافی role در فرم ثبت‌نام

چگونه ارسال یک فیلد اضافه در بدنه‌ی درخواست، یک مدل را فراتر از فیلدهای مورد انتظار فرم پر می‌کند.

نویسنده: تیم PentesterHub

وقتی یک مدل (مثل در Laravel Eloquent یا هر ORM مشابه) بدون تعریف دقیق $fillable یا $guarded، مستقیماً از کل ورودی درخواست پر شود (مثل User::create($request->all()))، مهاجم می‌تواند با افزودن یک فیلد اضافه مثل role=admin یا is_admin=1 به بدنه‌ی درخواست ثبت‌نام (که فرم ظاهری چنین فیلدی ندارد)، مقدار آن را مستقیماً تغییر دهد.

نحوه‌ی شناسایی

راه‌حل

همیشه یک allowlist دقیق از فیلدهای قابل‌پذیرش (fillable) تعریف شود؛ هرگز کل بدنه‌ی درخواست مستقیماً به یک مدل پاس داده نشود.

تمرین عملی در آزمایشگاه‌های Mass Assignment ›