CVE-2023-53619CVE-2023-53619是Linux内核netfilter连接跟踪(conntrack)子系统中存在的一个高危Use-After-Free(释放后使用)漏洞。该漏洞源于nf_conntrack_init_start()初始化失败时(例如由于register_nf_conntrack_bpf()失败导致),清理路径nf_conntrack_helper_fini()会释放nf_ct_helper_hash映射。然而,当内核以NF_CONNTRACK=y方式编译时,其他netfilter模块(如netfilter_conntrack_ftp)仍然可以被独立加载,并调用nf_conntrack_helpers_register()函数。该函数会访问已被释放的nf_ct_helper_hash悬空指针,从而触发Use-After-Free漏洞,可能导致随机内存损坏。该漏洞的CVSS评分为7.8,属于高危级别,攻击者只需本地低权限即可利用,无需用户交互,成功利用后可能获得高机密性、完整性和可用性影响。攻击者可通过加载特定的netfilter模块触发该漏洞,进而在内核上下文中执行任意代码或导致系统崩溃。该漏洞影响多个Linux内核稳定版本,已通过多个补丁提交进行修复。
从技术层面分析,该漏洞的核心问题在于netfilter连接跟踪子系统的初始化与清理逻辑之间存在竞态条件。
**漏洞原理:**
1. 在系统启动或模块加载过程中,内核调用nf_conntrack_init_start()初始化conntrack子系统,该函数负责创建和初始化nf_ct_helper_hash哈希表。
2. 如果初始化过程中某个步骤失败(例如register_nf_conntrack_bpf()返回错误),内核会调用nf_conntrack_helper_fini()进行清理,该函数会释放nf_ct_helper_hash映射的内存。
3. 问题在于,当NF_CONNTRACK被编译为内建模块(NF_CONNTRACK=y)时,清理函数执行后,nf_ct_helper_hash指针变为悬空指针,但未被设置为NULL。
4. 随后,当用户加载其他netfilter辅助模块(如netfilter_conntrack_ftp)时,模块初始化会调用nf_conntrack_helpers_register(),该函数遍历nf_ct_helper_hash哈希表以注册新的helper。
5. 由于nf_ct_helper_hash已被释放,访问该内存区域触发Use-After-Free,攻击者可利用此漏洞进行内核内存的任意读写。
**利用方式:**
攻击者只需拥有本地低权限用户访问权限,加载一个netfilter_conntrack_*系列模块即可触发该漏洞。通过精心构造的helper注册请求,攻击者可以控制写入释放内存的内容,实现内核代码执行或权限提升。