آسیب پذیری اجرای کد از راه دور در .NET Framework و Sharepoint

یک آسیب پذیری اجرای کد از راه دور در .NET Framework وجود دارد که از عدم بررسی مجاز بودن ورودی نشات می گیرد (CVE-2018-8284).

 آسیب پذیری اجرای کد از راه دور در .NET Framework و Sharepoint

یک آسیب پذیری اجرای کد از راه دور در .NET Framework وجود دارد که از عدم بررسی مجاز بودن ورودی نشات می گیرد (CVE-2018-8284). اگر مهاجمی بتواند با موفقیت از این آسیب پذیری بهره برداری کند، می تواند کنترل سیستم قربانی را به دست گیرد. سپس مهاجم می تواند برنامه نصب کند، داده ها را مشاهده یا دستکاری یا حذف کند یا اکانتی با سطح دسترسی کامل بسازد. این آسیب پذیری Microsoft SharePoint و Microsoft Project Server را نیز تحت تاثیر قرار می دهد. مایکروسافت به روزرسانی های امنیتی ارائه کرده است که این مشکل را رفع می کنند.

در NET Framework، می توان فایل های XOML را با استفاده از کتابخانه های فضای نام System.Workflow کامپایل کرده و جریان کاری (workflow) ایجاد نمود. این کامپایلر می تواند دو آرگومان دریافت کند: /nocode و /checktypes. /nocode باعث می شود تا جریان کاری در سمت سرور بررسی شود تا حاوی کد نباشد. آرگومان /checktype باعث می شود تنها نوع های داده ای مجاز (لیست سفید) مجاز باشند.

کاربران Sharepointی که دارای سطح دسترسی پایین هستند، به طور پیش فرض به سایت های خود دسترسی دارند و می توانند برای خود جریان کاری بسازند. جهت بالا بردن امنیت، SharePoint هنگام کامپایل کردن کد در سمت سرور از دو آرگومان نامبرده استفاده می کند، اما به دلیل وجود آسیب پذیری، کاربر بدخواه با ایجاد جریان کاری می تواند دستوراتی را روی سرور SharePoint اجرا کند.

مشکل از آنجا ناشی می شود که کامپایلر، activityهای غیرفعال را بررسی نمی کند:

 

internal static bool HasCodeWithin(Activity rootActivity)
{
    bool hasCodeWithin = false;
    Walker documentWalker = new Walker();
    documentWalker.FoundActivity += delegate(Walker walker, WalkerEventArgs e)
    {
        Activity currentActivity = e.CurrentActivity;
        if (!currentActivity.Enabled)
        {
            e.Action = WalkerAction.Skip;
            return;
        }
        CodeTypeMemberCollection codeCollection = currentActivity.GetValue(WorkflowMarkupSerializer.XCodeProperty) as CodeTypeMemberCollection;
        if (codeCollection != null && codeCollection.Count != 0)
        {
            hasCodeWithin = true;
            e.Action = WalkerAction.Abort;
            return;
        }
    };
    documentWalker.Walk(rootActivity as Activity);
    return hasCodeWithin;
}

 

به عنوان مثال کد XOML زیر می تواند باعث رخداد این آسیب پذیری شود:

 

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
Enabled="False">
   
    Object test = System.Diagnostics.Process.Start("cmd.exe", "/c calc");
     private void SayHello(object sender,object test)
     {
     //ToDo!
     }
 

شکل زیر، یک جریان کاری را در نمای گرافیکی نشان می دهد که دارای یک activity غیرفعال، اما دارای کد است.

 

 

این آسیب پذیری، برخی نسخه های .NET Framework، SharePoint و Microsoft Project Server را تحت تاثیر قرار می دهد. برای حل این مشکل تنها باید .NET Framework به روزرسانی شود. برای مشاهده لیست محصولات آسیب پذیر و نحوه به روزرسانی به اینجا مراجعه کنید.

این آسیب پذیری توسط سروش دلیلی از اعضای گروه امنیتی NCC به مایکروسافت گزارش شده و مایکروسافت به روزرسانی مرتبط با آن را ارائه داده بود. NCC به تازگی جزئیات آسیب پذیری را منتشر کرده است.

 

 

منبع

کلمات کلیدی