Linux 内核 IPv6 堆栈中允许远程执行代码的漏洞

关于Linux内核网络堆栈中的漏洞CVE-2023-6200)的信息已被披露,该漏洞在某些情况下允许来自本地网络的攻击者通过发送专门设计的ICMPv6数据包来实现其代码的执行RA(路由器通告)消息,旨在通告有关路由器的信息。

该漏洞只能从本地网络利用,并且出现在启用了 IPv6 支持且 sysctl 参数“net.ipv6.conf.<network_interface_name>.accept_ra”处于活动状态的系统上(可以使用命令“sysctl net.ipv6.conf”进行检查) | grep Accept_ra”) ,在 RHEL 和 Ubuntu 中默认对外部网络接口禁用该功能,但对环回接口启用,从而允许来自同一系统的攻击。

该漏洞是由垃圾收集器处理过时的 fib6_info 记录时的竞争条件引起的,这可能导致访问已释放的内存区域(释放后使用)。当收到带有路由器通告消息(RA,Router Advertising)的 ICMPv6 数据包时,网络堆栈调用 ndisc_router_discovery() 函数,如果 RA 消息包含有关路由生存期的信息,则调用 fib6_set_expires() 函数并填充 gc_link结构。要清理过时的条目,请使用 fib6_clean_expires() 函数,该函数会分离 gc_link 中的条目并清除 fib6_info 结构使用的内存。在这种情况下,在某个时刻,fib6_info 结构的内存已经被释放,但到它的链接仍然位于 gc_link 结构中。

该漏洞从6.6分支开始出现,并在6.6.9和6.7版本中修复。可以在以下页面上评估发行版中修复漏洞的状态:Debian、Ubuntu、SUSE、RHEL、Fedora、Arch Linux、Gentoo、Slackware。在使用 6.6 内核发布软件包的发行版中,我们可以注意到 Arch Linux、Gentoo、Fedora、Slackware、OpenMandriva 和 Manjaro;在其他发行版中,有错误的更改可能会被反向移植到具有旧内核分支的软件包中(例如例如,在 Debian 中,提到内核 6.5.13 的软件包存在漏洞,而有问题的更改出现在 6.6 分支中)。作为安全解决方法,您可以禁用 IPv6 或将“net.ipv0.conf.*.accept_ra”参数设置为 6。

来源: opennet.ru

添加评论