Mutation XSS (mXSS) از طریق نرمالسازی مرورگر در innerHTML
چگونه مرورگر خودش، در فرآیند parse و serialize دوبارهی HTML، یک payload ظاهراً امن را به یک payload اجراپذیر تبدیل میکند.
Mutation XSS زمانی رخ میدهد که یک sanitizer، HTML را امن تشخیص میدهد، اما مرورگر در مرحلهی بعد (مثلاً هنگام خواندن مجدد innerHTML) آن را به شکل متفاوتی "تعمیر" (mutate) میکند که دوباره اجراپذیر میشود.
چرا پیچیده است
این حمله بهجای دور زدن مستقیم sanitizer، از رفتار استاندارد و قابلپیشبینی خودِ موتور HTML مرورگر سوءاستفاده میکند؛ یعنی sanitizer «کار خودش را درست انجام داده»، اما مرحلهی بعدی (serialize/re-parse) نتیجه را خراب کرده.
نحوهی شناسایی
- هر جایی که محتوای sanitizeشده دوباره به DOM یا یک sanitizer دیگر پاس میشود را بررسی کنید.
- ابزارهایی مثل DOMPurify را با آخرین نسخه و تنظیمات پیشفرض استفاده کنید؛ این کلاس حمله مرتباً در کتابخانههای قدیمی پیدا میشود.
راهحل
استفاده از یک sanitizer بهروز و معتبر، و اجتناب از sanitize چندمرحلهای یا دستی روی خروجی DOM.