超过 15 年前的 Netfilter 漏洞允许提权

前几天有消息说 在 Netfilter 中发现了一个漏洞 (用于过滤和修改网络数据包的 Linux 内核子系统), 允许本地用户获得 root 权限 在一个系统中即使在绝缘容器中。

CVE-2021-22555漏洞 这是自内核 2.6.19 以来一直存在的问题,15 年前推出,现在 由驱动程序中的错误引起 IPT_SO_SET_REPLACE 和 IP6T_SO_SET_REPLACE, 在compat模式下通过setsockopt调用发送特殊修饰的参数时会导致缓冲区溢出。

也许此时很多人会想知道,Linux 内核中的一个漏洞怎么可能会被忽视这么长时间,答案是即使该漏洞自 Linux 2.6.19 以来就存在,但该漏洞是通过代码发现审计,即使 C 代码不可复制,也不能被利用,因为当时没有找到提升权限的必要资源。

例如,在内核 3.8 中支持非特权用户命名空间。 此外,一些发行版有一个补丁,添加 sysctl 以禁用非特权用户命名空间。

一般情况下,只有root用户才能调用compat_setsockopt(),但 必要的权限 进行攻击 它们也可以由非特权用户获得 在启用了用户命名空间的系统上。

CVE-2021-22555 是 Linux Netfilter 中一个已有 15 年历史的堆栈外写漏洞,其功能强大到足以绕过所有现代安全缓解措施并实现内核代码执行。

如此描述, 本地用户可以使用单独的 root 用户创建一个容器并从那里利用漏洞一世。 例如,“用户命名空间”默认包含在 Ubuntu 和 Fedora 中,但不包含在 Debian 和 RHEL 中。

该漏洞可以通过部分覆盖 m_list->next指针 msg_msg结构和实现后使用免费。 这足以让您的内核代码绕过 KASLR、SMAP 和 SMEP 运行。

此外,xt_compat_target_from_user() 函数中由于在从 32 位表示转换为 64 位表示后保存内核结构时不正确的内存大小计算而出现问题。

因此,提到 该错误允许将四个“零”字节写入缓冲区外的任何位置 已分配,受偏移量 0x4C 限制。 正因为如此,有人提到 事实证明,此功能足以创建漏洞利用 允许获取root权限:通过删除msg_msg结构中的m_list->next指针,创建释放内存后访问数据的条件(use-after-free),然后用来获取地址和变化信息通过操纵 msgsnd() 系统调用到其他结构。

关于错误报告,与检测到的任何漏洞一样,这涉及一个过程和报告,该报告是在 XNUMX 月份提交给内核开发人员的,然后在几天内得到纠正,以及包含在所有受支持发行版中的补丁,以便有关该错误的信息可以稍后发布。

Debian、Arch Linux 和 Fedora 项目已经生成了软件包更新。 从 Ubuntu 开始,RHEL 和 SUSE 更新正在进行中。 由于错误严重,实际可利用 并允许从容器中逃逸, 谷歌估计其发现为 10,000 美元,并将奖励翻了一番 给发现漏洞的研究人员,并确定避免在 kCTF 集群上隔离 Kubernetes 容器的方法。

为了测试,已经准备了一个漏洞利用的工作原型 绕过 KASLR、SMAP 和 SMEP 保护机制。

最后 如果您有兴趣了解更多信息, 您可以查看详细信息 在下面的链接中。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。