باگهای پنهان دنیای باگ بانتی بخش پنجم
در مقاله باگهای پنهان دنیای باگ بانتی بخش پنجم در مورد آسیبپذیری Prototype Pollution صحبت میکنیم که از دید افراد مخفی مانده.
اگر تاکنون چنین Payloadای را دیدهاید و نادیده گرفتهاید:
{
"__proto__": {
"isAdmin": true
}
}
احتمالاً یک آسیبپذیری واقعی با شدت P1 را از دست دادهاید.
Prototype Pollution مستقیماً احراز هویت (Authentication) را دور نمیزند؛ بلکه منطق و دادههایی را آلوده میکند که برنامه به آنها اعتماد دارد.
و زمانی که برنامههای مدرن جاوااسکریپتی به اشیای آلودهشده اعتماد کنند، مشکلات جدی آغاز میشود.
🧠 Prototype Pollution چیست؟ (بدون تئوری، فقط واقعیت)
Prototype Pollution زمانی رخ میدهد که:
- یک برنامه جاوااسکریپتی اشیایی را که توسط کاربر کنترل میشوند با هم ادغام (Merge) کند.
- کلیدهای خطرناک را فیلتر نکند.
- و در نتیجه به مهاجم اجازه دهد Prototype اشیاء را تغییر دهد.
به زبان ساده:
شما شیء (Object) را تغییر نمیدهید؛ بلکه رفتار پیشفرض تمام اشیاء را تغییر میدهید.
🎯 چرا این آسیبپذیری اهمیت بالایی دارد؟
Prototype Pollution میتواند منجر به موارد زیر شود:
- افزایش سطح دسترسی (Privilege Escalation)
- دور زدن مکانیزمهای احراز هویت
- دستکاری منطق مجوزدهی (Authorization)
- تخریب و آلودگی منطق ذخیرهشده برنامه
- و در برخی شرایط حتی اجرای کد از راه دور (RCE)
نکته نگرانکننده اینجاست که:
- برنامه همچنان «طبیعی» به نظر میرسد.
- لاگها معمولاً رفتار مشکوکی نشان نمیدهند.
- این آلودگی در بسیاری از مواقع حتی پس از استقرار نسخههای جدید نیز باقی میماند.
به همین دلیل Prototype Pollution یکی از آسیبپذیریهای محبوب در برنامههای خصوصی Bug Bounty محسوب میشود.
🐞 باگهای واقعی باگبانتی که احتمالاً هرگز ندیدهاید
اگر میخواهید بهجای پیدا کردن باگهای تکراری، آسیبپذیریهایی را کشف کنید که کمتر کسی به سراغ آنها میرود، این مجموعه مطالب برای شماست.
📹 روند واقعی بهرهبرداری (PoC Mindset)

