Share
## https://sploitus.com/exploit?id=B5F3C81D-8CAD-5D60-BDEF-A55227160F34
### CVE-2024-30078更新说明
#### 更新6
这可能是最后一次更新,除非有比我更了解WiFi协议栈的人来参与。
看起来该漏洞的可利用性被高估了。要利用该漏洞,需要满足一些特定的前提条件。
如前所述,当EtherType是0x8100(VLAN标签网络)时,本地驱动程序未考虑额外的4个字节。由于数据包是在原始缓冲区上重写的,这导致数据包处理时提前了4个字节,从而导致翻译后的数据包被破坏并作为无效丢弃,还会导致超出保存数据包的缓冲区的2个字节被覆盖。
这个漏洞有多容易被利用呢?
实际上并不简单。有一个机制确保在预期dot1q头的位置,VLAN ID字段的12位必须为0。要溢出缓冲区,不能发送这些额外的字节,这意味着只能依赖内存中已有的字节。可以在SNAP头之后发送一个零字节来溢出一个字节,或者不发送任何字节以溢出两个字节。然而,尝试找到缓冲区后面的两个字节均为零的情况非常具有挑战性,因为存在65,535种可能组合。
此外,难度还不止于此。邻近的堆内存布局非常关键。虽然可以控制被覆盖的2个字节(即发送者MAC地址的最后2个字节),但实际覆盖的内容决定了是否会引起崩溃。如果幸运的话,可能会覆盖到之后被解引用的内存指针,进而导致崩溃,但导致远程代码执行的可能性非常低。至少需要另一个漏洞来远程泄露内核指针。
总之,该CVE的影响似乎比微软公告中最初建议的要轻得多。利用该漏洞需要在与目标相同的网络中,进行特定内存布局的尝试,并获得额外信息来实现超出拒绝服务(DoS)的效果。
#### 更新5
抱歉,这周末很忙。问题出在LLC,当设置vlan时,应该是8个字节,除非是vlan的情况下还需要额外的4个字节,这就是补丁检查的内容。所以在未修补的版本中,我们会遇到越界读取,然后在第113/114/115行直接修改缓冲区,由于我们的载荷长度是10个字节,而期望的是12个字节,因此会有一个2字节的写入条件,即发送者MAC地址的最后两个字节会被写入。将在这周整理相关写作和案例。
#### 更新4
迟来的更新,但...我们有崩溃现象!后续会有更多更新,敬请关注。
#### 更新3
我们已成功让Windows连接到我们的恶意AP,并可以发送必要的dot11数据帧以进入我们关注的函数。接下来我们会将大部分开发转移到私人仓库中,直到我们可靠地运行后,再合并到公共仓库。如果有任何问题或想法,欢迎在问题页面提交,我也会设置一个讨论页面(我会的)。下次更新大约在AEST时间晚上9点。
#### 更新2
我添加了两个文件来协助调试CVE。
#### 更新1
### 问题
在逆向分析此CVE时,我发现了可能的两种利用方法:1. 攻击者可能在网络认证后发送构造的数据包,这需要更复杂的步骤;2. 较简单的方法是识别探测信号,推测设备曾使用的探测信号,不需要认证,构建恶意AP,利用开放网络探测的细节(可能需要一些猜测),然后等待设备自动连接并发送构造的帧以到达受影响的代码路径(这也是我目前工作的地方)。在加入开放网络时,AP发送的多个帧到达了受影响的代码块(没有包含所需的标志位),我们可以构造包含所需标志位的帧以尝试触发漏洞。目前我们有足够的信息来使其有效,只需构建并在内核调试时运行几个测试用例。
#### 信息
该仓库代码似乎未触发CVE中提到的相同漏洞,感谢FarmPoet的新信息。CVE-2024-30078漏洞在Windows本地WiFi驱动程序(nwifi.sys)的Dot11Translate80211ToEthernetNdisPacket()函数中,必须构造非常特定的数据帧才能到达易受攻击的代码路径(该代码未达到这一点)。
#### 我在处理
我已识别出函数中的更改,并在逆向构建相关帧以进入这个代码段。
### CVE-2024-30078漏洞利用概述
#### 代码如何工作
- **导入和初始化**:脚本从Scapy和系统模块中导入必要的模块。
- **SSID分块**:`create_wifi_packet`函数将提供的SSID分成每块255字节(每块允许的最大长度)。
- **帧创建**:对于每个分块,创建一个WiFi信标帧,包括Dot11头、Dot11Beacon(信标帧)和Dot11Elt(包含SSID分块)。
- **发送帧**:使用`sendp`函数发送每个帧,指定接口、次数、间隔和详细程度。
- **错误处理**:脚本检查在数据包发送期间可能出现的权限错误和其他异常。
#### 缓冲区溢出机制
Windows处理的SSID长度上限为512字节,这超过了WiFi标准。通过发送超过此长度的SSID块,可以触发Windows WiFi处理子系统中的缓冲区溢出。此溢出可能允许攻击者执行任意代码或导致系统崩溃。
### 可能的问题和考虑事项
- **根权限**:脚本需要根权限来发送数据包,确保以`sudo`运行脚本。
- **接口可用性**:脚本假定无线接口名称为`wlan0`,如有不同,请调整。
- **权限和依赖错误**:确保正确安装Scapy及其依赖项,并处理对网络接口的访问权限。
- **法律和道德问题**:使用该脚本在未经授权的网络上利用漏洞是违法和不道德的。仅在获得明确授权的环境中进行安全测试和研究。
### 免责声明
该代码仅供教育用途。作者对因误用该脚本而造成的任何损害不承担任何责任。请负责任地使用,仅在您拥有明确许可的环境中进行此类测试。