IPBUF安全漏洞报告
English
CVE-2023-53566 CVSS 5.5 中危

CVE-2023-53566 Linux内核nft_set_rbtree空指针解引用漏洞

披露日期: 2025-10-04
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2023-53566
漏洞类型
空指针解引用/释放后重用
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (netfilter nftables子系统)

相关标签

Linux内核netfilternftables空指针解引用释放后重用本地提权拒绝服务内核漏洞CVE-2023-53566红黑树

漏洞概述

CVE-2023-53566是Linux内核netfilter子系统中nft_set_rbtree模块的一个空指针解引用漏洞。该漏洞位于`nft_rbtree_gc_elem()`函数中,在红黑树元素插入过程中,`rb_prev()`函数可能返回NULL指针,导致内核发生通用保护错误(general protection fault)。具体表现为KASAN检测到空指针解引用,地址范围在0x0000000000000018到0x000000000000001f之间。该漏洞的触发路径为`nft_add_set_elem` → `nf_tables_newsetelem`,属于nftables规则集元素添加操作。除空指针解引用问题外,在迭代过程中还存在潜在的释放后重用(use-after-free)风险,因为迭代过程中`node`节点可能被释放,需要缓存下一个节点的值以避免问题。该漏洞需要本地低权限用户即可触发,无需用户交互,但会导致系统可用性受到严重影响,可能引发内核崩溃(kernel panic)或系统不稳定。CVSS 3.1评分为5.5分,属于中等严重级别,攻击向量为本地攻击(AV:L),需要低权限(PR:L),用户交互为无需(UI:N),对机密性和完整性无影响,但可用性影响为高(A:H)。

技术细节

该漏洞的技术原理如下:

1. **漏洞位置**:Linux内核netfilter子系统的`nft_set_rbtree`模块,具体在`nft_rbtree_gc_elem()`函数中。

2. **根本原因**:在nftables红黑树集合的元素垃圾回收(GC)过程中,代码调用`rb_prev()`来获取当前节点的前驱节点,但`rb_prev()`函数在某些边界条件下可能返回NULL(例如当前节点是树的最左节点时)。代码未对返回值进行NULL检查就直接解引用,导致空指针解引用错误。

3. **触发条件**:当用户尝试向nftables红黑树类型的集合中添加元素(通过`nft_add_set_elem`系统调用),且集合处于特定状态(如元素即将过期被GC)时,可能触发该漏洞。

4. **利用方式**:
- 攻击者需要本地系统访问权限(普通用户权限即可)
- 创建nftables红黑树类型的集合
- 向集合中添加元素,触发垃圾回收机制
- 在GC过程中,`rb_prev()`返回NULL,导致空指针解引用

5. **附加风险**:除了空指针解引用外,在迭代过程中存在use-after-free风险。迭代器指向的`node`可能在迭代过程中被释放,因此需要先缓存`rb_prev()`的返回值再使用。

6. **内核崩溃信息**:KASAN报告 `null-ptr-deref in range [0x0000000000000018-0x000000000000001f]`,发生在`nft_add_set_elem+0x14b0/0x2990`调用栈中。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要获得目标Linux系统的本地访问权限,普通用户权限即可触发该漏洞
STEP 2
步骤2:创建nftables红黑树集合
通过netlink套接字创建nftables表,并在其中创建红黑树(rbtree)类型的集合
STEP 3
步骤3:添加集合元素
向红黑树集合中添加元素,使集合进入特定状态,以便在后续操作中触发垃圾回收机制
STEP 4
步骤4:触发垃圾回收
设置较短的GC间隔,触发nft_rbtree_gc_elem()函数执行,其中rb_prev()返回NULL
STEP 5
步骤5:利用空指针解引用
在GC执行过程中添加新元素,触发空指针解引用,导致内核崩溃(kernel panic)或系统不稳定

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2023-53566 PoC - Trigger null pointer dereference in nft_set_rbtree // This PoC demonstrates triggering the null deref in nft_rbtree_gc_elem() // Requires: CAP_NET_ADMIN or root privileges to manipulate nftables #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/netlink.h> #include <linux/netfilter.h> #include <linux/netfilter/nfnetlink.h> #include <linux/netfilter/nf_tables.h> #include <linux/netfilter/nf_tables_compat.h> // Note: This is a conceptual PoC. Actual exploitation requires // crafting proper netlink messages to trigger the rb_prev() NULL return // in nft_rbtree_gc_elem() during element insertion. static int create_nft_socket() { int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_NETFILTER); if (fd < 0) { perror("socket"); return -1; } struct sockaddr_nl addr; memset(&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); close(fd); return -1; } return fd; } int main() { int nlfd = create_nft_socket(); if (nlfd < 0) return 1; printf("CVE-2023-53566 PoC - nft_set_rbtree null deref\n"); printf("Requires kernel < fixed version with nftables support\n"); // Steps to trigger: // 1. Create a nftables table // 2. Create a rbtree-type set within the table // 3. Add elements to the set in a specific order // 4. Set a short GC interval // 5. Add another element while GC is running // -> rb_prev() returns NULL -> null ptr deref -> kernel crash // The actual netlink message crafting is complex and requires // proper sequence of NFT_MSG_NEWTABLE, NFT_MSG_NEWSET, and // NFT_MSG_NEWSETELEM messages. close(nlfd); return 0; }

影响范围

Linux Kernel 6.6 之前版本
Linux Kernel 6.6.x
Linux Kernel 6.1.x (LTS)
Linux Kernel 5.15.x (LTS)
Linux Kernel 5.10.x (LTS)
Linux Kernel 4.19.x (LTS)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下临时措施缓解:1)限制只有特权用户(root)才能使用nftables命令和相关系统调用;2)通过iptables/nftables规则限制非特权用户创建和修改nftables集合;3)使用Linux安全模块(如SELinux、AppArmor)限制对netlink NETLINK_NETFILTER套接字的访问;4)监控系统日志,及时发现内核崩溃事件;5)考虑暂时禁用nftables功能,使用传统的iptables替代。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表