شرح کلی
نوع: آسیبپذیری (Vulnerability)
پلتفرم آسیبپذیر: NET Framework.
نسخههای آسیبپذیر:
Microsoft .NET Framework 4.6.2
Microsoft .NET Framework 4.6.1
Microsoft .NET Framework 3.5.1
Microsoft .NET Framework 4.7
Microsoft .NET Framework 4.6
Microsoft .NET Framework 4.5.2
Microsoft .NET Framework 3.5
Microsoft .NET Framework 2.0 SP2
تاریخ ارائه وصله امنیتی توسط مایکروسافت: ۱۲ سپتامبر ۲۰۱۷ (۲۱ شهریور ۱۳۹۶)
ماژول آسیبپذیر: WSDL parser
نوع آسیبپذیری: اجرای کد از راه دور ( Remote Code Execution)
درجه خطر: بسیار بالا (CVSS ۹.۳)
آسیبپذیری (Vulnerability) چیست؟
آسیبپذیری در امنیت رایانه به معنای وجود یک نقطه ضعف در یک پلتفرم است که میتواند توسط یک فرد نفوذگر و یا بدافزار مورد سوءاستفاده قرار گیرد و موجب دسترسی غیرمجاز به سیستم رایانهای شود. آسیبپذیریها به نفوذگران اجازه اجرای دستورات، دسترسی به حافظه سیستم، نصب بدافزار و سرقت، تخریب و تغییر اطلاعات با اهمیت سازمانها و افراد را میدهند.
نحوه سوءاستفاده از آسیبپذیری CVE-2017-8759
استفاده از آسیبپذیری CVE-2017-8759 با اجرای یک object مخرب درون یک فایل با فرمت RTF یا DOC شروع میشود. فایل مخرب از این طریق یک درخواست SOAP به سرور خود ارسال کرده و در پاسخ یک packet، حاوی کدهای مربوط به استفاده از آسیبپذیری، دریافت میکند. در نتیجه، فرد نفوذگر برای نفوذ ابتدا باید کاربر قربانی را به نحوی متقاعد به اجرای document مخرب کند که این کار معمولا از طریق ارسال ایمیل اتفاق میافتد.
توضیحات فنی
جزئیات آسیبپذیری
تصویر ۱- محتوای یک فایل DOC مخرب
تصویر ۲- محتوای یک فایل RTF مخرب
این آسیبپذیری درون کلاس WsdlParser از System.Runtime.Remoting وجود دارد که با تزریق کد رخ میدهد. در هنگام فراخوانی متد PrintClientProxy از این کلاس، وجود کاراکترهای CRLF در رشته ارسالی به تابع IsValidUrl سبب بروز مشکل میشود. Carriage Return (\r یا 0x0D) و Line Feed (\nیا 0x0A) دو کاراکتر کنترلی برای نمایش line break در یک متن هستند. این امر به نفوذگر اجازه تزریق و اجرای کدهای مخرب را خواهد داد.
تصویر ۳- محل فراخوانی IsValidUrl در متد PrintClientProxy
تصویر ۴- محتوای تابع IsValidUrl آسیب پذیر
تصویر ۵- محتوای تابع IsValidUrl اصلاح شده
در یک پاسخ SOAP، زمانی که بیش از یک آدرس به عنوان ورودی WSDL قرار گیرد، رشته “//base.ConfigureProxy(this.GetType(),”
توسط تابع PrintClientProxy به انتهای آدرس اول اضافه میشود. در صورتی که در آدرس بعدی رشته CRLF وجود داشته باشد، مقادیر بعد از این رشته در قالب کد اجرا خواهند شد.
تصویر ۶- محتوای پاسخ SOAP دریافتی از سمت سرور بدافزار
پس از ارسال درخواست، به واسطه اجرای Object موجود در فایل مخرب، محتوای SOAP مخرب از سمت سرور ارسال میشود. کلاس WsdlParser موجود در NET framework.، محتوای پکت دریافت شده را تحلیل کرده و یک فایل cs. در دایرکتوری جاری ایجاد میکند. سپس کدهای این فایل توسط پردازه csc.exe، مربوط به NET framework.، کامپایل میشود و یک فایل dll ایجاد میکند. این فایل توسط Microsoft Office در حافظه بارگزاری میشود.
تصویر ۷- فایلهای ایجاد شده پس از اجرای فایل مخرب
در تصویر زیر کدهای فایل logo.cs که در قالب فایل dll کامپایل شده است قابل مشاهده است:
تصویر ۸- کدهای مخرب اجرا شده در قالب فایل dll
پیشنهادات امنیتی
وصله امنیتی ارائه شده توسط مایکروسافت CVE-2017-8759 را دانلود و نصب نمایید.
روش مقابله و پاکسازی سیستم
بخش جلوگیری از نفوذ (IPS) آنتی ویروس پادویش، تلاشها برای ایجاد آلودگی به واسطه وجود این آسیبپذیری را شناسایی و از ورود آنها به سیستم قربانی جلوگیری میکند.