安全研究员公布了 Linux 内核中一个漏洞(CVE-2024-53141)的技术细节和概念验证性利用代码。该漏洞是 netfilter 子系统的 ipset 组件中一个严重的越界(OOB)访问缺陷,其通用漏洞评分系统(CVSS)评分为 7.8。追溯发现,这一漏洞源于 bitmap_ip_uadt 函数中的一个细微错误,它为威胁行为者提供了一条强大的利用链,最终可能导致权限提升、内核地址空间布局随机化(KASLR)绕过以及完全的内核级代码执行。
CVE-2024-53141 的根本原因在于 ipset 组件内的 bitmap_ip_uadt 函数。该漏洞是由于在处理 IPSET_ATTR_CIDR 参数时缺少范围检查而产生的。
在特定条件下,尤其是当 tb [IPSET_ATTR_IP_TO] 不存在但 tb [IPSET_ATTR_CIDR] 存在时,ip 和 ip_to 的值会被交换,并且对 ip 的关键范围检查会被省略。这种疏忽可能会导致内存越界访问。
越界访问漏洞可使攻击者在预期边界之外操纵内存,可能会导致各种安全后果,包括:
1.内核崩溃
2.权限提升
3.任意代码执行
该报告概述了一个多阶段的利用过程,包括:
1.通过越界写入造成堆泄漏:在注释初始化路径(ip_set_init_comment ())期间,攻击者精心构造一个恶意的 e.id,通过向相邻的堆块(如套接字缓冲区)写入数据,从而泄漏内核堆地址。
2.写入任意值的越界操作:第二个攻击原语使攻击者能够通过操纵计数器(ip_set_init_counter ()),将精心构造的值设置到有效边界之外的内存中,使攻击者能够改变堆上的控制结构。
3.通过 msg_msgseg 实现释放后重用:攻击者通过使用 msg_msgseg 巧妙地操纵内存布局,将越界条件转化为释放后重用,回收已释放的内核内存,并为劫持控制流做好准备。
这种利用并不止于内存损坏。借助堆泄漏原语,攻击者计算出内核的基地址,并覆盖诸如 pipe_buffer->ops 之类的控制结构。
最终的有效载荷使用了经典的 core_pattern 技术,覆盖了决定进程崩溃时执行内容的内核字符串。通过将 core_pattern 指向用户控制的二进制文件,攻击者实现了 root shell 执行。
此漏洞影响内核版本 v2.7 至 v6.12。目前,在 GitHub 上已经提供了有效的PoC。
为解决此漏洞,至关重要的是将 Linux 内核更新到已实施缺失范围检查的修补版本。
发表评论
您还未登录,请先登录。
登录