查看原文
其他

Ping of Death:速修复 TCP/IP RCE 漏洞 CVE-2020-16898

Sophos 代码卫士 2022-04-06
 聚焦源代码安全,网罗国内外最新资讯!
编译:奇安信代码卫士团队
微软十月补丁星期二共修复了87个漏洞,其中11个是“严重”级别。CVE-2020-16898  CVE-2020-16899 是由 Windows TCP/IP 驱动中的一个 bug 引发的,让人回想起2013年修复的Ping of Death漏洞。仅通过一个特别构造的数据包即可利用这些漏洞发动拒绝服务攻击以及远程代码执行。


研究员在 PoC 演示视频中展现了蓝屏死机后果,而且用户未保存的内容很可能永远会丢失。
CVE-2020-16898 存在于 tcpip.sys 中,是驱动解析 ICMP 信息方式中存在的一个逻辑错误,可通过包含 RDNSS选项的特殊构造的 IPv6 路由器广告数据包远程触发。递归 DNS 服务器 (RDNSS) 选项通常包含一个或多个递归 DNS服务器的 IPv6 地址列表。

Tcpip.sys 是一个内核驱动,也就是说如果触发该漏洞,则可利用内核本身的漏洞,而内核是运行 Windows系统的核心所在。这也是为何该漏洞会导致系统出现蓝屏死机,而不是仅给出错误消息关闭某款应用而其它应用继续运行的原因所在。毕竟,关闭内核意味着其它任何应用都不会持续运行。因此内核崩溃会导致机器完全崩溃,一般后续会出现自动重启的情况。
Tcpip.sys 中存在一个逻辑缺陷,通过构造包含比预期多的数据的路由器广告数据包,就可被利用,导致驱动在内存栈中放入多于为驱动代码准备的字节数据,从而造成缓冲溢出后果。从理论上来讲,它可被用于拒绝服务攻击和远程代码执行攻击。但在实践中,实现远程代码执行极其困难。
微软指出该漏洞可能造成远程代码执行。现代的防御性编码标准和实践将放缓构建可靠的 RCEexploit 的进度,原因有二:
首先,Tcplp.sys 是通过 GSflag 编译的,阻止栈溢出直接控制返回地址。


栈 cookie 也被称为 stack canary,是在加载时生成的一个随机值。它的值通过堆栈指针被 XOR,使其非常难以可靠地预测,尤其是在完整的远程利用过程中更是如此。

绕过stack canary的技术有两种,但均不适用于这种情况:
  • 使用另外一个信息泄漏漏洞(任意读取)——它对利用 tcpdrv.sys没有什么帮助,因为 canary 的值通过堆栈指针进行了 XOR。

  • 覆写结构性异常处理 (SHE) 句柄,但只有在设置了结构性异常记录的情况下才起作用,但本案例显然并非如此。

构建有效的 RCE exploit 的第二个阻碍是内核地址空间布局随机化 (kASLR)。即使能够可靠地预测用户模式下着陆系统 shell 中的stack canary(这个可能性很小),但也要求正确地(远程)确定 Windows 内核的基地址。
也就是说,即使 tcpdrv.sys 中 bug 的确切性质广为人知,但构造能够将代码可靠地注入Windows内核空间的exploit 也要花费一些时间。即便如此,随意发动拒绝服务攻击的威胁,加上轻易可构造的数据包本身足以使我们快速修复漏洞,而打补丁是该漏洞唯一真正的修复方案。





推荐阅读
CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析



原文链接
https://news.sophos.com/en-us/2020/10/13/top-reason-to-apply-october-2020s-microsoft-patches-ping-of-death-redux/
https://nakedsecurity.sophos.com/2020/10/14/windows-ping-of-death-bug-revealed-patch-now/#comments



题图:Pixabay License


本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。


奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

    觉得不错,就点个 “在看” 吧~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存