جاوا اسکریپت‌

در تلاش برای کاهش کلاس بزرگی از مسائل cross-site scripting در فایرفاکس، موزیلا اجرای همه جاوا اسکریپت های inline و توابع eval-like خطرناک را برای about: pages که gateway ای برای اولویت‌های حساس، تنظیمات و استاتیک مرورگر هستند را مسدود کرده است.

مرورگر فایرفاکس دارای چهل‌وپنج about pages داخلی است[۱] که به‌صورت محلی میزبانی می‌شوند و برخی از آن‌ها در زیر ذکر شده است که ممکن است متوجه برخی از آن‌ها شده یا از آن‌ها استفاده کرده باشید:

  • about:config — panel to modify Firefox preferences and critical settings.
  • about:downloads — your recent downloads done within Firefox.
  • about:memory — shows the memory usage of Firefox.
  • about:newtab — the default new tab page.
  • about:plugins — lists all your plugins as well as other useful information.
  • about:privatebrowsing — open a new private window.
  • about:networking — displays networking information.

لازم به ذکر است، این تغییرات بر نحوه کار وب‌سایت‌های اینترنت در مرورگر فایرفاکس تأثیر نمی‌گذارد، اما موزیلا تصمیم گرفته است که عملکردهای مضر را در برنامه‌های افزودنی شخص ثالث و سایر سازوکارهای داخلی از نزدیک مورد بررسی و ارزیابی قرار دهد.

فایرفاکس جاوا اسکریپت Inline را برای مسائل امنیتی غیرفعال کرده است.

ازآنجایی‌که تمام این صفحات به‌صورت HTML/JavaScript نوشته‌شده و در زمینه امنیتی خود مرورگر رندر شده‌اند، آن‌ها همچنین مستعد به حملات تزریق کد هستند که در صورت آسیب‌پذیری می‌توانند به مهاجمین از راه دور اجازه دهند از طرف کاربر کد دلخواه را تزریق و اجرا کنند؛ به‌عنوان‌مثال، حملات XSS.

برای افزودن یک خط دفاعی مستحکم در برابر حملات تزریق کد، حتی در صورت وجود آسیب‌پذیری، موزیلا اجرای کلیه اسکریپت‌های Inline را مسدود کرده است، بنابراین اسکریپت‌های تزریق‌شده را نیز با پیاده‌سازی یک سیاست امنیتی سخت‌گیرانه محتوا (CSP) مسدود می‌کند تا اطمینان حاصل کند که کد جاوا اسکریپت فقط هنگام بارگیری از یک منبع بسته‌بندی‌شده و با استفاده از یک پروتکل داخلی اجرا می‌شود.

برای دستیابی به این هدف، موزیلا مجبور به بازنویسی مجدد کلیه inline event handler ها شده است و همه کدهای جاوا اسکریپت Inline را به‌صورت جداگانه در پرونده‌های بسته‌بندی‌شده جداگانه برای هر ۴۵ صفحه درج کرده است.

موزیلا در پست وبلاگ منتشرشده دراین‌باره گفته است: “اجازه ندادن به هیچ اسکریپت Inline ای در هر یک از about: pages ها، سطح حملات اجرای کد دلخواه را محدود می‌کند و ازاین‌رو اولین خط دفاعی قوی را در برابر حملات تزریق کد فراهم می‌کند.”

NO EVAL, NO EVIL!

هنگامی‌که مهاجمان نمی‌توانند اسکریپت را به‌طور مستقیم تزریق کنند، از تابع JavaScript eval () و روش‌های مشابه برای فریب برنامه‌های مورد هدف به‌منظور تبدیل متن به یک جاوا اسکریپت اجرایی برای دستیابی به تزریق کد استفاده می‌کنند.

بنابراین، علاوه بر اسکریپت‌های inline، موزیلا عملکردهای شبیه به eval را نیز حذف یا مسدود کرده است، که این سازنده مرورگر فکر می‌کند “ابزار خطرناک دیگری” هستند، زیرا رشته‌ای دلخواه را در زمینه امنیتی مشابه parse می‌کنند.

موزیلا در مورد اسناد وب MDN توضیح می‌دهد[۲]: “اگر eval () را با رشته‌ای که می‌تواند توسط یک شخص موذی تحت تأثیر قرار گیرد، اجرا کنید، ممکن است با مجوزهای افزونه خود، کد موذی را روی دستگاه کاربر اجرا کنید.”

گوگل نیز با موزیلا هم‌عقیده است و دراین‌باره می‌گوید[۳]: ” evalدر داخل یک افزونه خطرناک است زیرا کدی که اجرا می‌کند به همه موارد در محیط افزونه موردنظر دسترسی دارد.”

برای این کار، موزیلا تمام توابع eval-like را از زمینه‌های ممتاز سیستم و فرآیند اصلی در codebase مرورگر وب فایرفاکس خود بازنویسی کرده است.

علاوه بر این، این شرکت همچنین eval() assertion ها را اضافه می‌کند که امکان استفاده از عملکرد Eval () و نزدیکان آن را در متن‌های اسکریپت دارای امتیاز سیستم مجاز نمی‌داند و تیم امنیتی موزیلا را از موارد هنوز ناشناخته‌ای از eval()، مطلع می‌کند.

 

منابع

[۱] https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/The_about_protocol

[۲] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

[۳] https://developer.chrome.com/extensions/sandboxingEval

[۴] https://thehackernews.com/2019/10/firefox-javascript-injection.html