آسیب‌پذیری Wavethrough در مرورگر اج مایکروسافت و افشای داده‌های حساس کاربران

 

یک آسیب‌پذیری حیاتی اوایل این ماه در مرورگر اج مایکروسافت وصله شده است. بهره‌برداری از این آسیب‌پذیری بر روی وب‌سایت‌های مخرب و یا آلوده، امکان دسترسی به داده‌ها با دسترسی‌های محدود را برای مهاجمان فراهم می‌کند. به این آسیب‌پذیری شناسه‌ی CVE-2018-8235 اختصاص داده شده و همان‌طور که مایکروسافت در مشاوره‌نامه‌ی خود تضیح داده در اثر مدیریت نادرست درخواست‌ها از منابع متفاوت توسط مرورگر اج بوجود آمده است. در کل این آسیب‌پذیری به دلیل دور زدن Same-Origin Policy (SOP) توسط مرورگر مایکروسافت اج وجود دارد.


بهره‌برداری از این آسیب‌پذیری به مهاجم این اجازه را می‌دهد تا مرورگر قربانی را به ارسال داده‌هایی با دسترسی‌های محدود مجبور کند. این حمله از روی وب‌سایت‌های مخرب، وب‌سایت‌هایی که آلوده شده‌اند و یا هر وب‌سایتی که کاربر می‌تواند در آن محتوا و تبلیغات منتشر کند قابل انجام است. این آسیب‌پذیری توسط یکی از توسعه‌دهندگان گوگل کشف شده و Wavethrough نام‌گذاری شده است. دلیل این نام‌گذاری این است که این اشکال زمانی رخ می‌دهد که وب‌سایت از service workers برای بارگذاری محتوای چندرسانه‌ای و واسط‌های برنامه‌نویسی < audio > استفاده می‌کند که از درخواست‌های range استفاده خواهد کرد.


چیزی که این محقق کشف کرده این است که با استفاده از service worker سرآیند Range وجود ندارد چرا که المان‌های رسانه‌ای درخواست‌های no-cors ایجاد می‌کنند. این محقق در توضیحات خود گفته است: «زمانی‌که شما می‌خواهید از منبع دیگری، المانی را fetch() کنید، باید آن منبع به شما اجازه دهد تا پاسخ را ببینید. به‌طور پیش‌فرض درخواست بدون کوکی ایجاد می‌شود ولی اگر شما درخواست کوکی نیز داشته باشید، آن منبع باید مجوزهای بیشتری را در این خصوص به شما بدهد.»


زمانی‌که در درخواست‌ها از سرآیندهای ویژه‌ای استفاده می‌شود، مرورگر باید پیش از بررسی درخواست، منبع آن را بررسی کند ولی شاهد هستیم که برخی از واسط‌های برنامه‌نویسی این بررسی را انجام نمی‌دهند و در نتیجه داده‌های حساس قربانیان بدین‌گونه افشاء می‌شود. درخواست‌های No-cors با کوکی ارسال شده و پاسخ‌های opaque دریافت می‌شود که برخی از واسط‌های برنامه‌نویسی می‌توانند به داده‌های موجود در این پاسخ‌ها دسترسی داشته باشند. بنابراین زمانی‌که یک المان رسانه‌ای درخواست no-cors با با سرآیند Range را ایجاد می‌کند، تابع fetch() آن سرآيند را از درخواست حذف می‌کند چرا که اجازه‌ی استفاده از این سرآیند در درخواست‌های no-cors داده نمی‌شود. 
 

منبع

پست‌های مشابه

Leave a Comment