首页
社区
课程
招聘
[原创]客户端缓存文件系统驱动csc.sys漏洞CVE-2026-26176分析与复现
发表于: 2026-4-21 10:45 2308

[原创]客户端缓存文件系统驱动csc.sys漏洞CVE-2026-26176分析与复现

王cb 活跃值
14
2026-4-21 10:45
2308

这篇文章的目的是介绍Windows客户端缓存文件系统驱动程序(csc.sys)特权提升漏洞CVE-2026-26176分析与复现.

目录

CVE-2026-26176漏洞公告发布于2026年4月,文章结合了逆向代码及调试结果分析了特权提升漏洞CVE-2026-26176的利用过程和漏洞成因.

Windows 11 26h2 canary preview

漏洞的主要原因存在于csc.sys驱动函数CscQueryDirectory处理客户端调用程序NtQueryDirectoryFile相关文件操作存在用户态竞争条件TOCTOU篡改IRP缓冲区数据导致的内核内存操作越界读写的特权提升漏洞.

csc.sys驱动程序理论上是一种挂载于现有SMB或其他网络微型重定向器驱动程序(network mini-redirector driver)实现用于同步的缓存文件系统驱动程序.

所有的Minirdr驱动都有一个自己的PMINIRDR_DISPATCH分发函数结构体通过RxRegisterMinirdr注册用于处理对应的不同smb消息协议格式回调,Minirdr驱动可以是基于smb协议或挂载于smb协议比如(smb over quic,webclient协议)微软linux wsl的Plan 9文件系统,rdp协议客户端等文件系统等.相关协议绑定可以在注册表HKLM\System\CurrentControlSet\Control\NetworkProvider\Order查询当前操作系统支持的协议类型.

Minirdr驱动的路径统称为UNC路径它的应用层路径Dos Path和 NT Path可以根据如上表格表示,每种协议都有自己的Minirdr接口实现,所有文件类型均为MUP文件系统的子对象,但底层通信数据与smb协议文档中的消息规范相同.csc文件系统挂载于现有Minirdr文件系统之上,用于同步缓存数据,可以通过相同的UNC路径和一组eabuffer调用NtCreateFile创建csc文件对象,MUP协议入口例程成会在CscEaParseEa判断是否是csc文件系统的eabuffer,如果是进入CscCreate调用将csc设备CscDeviceObject挂载底层设备之上并调用的RxSetFcbDispatchTable重写PMINIRDR_DISPATCH结构体分发表,完成RxFsdDispatch处理后转发至底层文件系统分发表,底层文件系统通信实现仍由底层文件系统自身实现.eabuffer数据可以通过逆向应用层dll的功能得到或对CscCreate下内核断点从irp的SytemBuffer上下文字段获取,长度为0x1c字节,但不能是任意值,其中的每个字节均会产生不同的效果有兴趣的读者可以自己尝试下,在win11及以后的操作系统允许以smb quic的协议方式绑定本地smb文件共享端口,可以使用net.exe use \UNC路径 /TRANSPORT:QUIC /SKIPCERTCHECK这样的命令创建一个smb挂载路径,同样支持绑定上层csc文件文件系统.笔者的Smb Quic重放工具实现了大部分功能,无需借助远程linux服务器,需要修复的一点是csc调用了RxQueryNetRootCachingMode底层函数,判断TREE_CONNECT消息的返回参数ShareFlags 时候是否是可以支持缓存文件类型,这里只需要将ShareFlags类型设置成不包含TreeConnectResponse.ShareFlags.NO_CACHING位即可通过验证.csc文件系统实现了一套内置的缓存文件管理系统存储在一个自带的隐藏数据库中,类似接口由PinEntry系列函数实现,可以通过应用层cscapi.dll或者csc服务com组件接口实现,但底层实现相同,均是由csc的文件对象(Mup设备名加上相对的文件路径)NtFsControlFile函数实现,支持的功能包括添加缓存文件CSC_FSCTL_OPERATION_SET_PIN删除缓存文件CSC_FSCTL_OPERATION_DELETE_PIN查询缓存状态等功能.文件系统FsControl操作会分发到 CscDclInternalFsControl处理,csc对不同的控制码做了权限管理,并不是所有的控制码都可以被普通用户调用,以下权限验证过程CscDclpInitializeFsctlContext伪代码显示,有的操作仅限管理员,有的对文件访问标志做限制,有的仅限于csc服务调用,有的判断是否为发起进程操作等.操作码对应的字符串名称可以在CscDclpGetFsctlOperationString找到,笔者用c#演示了提取普通用户可以操作的控制码.在windbg调试器对配置元数据转储后.

