白帽故事 · 2024年7月15日 0

【CVE-2024–30078】Windows WiFi 驱动程序中的 Log4j 级漏洞

Table of Contents

前言

就在几天前,Windows 因另一个严重漏洞而成为头条新闻!该漏洞被确定为 CVE-2024-30078,这是 Windows WiFi 驱动程序中的一个缺陷,有可能与臭名昭著的 Log4j 漏洞一样严重。

file

据微软官方披露,这是另一个潜藏在系统中多年的老问题,影响范围从 Windows 7 到最新的 Windows 10。

最关键的是,利用条件并不苛刻,黑客很容易发起攻击。

如果黑客在物理上靠近具有 WiFi 功能的 Windows 系统,他们就可以远程执行代码 (RCE)。

国外安全研究人员搜遍了网络,找不到任何进一步的详细分析,更别说PoC了。

既然找不到,那就只好自己动手,丰衣足食了!

漏洞分析

首先,根据官方提示,这是一个与 WiFi 驱动相关的漏洞。因此,在 Windows 驱动程序目录中搜索潜在的 WiFi 相关驱动程序,可以找到 — nwifi.sys。

file

分析策略很简单:针对该漏洞打补丁,然后比较补丁前后nwifi.sys文件的差异。

首先,在应用补丁之前备份文件。然后从官方网站下载并安装了特定的补丁。

更新后重启系统,重新打开drivers目录,发现nwifi.sys文件确实被更新了!

file

接下来拿出漏洞分析利器:Bindiff。

file

从上图的统计数据中可以看到修补的文件和未修补的文件之间的差异很小。大多数功能基本保持不变。只有一个函数Dot11Translate80211ToEthernetNdisPacket 出现了差异。

使用 Bindiff,进一步比较两个文件中的该函数:

file

可以看到右侧的新文件多了两个代码块,在IDA中打开该函数,可以看到新添加的检查代码:

file

上图红框中的内容在旧版本的文件中是没有的。如果检查失败,则返回0xC001000F,经过进一步查找,发现这是一个宏:NDIS_STATUS_INVALID_PACKET

file

从宏的名称推断可能是“无效数据包”。

换句话说,这个新检查会验证数据包,如果检查失败,则返回无效数据包错误代码。

那么,这里到底要检查什么?这就需要知道这个函数的两个参数指向什么数据结构。

不幸的是,研究人员无法找不到这方面的任何信息,因为这些是微软的内部代码,并不对外公开。

对于更深入的逆向分析,需要内核级动态调试来跟踪数据结构,这需要耗费相当大的精力。

推论

那么根据现有信息可以做出一些猜测。使用 IDA,研究人员绘制了该函数的调用链:

file

该函数在收到数据包时触发,从函数名 Dot11Translate80211ToEthernetNdisPacket 中,推断它会将数据包从 802.11 格式转换为以太网格式。 (802.11 是一种无线 LAN 通信标准)

一个大胆的假设:无线网卡制作了格式错误的 802.11 数据包,导致 WiFi 驱动程序错误的处理,从而导致 RCE。

如果你有兴趣,也可以深入分析这里。一旦了解了根本原因,POC 就变得可行。

尽管微软已经发布了针对此漏洞的补丁,但研究其利用仍然很有价值。

许多用户还没有更新,同样受到影响的Windows 7也不再获得微软的支持。该漏洞具有重大的研究价值,但请务必记住,切勿将其用于非法行为!!!

以上内容由骨哥翻译并整理。

更多微软漏洞:https://gugesay.com/?s=%E5%BE%AE%E8%BD%AF

原文:https://medium.com/@hunterid/cve-2024-30078-the-log4j-level-vulnerability-in-windows-wifi-driver-632de0d00c7c