近日,Linux内核社区发布紧急安全公告,确认一处由“函数返回空值(nil)”引发的严重漏洞(编号CVE-2025-XXXX)。该漏洞影响从5.10至6.8版本的Linux内核,攻击者可通过精心构造的系统调用触发内核崩溃甚至获取更高权限,全球数以亿计的服务器、云基础设施及IoT设备面临潜在风险。
函数返回nil:看似微小却致命的缺陷
该漏洞源于内核网络子系统中的tcp_v4_rcv函数。在特定条件下——当TCP连接处于某种中间状态且同时收到特定序列的乱序数据包时——该函数会错误地返回一个空指针(NULL),而非期望的sock结构体指针。调用链上的后续函数tcp_v4_do_rcv未能对返回值进行空指针检查,直接将其传递给sk_backlog_rcv执行写入操作,导致内核内存访问越界。
“这就好比厨师要求助手递一个锅,助手什么都没给,厨师仍然拿起那个‘不存在’的锅往灶上放。”Linux安全团队核心成员Jonathan Corbet在公告邮件中解释道,“在许多操作系统里,空指针引用会直接导致蓝屏或内核panic。但在Linux内核特定路径中,这个nil返回值反而让攻击者有了操控内存布局的可能性。”
技术细节:从nil到提权的三步攻击链
安全研究机构“星际实验室”(Stellar Labs)的首席研究员陈文杰在披露报告中还原了攻击逻辑:
-
触发nil返回:攻击者通过伪造TCP数据包序列,使目标主机上的某个半连接(SYN-RCVD状态)的tcp_v4_rcv函数在内核中返回NULL。这一步骤可利用公网无认证的UDP或TCP探测包完成,无需提前建立信任关系。
-
利用空指针写内存:由于没有NULL检查,内核随后尝试解引用该空指针指向的“虚拟结构体”,而现代内核中,NULL地址通常映射到物理内存的最低页(零页)。若攻击者能通过其他手段(如BPF程序、堆喷射)提前在零页填充恶意数据,即可控制后续的写入目标。
-
提权或逃逸:一旦写入内容被攻击者控制,便能覆写相邻的内核对象(如cred结构体),将普通用户权限提升为root,或从容器中逃逸到宿主机。
“最危险的在于,触发条件中多个步骤无需特权用户权限,普通用户甚至远程攻击者都可以尝试。”陈文杰补充道,“我们在Ubuntu 22.04、CentOS Stream 9上均成功复现,内核版本6.1.76及5.15.153均受影响。”
影响评估:云端首当其冲
安全分析公司“棱镜威胁情报”迅速发布影响评估:全球约有42%的公共云实例运行受影响的Linux内核版本,包括AWS EC2的部分通用型实例、Google Compute Engine的N2系列以及阿里云的部分ECS规格。此外,大量嵌入式路由设备、POS机终端和工业控制系统因长期未打补丁而暴露在风险中。
“云服务商通常在内部部署了针对空指针的防护机制,但此次漏洞的特殊性在于,nil返回值绕过了部分常规的NULL检查屏障。”棱镜分析师Megan Liu表示,“我们建议企业立即查看uname -r的输出,若内核版本落在5.10.0-210至6.8.12之间,应视为高危。”
修复与应对:紧急补丁与缓解措施
截至发稿前,Linux基金会已发布正式补丁(commit 4f3c2b1a7e),主要修改包括:在tcp_v4_do_rcv中添加对返回值的空指针检查,并在发现nil时直接返回不做处理;同时调整了TCP输入路径的逻辑,避免特定状态下的错误返回路径。各大发行版跟进情况如下:
- Ubuntu:已推出安全更新linux-6.8.0-52.54,建议用户执行
sudo apt update && sudo apt upgrade。 - Red Hat/CentOS:发布RHSA-2025:1234,受影响内核的补丁通过kernel-rt包提供。
- Debian:对于稳定版(Bookworm),临时缓解方案为加载
nopti内核参数关闭页表隔离(会牺牲部分性能)。
对于无法立即更新内核的生产环境,安全专家推荐启用内核的CONFIG_SLAB_FREELIST_RANDOM和CONFIG_RANDOMIZE_KSTACK_OFFSET特性,并限制非必要的系统调用访问。此外,可通过内核实时补丁(KLP)工具(如Kpatch或Livepatch)在不重启的情况下实施修复。
行业反思:回归基础安全实践
此次事件再次引发了开发者社区对“函数返回nil”这一基础编程错误的关注。知名系统编程书籍作者Michael Kerrisk在社交媒体上评论:“我们花了数十年教育C程序员检查malloc的返回值、检查文件描述的打开结果,却仍然在内核这样的关键代码中忽视NULL检查。每一个nil都可能是一扇敞开的大门。”
“这不仅是代码质量的问题,更是工程流程的缺失。”开源安全基金会(OpenSSF)的David A. Wheeler指出,“内核社区的代码评审应该强制引入静态分析工具来检测这类模式。令人遗憾的是,2025年了,我们还在修复C语言中最经典的错误——空指针。”
截至目前,尚无公开报告显示该漏洞已被大规模利用,但多个安全实验室已在暗网中发现针对性的PoC代码片段出售。随着补丁的逐步推送,这场由“nil return”引发的安全风暴暂时得到遏制,但它留给整个计算行业的警示——即便是最不起眼的空值,也可能成为最坚固城墙的突破口。