Linux Netfilter 内核子系统中的漏洞

Netfilter(Linux 内核的一个子系统,用于过滤和修改网络数据包)中已发现一个漏洞 (CVE-2021-22555),该漏洞允许本地用户获得系统的 root 权限,包括在隔离容器中时。 绕过 KASLR、SMAP 和 SMEP 保护机制的漏洞利用工作原型已准备好进行测试。 发现该漏洞的研究人员因找到绕过 kCTF 集群中 Kubernetes 容器隔离的方法而获得了 Google 20 美元的奖励。

该问题自 2.6.19 年前发布的内核 15 起就一直存在,是由 IPT_SO_SET_REPLACE 和 IP6T_SO_SET_REPLACE 处理程序中的错误引起的,该错误在兼容模式下通过 setsockopt 调用发送特殊格式的参数时会导致缓冲区溢出。 正常情况下,只有 root 用户可以调用 compat_setsockopt(),但在启用了用户命名空间支持的系统上,非特权用户也可以获得执行攻击所需的权限。

用户可以使用单独的根用户创建一个容器,并从那里利用该漏洞。 例如,“用户命名空间”在 Ubuntu 和 Fedora 上默认启用,但在 Debian 和 RHEL 上未启用。 修复该漏洞的补丁已于 13 月 XNUMX 日被纳入 Linux 内核。 Debian、Arch Linux 和 Fedora 项目已经生成了软件包更新。 在 Ubuntu、RHEL 和 SUSE 中,更新正在准备中。

该问题出现在 xt_compat_target_from_user() 函数中,原因是在从 32 位表示转换为 64 位表示后保存内核结构时内存大小计算不正确。 该错误允许将四个空字节写入超出以偏移量 0x4C 为界的已分配缓冲区的任何位置。 事实证明,这一功能足以创建一个漏洞,允许人们获得 root 权限 - 通过清除 msg_msg 结构中的 m_list->next 指针,为释放内存后访问数据创建条件(释放后使用),这然后用于通过操作 msgsnd() 系统调用来获取有关地址和其他结构更改的信息。

来源: opennet.ru

添加评论