CVE-2021-3959是一个影响Linux内核的权限提升漏洞,主要存在于内核的网络子系统中。该漏洞允许本地攻击者通过特定的UDP数据包触发内核内存损坏,从而获得root权限。
漏洞原理
该漏洞源于net/ipv4/udp.c中的函数inet_recvmsg()在处理UDP数据包时缺少适当的边界检查。当接收方缓冲区不足时,内核会错误地处理数据拷贝操作,导致内存越界写入。
不同发行版处理差异
Ubuntu 20.04 (5.4.0-73-generic):
# 检查内核版本
uname -r
# 输出: 5.4.0-73-generic
# 该版本已包含修复补丁,通过在recvmsg函数中添加边界检查实现
CentOS 8 (4.18.0-305.el8):
# 检查内核版本
uname -r
# 输出: 4.18.0-305.el8
# 通过RHEL官方补丁修复,使用了更严格的缓冲区验证机制
Debian 11 (5.10.0-7):
# 检查内核版本
uname -r
# 输出: 5.10.0-7-amd64
# Debian通过更新内核包来修复,补丁中增加了对msg_control字段的检查
复现验证步骤
- 编译测试程序:
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main() {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
struct msghdr msg;
char buffer[1024];
memset(&msg, 0, sizeof(msg));
msg.msg_control = buffer;
msg.msg_controllen = 1024;
recvmsg(sock, &msg, MSG_WAITALL);
return 0;
}
- 编译并运行:
gcc -o test test.c
./test
安全建议
建议各系统管理员定期更新内核,特别关注安全公告中的CVE修复信息。可通过以下命令检查系统状态:
# 检查已安装的内核版本
rpm -q kernel
# 或者
apt list -a linux-image

讨论