csc驱动除了存在对文件对象操作,还存在对目录进行操作,可以使用\Device\Csc..\ + RemoteDirName这样的路径创建对csc目录对象发起操作,比如NtQueryDirectoryFile函数,这个函数会在CscQueryDirectory先调用CscUpdateAndCaptureConnectionStateEx查询当前客户端文件连接的状态,微软没有官方的文档描述状态的每个标志位是什么作用.笔者只能通过调试和逆向绕过错误的控制流路径到达漏洞点函数,如下伪代码显示PRX_CONTEXT指针存在一个pRelevantSrvOpen字段,逆向发现它的+38偏移量字段存在一个链表结构指向csc目录包含的文件对象链表,其实csc文件系统也是基于Minirdr规范,每个结构体的前2个字节为NODE_TYPE_CODE,这个字段的存在可以标识结构体的类型,可以找到微软官方api的头文件或通过这个类型2字节值搜索匹配从csc.sys或依赖驱动找到具体类型,之后代码显示如果这个连接状态不包含0x20位会进入错误例程处理,所以这个位必须被置位,也就是需要存在一个有效的pRelevantSrvOpen关联的PIN文件对象,实现方法只需要在NtQueryDirectoryFile发起前调用PIN系列参数构造一个有效的缓存文件对象,也可以在调试器查看这个类型,和通过刚才说的方法定位到构造过程代码,如果PIN失败先调用删除PIN,然后重试如果仍然失败重启电脑可以重新到达漏洞点函数.

当控制流到达CscQueryDirOnlineAndUpdateCache了,会对PRX_CONTEXT上下文的虚标指针中调用mrxsmb!SmbShellQueryDirectory发起底层的文件目录查询操作,这个操作是个标准smb协议的QUERY_DIRECTORY调用,这就给poc一个稳定的条件触发用户态竞争条件TOCTOU窗口期篡改IRP缓冲区,可以先返回一个正常的协议回复报文,进入后面的处理代码,这里的v7->high48.obufnowqword50缓冲区指针与用户态NtQueryDirectoryFile参数FileInformation指针指向的是同一个地址指针.在这时候可以篡改IRP缓冲区数据导致的内存操作越界读写,也就是解引用后的outofboundaryval前2个字节UINT16的偏移量,csc驱动并没有对越界访问做出验证,在之后的CscQueryDirStitchSingleEntry会越界访问一个UNICODE_STRING结构,如果越界数据存在有效结构,会在CscQueryDirOpenAndUpdateEntry构造一个伪造的csc文件缓存文件对象entry结构体,或导致内核崩溃和可能的权限提升操作.以下是操作系统内核崩溃时bsod栈回溯结果和调试结果.

应用补丁后IRP缓冲区被保存到了一个临时的缓冲区指针中,用户态即使获得了TOCTOU竞争条件,对这个缓冲区修改也不会影响临时保存的数据内容,在NtQueryDirectoryFile数据处理完成后再把临时的数据写回这个原缓冲区,这样就不存在竞争条件篡改数据的可能性,微软采用这种方式修复漏洞.

本文分析了客户端缓存文件系统驱动程序(csc.sys)特权提升漏洞CVE-2026-26176重现了篡改IRP缓冲区相关文件操作导致操作系统内核崩溃bsod或特权提升的利用过程.

笔者漏洞poc采用.net程序复现,出于安全原因笔者不能提供完整的poc代码,下图是笔者在的Win11 26h2 wip上成功复现了CVE的利用效果

Smb Quic重放工具

Smb Quic重放工具项目

CVE-2026-26176致谢

作者来自ZheJiang Guoli Security Technology,邮箱cbwang505@hotmail.com

Dos Path Full Path NT Path
\\server\share\ABC\DEF \\server\share\ABC\DEF \??\UNC\server\share\ABC\DEF
\\server \\server \??\UNC\server
\\server\share \\server\share \??\UNC\server\share
\\server\share\ABC.<SP>. \\server\share\ABC \??\UNC\server\share\ABC
//server/share/ABC/DEF \\server\share\ABC\DEF \??\UNC\server\share\ABC\DEF
\\server\share\ABC\..\XYZ \\server\share\XYZ \??\UNC\server\share\XYZ
\\server\share\ABC\..\..\.. \\server\share \??\UNC\server\share

传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回