freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2023-24941 Windows NFS 远程代码执行漏洞分析
2023-07-25 14:18:10
所属地 北京

简介

NFS(Network File System)是一种用于服务器和客户机之间文件访问和共享的通信协议,通过它,客户机可以远程访问存储设备上的数据。
CVE-2023-24941是微软在2023年5月份补丁日修复的一个位于Windows网络文件系统中的远程代码执行漏洞。根据微软的描述,该漏洞可在NFSV4.1协议中触发。
经过简单分析发现,该漏洞是由于NFS协议在处理服务器内存不足时的方式不当所致。
当申请内存失败时,程序仍然执行了写入操作,攻击者可以通过精心构造的utf8strings数据包来触发该漏洞,从而导致服务器崩溃甚至执行任意代码的风险。

漏洞分析

通过对补丁进行diff,可以发现在Nfs4SrvCppDecodeCompoundHeaderAndInitializeArgs与XdrDecodeString中都做了基本相同的改动,以下是在更新前的XdrDecodeString函数。

发现具体执行逻辑为,如果(a1+0x108)指向的值小于0后,跳转到LABEL_17执行XdrDecodeOpaqueSlow函数执行后,将(a3+v5)指向的值写0,而更新后的执行逻辑如下。

可以看出,仅当在(a1+0x108)指向的值大于等于0时,才会做下面一系列的操作,也就是说,在(a1+0x108)小于0时,代表程序已经出现错误,本该进入异常流程,但是还是跑去执行了XdrDecodeOpaqueSlow函数,并且有关键的写入操作。

漏洞触发

对XdrDecodeString函数进行功能的分析,可以推测,该函数功能为从XDR数据中解码出字符串并保存到指定的字符数组,函数的具体执行流程如下,
首先判断返回值是否小于0,也就是在之前的处理中,数据包是否有问题,如果没问题,获取将要存储的剩余字符数组的长度以及将要解码的xdr数据长度,如果剩余字符数组长度不够,进入XdrDecodeOpaqueSlow执行缓慢写入操作,否则就调用memove函数将XDR数据拷贝到字符数组,并且追加写\x00实现字符串的截断。

这里我们就会发现,我们要探索的a3为一个字符串数组,寻找其交叉引用,在Nfs4SvrXdrpDecode_STRING函数中,我们发现a3在Nfs4SrvCpGetScratchBuffer中被赋值,

查看Nfs4SrvCpGetScratchBuffer函数,其功能为根据传入的大小计算缓冲区的大小(按照16字节对齐),检查是否需要分配新的缓冲区,如果需要则调用Nfs4SrvCppAddScratchBuffer函数来添加缓冲区,而Nfs4SrvCppAddScratchBuffer函数则是根据给定的大小分配内存,并与链表相连接,形成带有头结点的链表。

查询使用Nfs4SvrXdrpDecode_STRING进行解析的结构,发现凡是涉及到utf8strings传入的结构解析都可以触发,那么首先我们需要伪造一个NFSV4.1中的一个客户端与其通信,构造如下通信流程,获取打开文件必备的FILEHANDLE,

然后构造如下打开文件操作的数据包。

当一切正常时,ExAllocatePool2分配成功,在调用XdrDecodeString时,a3为一个正常的heap地址。而当ExAllocatePool2分配失败时候,XdrDecodeString函数中的写0操作仍在执行,最终导致crash。

参考资料

(1) cve-2023-24941: MICROSOFT NETWORK FILE SYSTEM REMOTE CODE EXECUTION]

(2) https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-24941

关于我们

更多高级攻防对抗热点技术,欢迎关注公众号:M01N Team。


# 远程代码执行 # 漏洞分析 # windows漏洞
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录