مهاجم:
{
"__proto__": {
"isAdmin": true
}
}
را ارسال میکند.
سپس سرور این شیء را به شکل ناامن Merge میکند:
Object.prototype.isAdmin = true;
و بعد در بخشی از برنامه چنین بررسیای انجام میشود:
if (user.isAdmin)
در نتیجه:
💥 مهاجم به عنوان مدیر سیستم (Admin) شناخته میشود.
نکته مهم:
این باگ در یک Endpoint خاص باقی نمیماند؛ بلکه بهصورت پنهان در بخشهای مختلف برنامه گسترش پیدا میکند.
🧪 کجا به دنبال Prototype Pollution بگردیم؟
این آسیبپذیری معمولاً در جاهایی ظاهر میشود که برنامه ورودی JSON دریافت کرده و اشیاء را با یکدیگر ادغام میکند.
بخشهای پرریسک
- APIهای بهروزرسانی پروفایل
- تنظیمات کاربری (Settings)
- Preferences
- فیلترها و پارامترهای جستجو
- پنلهای مدیریتی
- APIهای Bulk Update
نمونه Endpointهای رایج:
POST /api/user/update
POST /settings
POST /profile
POST /preferences
اگر Endpoint ورودی JSON دریافت میکند، آن را تست کنید.
🧪 چگونه Prototype Pollution را پیدا کنیم؟
مرحله اول: شناسایی درخواستهای JSON
به دنبال درخواستهایی باشید که هدر زیر را دارند:
Content-Type: application/json
مثال:
{
"name": "test",
"email": "test@test.com"
}
این نقطه ورود شماست.
مرحله دوم: تزریق Payloadهای Prototype Pollution
ابتدا از Payloadهای امن و مناسب برای تشخیص استفاده کنید:
Payloadهای پایه
{"__proto__":{"polluted":"yes"}}
{"constructor":{"prototype":{"polluted":"yes"}}}
نمونه استفاده:
{
"name": "test",
"__proto__": {
"polluted": "yes"
}
}
مرحله سوم: بررسی موفقیت آلودگی
اکنون رفتار برنامه را بررسی کنید.
به دنبال موارد زیر باشید:
- نمایش مقدار
polluted - ظاهر شدن ویژگیهای غیرمنتظره
- تغییر رفتار یا منطق برنامه
گاهی نتیجه بلافاصله دیده نمیشود و این کاملاً طبیعی است.
مرحله چهارم: فعال کردن بررسیهای منطقی برنامه
این همان مرحلهای است که بسیاری از شکارچیان باگ در آن شکست میخورند.
Prototype Pollution معمولاً یک آسیبپذیری Second-Order است.
اقداماتی مانند موارد زیر را امتحان کنید:
- بارگذاری مجدد پروفایل
- ورود مجدد به حساب
- دسترسی به Endpointهای مخصوص مدیران
- اجرای فرایندهای مرتبط با Authorization
اگر برنامه چیزی شبیه به این را بررسی کند:
if (user.isAdmin)
و مقدار isAdmin آلوده شده باشد:
💥 دسترسی مدیریتی حاصل میشود.
🧰 ابزارهایی که واقعاً استفاده خواهید کرد
ابزارهای اصلی
- Burp Suite
- Repeater
- Proxy
- ابزارهای توسعهدهنده مرورگر (DevTools)
- تست دستی
ابزارهای اختیاری
- ppmap
- دانش Node.js (یک مزیت بزرگ)
اسکنرها معمولاً پاسخ دقیق و قابل اعتمادی برای این نوع آسیبپذیری ارائه نمیکنند.
🧪 Payloadهایی که واقعاً ارزشمند هستند
افزایش سطح دسترسی
{"__proto__":{"isAdmin":true}}
تزریق نقش (Role Injection)
{"constructor":{"prototype":{"role":"admin"}}}
دستکاری منطق برنامه
{"__proto__":{"canDelete":true}}
تشخیص آلودگی
{"__proto__":{"polluted":"yes"}}
همیشه Payloadها را با منطق واقعی برنامه تطبیق دهید.
🚩 نشانههایی که نشان میدهند به یک باگ واقعی نزدیک شدهاید
به موارد زیر توجه کنید:
- ظاهر شدن ویژگیهای جدید و غیرمنتظره
- نمایش بخشهای مدیریتی در رابط کاربری
- دسترسی به قابلیتهایی که نباید در اختیار شما باشند
- رفتارهای نامنظم در سیستم مجوزدهی
- ماندگاری تغییرات بین درخواستهای مختلف
Prototype Pollution به صبر و بررسی دقیق پاداش میدهد.
🧨 چگونه این آسیبپذیری را به یک P1 تبدیل کنیم؟
Prototype Pollution بهتنهایی ممکن است شدت پایینی دریافت کند.
اما:
Prototype Pollution + Logic Flaw = 🔥
نمونهها:
- دور زدن محدودیت
isAdmin - تنظیم
canApprove=true - تغییر نقش به
superuser
برای گزارش مؤثر باید سه مورد را اثبات کنید:
- وقوع آلودگی Prototype
- تأثیر واقعی آن
- پیامد تجاری (Business Impact)
📝 نمونه عنوان و شرح گزارش
عنوان
Prototype Pollution Allows Privilege Escalation via Unsafe Object Merging
تأثیر
مهاجم میتواند با ارسال Payloadهای JSON دستکاریشده، Prototype اشیای جاوااسکریپتی را آلوده کند.
این موضوع امکان تغییر ویژگیهای مرتبط با مجوزدهی را فراهم کرده و در نهایت به افزایش سطح دسترسی و دسترسی غیرمجاز به قابلیتهای محدود منجر میشود.
اهمیت
- نقض مکانیزمهای Authorization
- تأثیرگذاری بر چندین Endpoint
- دشواری در شناسایی در محیط Production
🧠 چرا بیشتر شکارچیان باگ این آسیبپذیری را از دست میدهند؟
زیرا:
- معمولاً بلافاصله اثر خود را نشان نمیدهد.
- پیام موفقیت واضحی وجود ندارد.
- نیازمند درک عمیق از ساختار داخلی جاوااسکریپت است.
- اغلب باید با یک ضعف منطقی دیگر زنجیره شود.
بسیاری از محققان امنیتی خیلی زود دست از بررسی میکشند.
🚀 بعد از خواندن این مطلب چه کاری انجام دهید؟
هر زمان با موارد زیر مواجه شدید:
- APIهای مبتنی بر JSON
- ادغام اشیاء (Object Merging)
- تنظیمات قابل کنترل توسط کاربر
این دو کار را انجام دهید:
- تست Prototype Pollution
- بررسی منطقهای Authorization و Logic Checks
اغلب تأثیر واقعی دقیقاً در همین نقطه پنهان شده است.
🐾 قسمت بعدی این مجموعه
JWT Algorithm Confusion
اینکه چگونه تنها با تغییر یک Header میتوان توکنهای ظاهراً امن را به هویتهای جعلی تبدیل کرد.
با من همراه باشید

