一、漏洞原理
-
漏洞描述
Windows TCP/IP 远程执行代码漏洞(CVE-2024-38063)
Windows TCP/IP(tcpip.sys)是 Windows 操作系统中至关重要的核心驱动程序,负责实现 TCP/IP 协议栈,并处理所有与网络相关的任务。根据微软官方披露的信息,未经身份验证的远程攻击者可以通过反复发送包含特制数据包的IPv6数据包到Windows机器上,从而在目标系统上实现远程代码执行。经验证,该漏洞利用只需要知道受害者的IPv6地址后,能通过向受害者发送畸形的IPv6数据包触发 Ipv6pReceiveFragment 方法中的整数溢出,导致内存访问错误,驱动程序崩溃,从而造成系统蓝屏,服务中断。
-
影响范围
Windows 10 版本 1607及更高版本
Windows Server 2016 及更高版本
Windows 11 所有版本
二、漏洞利用
攻击机:Windows10
靶机:kali
首先准备好靶机,在VMware中搭建一个Windows10环境,本次使用版本如下:

准备好靶机后准备攻击机环境,本次使用kali进行测试,从https://github.com/ynwarcs/CVE-2024-38063下载poc后拷入攻击机。

cd CVE-2024-38063/script
vim cve-2024-38063.py
对本次使用的poc进行修改配置:

修改脚本中的字段:
- 网卡iface:可以在攻击机上通过ifconfig查询到;
- ip_addr:目标系统的IP地址(IPv6) ;
- num_tries&num_batches:要发送多少个不同的数据包批次。它们越多=导致的堆损坏越多+触发漏洞的几率越高;
- mac_addr:留空,除非scapy报错找不到mac地址。
Poc修改完之后直接运行,若提示缺少依赖需要安装,之后可以直接看到直接远程让目标主机蓝屏。
python3 cve-2024-38063.py

三、漏洞分析
- 特定场景下,Windows系统会将多个IP数据包合并在一起进行批处理。它会先处理每个数据包的扩展头部分,然后再处理每个数据包中的实际数据。
- 在处理扩展头的过程中,这些被合并的数据包对象会被链接成一个链表。每个数据包对象包含一个NET BUFFER对象,其中存储了缓冲的数据包内容。在偏移量0x30处,还有一个当前偏移量字段用于指示数据包已经被解析到何种程度。在这个阶段,偏移量值通常为0x28,表示IPv6头部已经被解析,但尚未处理其他部分。
- 当在tcpip!lpv6pReceiveDestinationOptions函数中处理“目标选项”扩展头时,如果发生解析错误,就会调用tcpip!IppSendErrorList函数。该函数会从当前数据包对象开始,依次对链表中的每个数据包对象调用tcpip!IppSendError函数。
- 在某些条件下(例如,如果数据包是单播的)tcpip!lppSendError函数会产生副作用。它会将缓冲的数据包内容“回退”到起始位置,并将当前偏移量字段重置为零。
- 然而,在这一整个事件链中,只有第一个数据包被标记为存在错误(偏移量0x8C)。这意味着,即使链表中的其他数据包已经在IppSendError中被回退”,驱动程序仍会继续解析它们的扩展头部分。
- 对于那些已经被“回退”的数据包,其后续处理就会基于意外的数据进行:缓冲的数据包内容指向的是数据包的开头(即IPv6头部),而不是扩展头部分;同时,偏移量字段的值是零,而不是0x28。
这么做的后果是遇到多个小报文组成的IPv6数据包时,随着分片处理和合并,使用重置为0的偏移量申请内存,并在后续的Ipv6pReassemblyTimeout函数中调用,从而产生了内存溢出。
四、修复方案
1. 安装最新的Windows更新
通过Windows Update或微软官方网站,下载并安装最新的安全补丁。
2.禁用IPv6
如果暂时无法通过补丁修复,建议考虑禁用IPv6来减小被攻击的可能性,但此操作可能会影响依赖IPv6的网络服务,需谨慎进行。
在控制面板-网络和Internet-网络连接-Ethernet0 右键属性取消ipv6勾选。之后再调用cmd执行ifconfig即可看到ipv6不显示了。




1344

被折叠的 条评论
为什么被折叠?



