CVE-2024-38063:Windows TCP/IP 远程执行代码漏洞分析

一、漏洞原理

  •  漏洞描述

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不显示了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值