我听说过一个名为 Stack Clash 的新漏洞,它显然影响了多个类 Unix 系统(不仅是 Linux,还有 BSD、Solaris)。
mur*_*uru 30
Stack Clash 是一种基于相当古老技术的漏洞利用。进程使用的内存分为两个区域——栈和堆。人们通常将堆栈想象为向下增长,而将堆想象为向上增长。当其中一个增长到足以与另一个发生冲突时会发生什么?更一般地说,当堆栈增长到足以侵占不相关的内存空间时会发生什么?最初的漏洞已有 12 年历史,Linux 内核开发人员通过使用保护页临时修复了它。然而,尽管有保护页面,Qualys 的研究人员还是设法利用了这一点。
Stack Clash 漏洞逐渐得到广泛关注,首先是在 2005 年安全研究员 Gaël Delalleau的发现,五年后研究员 Rafal Wojtczuk发布了一个 Linux 漏洞。Linux 开发人员 引入了旨在防止堆栈冲突的保护措施,但今天的研究表明,攻击者相对容易绕过该措施。
Qualys 开发的主要概念验证攻击利用了索引为 CVE-2017-1000364 的漏洞。Qualys 研究人员还开发了使用 Stack Clash 来利用单独漏洞的攻击,包括 CVE-2017-1000365 和 CVE-2017-1000367。例如,当结合 Qualys 最近修复的 Sudo 漏洞 CVE-2017-1000367 时,本地用户可以利用 Sudo 在更广泛的操作系统上获得完整的 root 权限。Qualys 迄今无法使漏洞利用远程执行代码。他们调查的唯一远程应用程序是 Exim 邮件服务器,结果巧合的是它无法利用。Qualys 表示不排除存在此类远程代码执行漏洞的可能性。Qualys 表示将在稍后发布概念验证漏洞,
[...] Qualys 的详细技术咨询和grsecurity 的技术分析中提供了更多信息。
引用关于 2010 年原始修复的 LWN 文章:
由于 Linux 没有将进程堆栈和堆页面分开,因此可以将堆栈页面溢出到相邻的堆页面中。这意味着足够深的堆栈(例如来自递归调用)最终可能会使用堆中的内存。可以写入该堆页面的程序(例如 X 客户端)然后可以操纵其中一个调用的返回地址以跳转到其选择的位置。这意味着客户端可以让服务器运行它选择的代码——任意代码执行——可以利用这些代码来获得 root 权限。
以上描述适用于各种类 Unix 内核。
虽然Ars Technica的确实注意到在Qualys公司报告中提到的临时解决方法(“设置 硬RLIMIT STACK和RLIMIT_AS 的 本地用户 和 远程服务 到低价值”),它应该指出的是,这并不一定防范此漏洞。目前唯一安全的出路是升级。根据grsecurity分析:
应该清楚的是,仅内核尝试解决这个问题必然总是不完整的,因为真正的问题在于缺乏堆栈探测。由于替代的实际解决方案依赖于重建所有用户空间,因此在可预见的未来,这可能是唯一可行的解决方案。
2010 年的漏洞利用使用了 X 服务器,这个使用了 sudo,下一个可能是众多用户级程序中的任何一个,这些程序在某些时候以提升的权限运行。
Qualys 尚未发布任何用于漏洞利用的概念验证代码(他们计划稍后发布)。
有多个与 CVE-2017-1000364 相关的 Ubuntu 安全声明:
另请注意,CVE 跟踪器将多个版本/内核组合列为待定修复程序。
通常,最简单的修复方法是尽快将系统更新到最新的内核包。
来自 USN 的相关内核版本(使用 剔除for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):
| 归档时间: |
|
| 查看次数: |
9060 次 |
| 最近记录: |