导语:安全研究员 Marcus Hutchins 在分析 Comodo Internet Security 防火墙驱动 Inspect.sys 时发现了一个 IPv6 解析整数下溢漏洞,可远程触发目标系统蓝屏死机,该漏洞已被命名为 ComoDoS。
事件概述
注意:截至本文发布时,该漏洞仍为零日漏洞。
作者已向 Comodo 安全团队提交了完整报告,包括根本原因分析、补丁建议和概念验证,但未收到任何回复。两次跟进后依然石沉大海。鉴于 Comodo 没有漏洞赏金计划,作者表示愿意花费的免费精力也仅限于此——如果他们想修复,无论发不发帖都可以修复。
尽管该漏洞可用于远程触发 Windows 内核中的越界读取和越界写入,但两个原语的限制使作者认为该漏洞不太可能被武器化为远程代码执行(RCE)。即便如此,即使防火墙配置为阻止所有端口,攻击者仍可使用单个 TCP/IP 数据包远程使目标系统崩溃。
从 BYOVD 研究到远程内核利用
两个月前,作者开始构建一个用于查找第三方 Windows 内核驱动程序中本地权限提升漏洞的自主系统。在 Expel 的工作让作者意识到,AI 在发现容易被攻击者利用进行 Bring Your Own Vulnerable Driver(BYOVD)攻击的”低垂果实”方面表现突出。讽刺的是,你完全有可能通过使用安全产品自身的驱动程序来提升权限,从而绕过安全产品的保护。
作者注意到,AI 频繁标记出网络安全厂商的驱动程序,尤其是杀毒软件和防火墙厂商的驱动。这让他燃起了兴趣——如果 AI 能破解随机安全厂商的驱动,那人工分析很可能发现更有价值的东西。最终,作者选择专门研究 Comodo 的防火墙驱动 Inspect.sys。
漏洞容易找,有用的漏洞不容易
分析中存在一个缺陷:系统读取了一个 2014 年的过时 Inspect.sys 版本,评分远高于最新版驱动。在审查早已修复的漏洞时,作者注意到了一些糟糕的设计决策模式,这让他燃起希望在最新版驱动中手动找到一个零日漏洞。
第一个漏洞出现在 IP 报头解析器中。IPv4 数据包有两个长度字段:IP 头部长度(IHL)和 IP 头部加附加头部的总长度(Total Length)。正常来说前者应小于后者,但防火墙驱动没有对此进行验证。解析器仅简单地将总长度减去头部长度,通过将 IHL 设为大于总长度的值,触发整数下溢,使防火墙将数据包有效载荷计算为 40 亿字节。
不幸的是,RFC 要求路由器验证 IHL 值,因此大多数路由器会在数据包到达目标网络前将其丢弃。该漏洞在本地和局域网内仍可利用,但远程利用依然困难。
IPv6:更大的攻击面,更宽松的校验规则
IPv6 之所以更有吸引力,原因有二:其一,IPv6 解析的复杂性更高,容易产生代码漏洞;其二,IPv6 的扩展头机制使数据包在到达目标前更容易穿越多个路由器而不被丢弃。相比之下,云服务提供商通常会执行比 RFC 更严格的验证,屏蔽部分 IPv6 头部,导致在某些云环境(如 Azure)中测试异常困难。

IPv6 固定头部大小为 40 字节,其 next header 字段指定后续头部类型。扩展头可以链式连接,解析器必须遍历整个扩展头链并计算各段长度。这种链式嵌套的复杂性,正是 TCP/IP 解析漏洞的温床。


ComoDoS:一个数据包引发蓝屏
解析器从 IPv6 固定头部的 payload length 字段获取初始值后,遍历每个扩展头并提取其长度字段(以 8 字节为单位,需左移 3 位)。漏洞出现在循环中:每次遍历扩展头时,直接从 packet_desc->payload_length 中减去扩展头长度,但从未验证该值的下界。
payload length 字段由攻击者控制,若其值小于所有扩展头长度之和,payload_length 将持续递减直至下溢。由于这是无符号 64 位整数,下溢后回绕到最大值。例如将 payload length 设为 8、扩展头长度为 16 时,最终值为 0xFFFFFFFFFFFFFFF8,即约 18 艾字节。
POC 代码极其简洁,甚至可以在一条推文中描述:
ext = IPv6ExtHdrDestOpt(nh=6, options=[PadN(optdata=b"x00" * 8)])
tcp = TCP(sport=1337, dport=80, flags="S", seq=0, ack=1, window=0x2000)
ipv6 = IPv6(dst=dst_ip, nh=60, hlim=64, plen=8)
pkt = ipv6 / ext / tcp
send(packet)
由于漏洞位于防火墙驱动程序中,目标端口是否开放、防火墙规则是否阻止,均不影响漏洞触发。即使 Comodo 防火墙配置为阻止所有流量,该数据包仍可导致系统蓝屏。
测试提示:若目标系统不支持 IPv6,可在 Comodo 防火墙设置中勾选”过滤 IPv6 流量”后直接向目标网卡 MAC 地址发送 IPv6 数据包以触发崩溃。
一次本可避免的失败
漏洞存在一条可达的控制路径允许带外写入,但其限制使作者认为无法武器化为 RCE。
WebDAV 扫描器函数在 payload length 截断为 16 位(64 KB)的情况下工作,完整读取 65 KB 数据很可能触碰未分配内存,触发页面错误,导致系统崩溃。但扫描器在发现 r 或 n 后即终止,一个最小的 HTTP GET 头部即可满足条件、提前结束扫描,从而避免带外读取。


扫描器本身不进行连接跟踪,无需完成 TCP 握手,只需发送包含 IPv6 头部信息的独立 TCP 数据包和一个含 HTTP 字符串的 TCP 数据包即可。
带外写入原语需要调用 memcpy,其中大小参数同样来自被下溢的长度字段。但此处的值与扫描器不同——它被截断为 32 位而非 16 位,意味着 memcpy 操作大小为 40 亿字节,必然导致系统崩溃。


要触发此 memcpy,需要完成完整的 TCP 握手,目标主机必须至少有一个开放 TCP 端口。即使可以通过 SYN/SYN-ACK/ACK 绕过,也尚未验证。即便能将下溢大小控制到 4 GB 以内,仍需面对堆清理、地址随机化等诸多障碍。综合来看,该漏洞转化为有效 RCE 的可能性极低,作者接受了这个结果——至少过程本身是有趣的。
总结
ComoDoS 漏洞展示了防火墙驱动程序中一个精心设计的 IPv6 整数下溢,攻击者通过单个精心构造的 IPv6 数据包即可远程使系统崩溃。虽然无法转化为 RCE,但它揭示了安全厂商自身驱动程序中漏洞的普遍性,以及本地防火墙对这类底层攻击的脆弱性。
对安全厂商的驱动代码进行严格审计、限制扩展头的解析深度、对 payload length 实施合理的上限校验,是防止同类漏洞的根本方向。
完整概念验证代码:https://github.com/MalwareTech/ComoDoS
转载声明:本文为原文转载,原文出处:malwaretech.com — Exploiting a Remote Kernel Vulnerability in Comodo Internet Security
版权声明:本文由华盟网原创发布,保留所有权利。配图来源:malwaretech.com。
👇 点击阅读原文,访问我的网站


























暂无评论内容