侧边栏壁纸
博主昵称
YunZheng

独处未必孤独,喜欢就是自由

Linux 内核 CVE-2026-98432 远程代码执行漏洞修复

2026年11月01日 16阅读 0评论 2点赞
目录 0
本文暂无目录
创创云-专业云计算服务器提供商
目录 0
本文暂无目录

✨ 漏洞简介

CVE-2026-98432 是 Linux 内核 IPv4 TCP 握手处理中的一个释放后使用(Use-After-Free)漏洞,影响 Linux 内核 4.4 及以上版本,修复前的最新稳定分支同样受影响。
攻击者向目标任意一个开放的 TCP 端口发送携带 IPv4 选项(Record Route 或 Timestamp)的 SYN 报文,再重传同一个 SYN。当一个 CPU 正在把这个请求套接字上的 IP 选项移交给子套接字,另一个 CPU 同时在为同一个请求套接字构造 SYNACK 时,内核就会读到已经释放的选项内存。
竞争成功可造成内核内存破坏与信息泄漏,并可能被进一步利用导致远程代码执行。攻击者只要持续重试即可,单次失败只会让本次握手中断。
值得注意的是,公开研究演示的利用链针对的是启用多路径 TCP(MPTCP)监听的服务器,但这个漏洞并非 MPTCP 特有,普通 TCP 监听端口同样可以触发。

漏洞信息

项目说明
🔖 漏洞编号CVE-2026-98432 / AVD-2026-98432
🎯 影响版本Linux 内核 4.4 起,至 5.10.272 / 5.15.223 / 6.1.190 / 6.6.159 / 6.12.113 / 6.18.56 / 7.2.10 之前
🧨 漏洞类型释放后使用(UAF)→ 远程代码执行
📍 漏洞位置net/ipv4/af_inet.c → inet_sock_destruct();net/ipv4/tcp_ipv4.c → tcp_v4_reqsk_destructor()
🚪 利用入口任意开放的 TCP 端口,握手阶段,无需认证
⚠️ 危害内核内存破坏、信息泄漏、远程代码执行、服务器失陷
📊 CVSS 3.19.8(严重),AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

🔍 漏洞成因

问题出在内核 IPv4 协议栈对 ireq_opt(请求套接字上的 IP 选项)的所有权管理上。官方修复提交的标题是:

ipv4: free inet_opt and ireq_opt after an RCU grace period

路径一:正常握手
tcp_v4_syn_recv_sock() 把 ireq->ireq_opt 的所有权直接转移给子套接字 newinet->inet_opt,并没有做拷贝。与此同时,另一个 CPU 可能正在处理同一个请求套接字的重传 SYN,走 tcp_check_req() → tcp_v4_send_synack()。这条路径只在 rcu_read_lock() 下读取 ireq->ireq_opt,随后 ip_build_and_send_pkt() 和 ip_options_build() 会两次读取 opt->optlen。
自提交 079096f103fa(tcp/dccp: install syn_recv requests into ehash table)之后,请求套接字进入 ehash 表、处理时不再持有监听锁,因此子套接字完全可能在 SYNACK 还在构造时就被释放。而 TCP 子套接字没有 SOCK_RCU_FREE 标记,inet_sock_destruct() 用的是普通 kfree() —— 于是 ip_options_build() 读到的是已释放的内存。
路径二:请求套接字迁移
当 net.ipv4.tcp_migrate_req=1,或加载了 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 类型的 BPF 程序时,reqsk_timer_handler() 会用 inet_reqsk_clone() 克隆请求套接字。新旧两个请求套接字共享同一个 ireq_opt,随后 reqsk_migrate_reset() 把旧的那个指针清空。此时另一个 CPU 仍可能持有旧请求套接字的引用并在使用这些选项(发送 SYNACK,或在 tcp_v4_syn_recv_sock() 中创建子套接字),而克隆体被释放时 tcp_v4_reqsk_destructor() 同样是普通 kfree()。
修复方式
把 inet_sock_destruct() 和 tcp_v4_reqsk_destructor() 中的 kfree() 改为 kfree_rcu()。读取侧本来就走 RCU,其他替换 inet_opt 的路径(如 do_ip_setsockopt()、cipso_v4_sock_setattr())也早已使用 kfree_rcu(),这次是把释放侧补齐。

一个容易忽略的点:IPv6 不受路径一影响,因为 tcp_v6_syn_recv_sock() 会复制选项;但 tcp_v6_reqsk_destructor() 的迁移问题依然存在,会由另一个补丁处理。所以"只开 IPv6"不是安全的规避方案。

🛠️ 修复方案

修复要点

修复点说明
🎯 内核升级唯一彻底的修复方式,升级到公告给出的修复版本
🧯 关闭 MPTCP让公开利用链失效,但不等于修复,漏洞与 MPTCP 无关
🛡️ SYN 选项过滤在防火墙丢弃带 IP 选项的 SYN,从入口切断触发条件
🔒 收敛暴露面端口越少,攻击面越小,这是最根本的降风险手段
🚫 关闭请求迁移堵住第二条触发路径
⚠️ 无单文件补丁这是内核缺陷,不存在"替换一个文件即可修复"的方案

第一步:查版本

uname -r
cat /etc/os-release

把输出和上表的修复版本对照。发行版内核以厂商公告为准,不能只看上游版本号。

第二步:升级内核(唯一彻底修复)

# Ubuntu / Debian
sudo apt update
sudo apt install --only-upgrade linux-image-generic
sudo reboot
# RHEL / Rocky Linux / AlmaLinux / openEuler
sudo dnf update kernel kernel-core kernel-modules
sudo reboot

升级前必做:

  • 云主机在控制台创建系统盘快照;
  • 确认维护窗口,Nginx、MySQL、PHP、Redis 会短暂中断;
  • 记录当前 uname -r,便于在 GRUB 里回退。

升级后必做:

uname -r                 # 确认已进入修复区间
systemctl status bt      # 确认宝塔面板正常

再登录面板,检查 CPU、内存、负载,逐个确认网站和数据库状态。

⚠️ 阿里云公告明确指出:各上游操作系统尚未正式发布对应安全更新补丁。执行升级后如果 uname -r 仍在受影响区间,说明厂商还没回移,必须继续执行下面的缓解措施,并持续关注厂商公告。

第三步:无法立即升级时的缓解

1. 关闭 MPTCP

sysctl -w net.mptcp.enabled=0
echo 'net.mptcp.enabled=0' > /etc/sysctl.d/99-disable-mptcp.conf
sysctl --system

Go 1.24 起默认对监听套接字启用 MPTCP,这是公开利用链的前提。Go 项目还可以在程序层面兜底:

GODEBUG=multipathtcp=0 ./your-service

或在 go.mod 中写死:

godebug multipathtcp=0

但逐程序关闭是脆弱的,漏掉一个监听器整个系统就还在风险里,只能当过渡手段。
2. 丢弃带 IP 选项的 SYN
先用 tcpdump 观察 24 小时,确认业务不依赖 IP 选项:

tcpdump -ni any 'tcp[tcpflags] & tcp-syn != 0 and (ip[0] & 0x0f) > 5' -c 50

没有输出即可放心加丢弃规则。

# iptables
iptables -N IPOPT_SYN_GUARD 2>/dev/null
iptables -F IPOPT_SYN_GUARD
iptables -A IPOPT_SYN_GUARD -p tcp --syn -m ipv4options --any -j DROP
iptables -I INPUT 1 -j IPOPT_SYN_GUARD
# firewalld(iptables 手工规则会被 reload 清掉,必须用 direct)
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 \
  -p tcp --syn -m ipv4options --any -j DROP
firewall-cmd --reload

ufw 系统则在 /etc/ufw/before.rules 的 COMMIT 之前加入:

-A ufw-before-input -p tcp --syn -m ipv4options --any -j DROP
⚠️ 宝塔面板的「安全」页面只能加端口和 IP 规则,加不了 ipv4options 这种匹配模块,必须走命令行。
⚠️ 这条规则会丢弃所有带 IP 选项的 SYN,包括极少数老旧网络设备发出的报文,所以先 LOG 观察再决定是否长期保留。

3. 收敛暴露面

  • 只放行 80/443 和确实需要的业务端口;
  • 面板端口不要对 0.0.0.0/0 开放,在「面板设置 → 安全设置 → 授权IP」限制来源;
  • 888(phpMyAdmin)不暴露公网,需要时走 SSH 隧道;
  • 3306 / 6379 / 9200 只监听 127.0.0.1。

4. 关闭请求套接字迁移

sysctl net.ipv4.tcp_migrate_req          # 默认 0,确认一下
sysctl -w net.ipv4.tcp_migrate_req=0

🧪 验证方法

1. 确认内核版本

uname -r

对照修复版本表,确认已进入"不受影响"区间。

2. 确认缓解措施生效

sysctl net.mptcp.enabled                 # 返回 0 表示已关闭
sysctl net.ipv4.tcp_migrate_req          # 返回 0 表示已关闭
iptables -L IPOPT_SYN_GUARD -n -v        # 看 pkts 计数是否增长

pkts 持续增长说明确实有带 IP 选项的 SYN 在打你的服务器,这条规则正在起作用 —— 同时也说明你更应该尽快升级内核。

3. 检查异常痕迹

dmesg -T | grep -iE 'ip_options_build|BUG: unable to handle|general protection fault|KASAN'

如果出现 ip_options_build 相关的 oops、general protection fault,或者 KASAN 报出 use-after-free,说明内核可能已经被触发过,需要按入侵事件处理:隔离主机、保留内存和日志、排查持久化。

4. 确认业务正常

  • 宝塔首页看负载、内存、网络是否正常;
  • 网站逐个访问,重点测 HTTPS、上传、长连接;
  • 数据库连接正常,慢查询没有异常增长;
  • 如果加了 SYN 丢弃规则,观察一周内是否有业务侧反馈连接异常。

💡 补充建议

  • 宝塔的网站防火墙、云 WAF 挡不住这个漏洞。攻击发生在 TCP 三次握手阶段,报文里没有 HTTP 内容,WAF 在应用层工作,看不到也拦不住。真正有效的是端口收敛和 SYN 过滤。
  • Docker 不需要单独处理。容器共享宿主内核,宿主升级后容器自动受益;反之宿主不修,容器里做任何加固都没用。
  • CentOS 7 需要单独说明。默认内核 3.10 不在公告的 4.4+ 影响区间内,但 CentOS 7 已于 2024 年 6 月停止维护,拿不到后续任何内核安全更新。建议以红帽公告为准,并把迁移到 Rocky Linux 9 / AlmaLinux 9 / openEuler 排进计划。
  • 不要只关 MPTCP 就认为修好了。Go 安全团队和内核维护者都明确表示,这个漏洞并非 MPTCP 特有,关闭它只是让已知的公开利用链失效。
  • 重启后如果网站起不来,先在 GRUB 里选旧内核回退,再判断是内核兼容性问题还是服务本身的问题。

🔗 相关链接

链接地址
阿里云漏洞库https://avd.aliyun.com/detail?id=AVD-2026-98432
NVD 记录https://nvd.nist.gov/vuln/detail/CVE-2026-98432
内核修复提交https://git.kernel.org/stable/c/11a03ce3c4a62d84c10ccdfe47f8075006498568
oss-security 讨论(Go 与 MPTCP)http://www.openwall.com/lists/oss-security/2026/10/30/1
oss-security 讨论(系统级关闭 MPTCP)http://www.openwall.com/lists/oss-security/2026/10/30/6

📝 更新日志

v1.0.0 (2026-11-01)

  • ✅ 梳理漏洞成因:ireq_opt 所有权转移与 RCU 宽限期外的 kfree()
  • ✅ 给出各发行版内核升级命令与升级前后检查清单
  • ✅ 补充 MPTCP 关闭方案,并说明其局限性
  • ✅ 补充 ipv4options SYN 过滤规则,覆盖 iptables / firewalld / ufw
  • ✅ 补充暴露面收敛与请求套接字迁移关闭
  • ✅ 补充验证命令与异常痕迹排查方法

如果这篇文章对你有帮助,欢迎分享给身边还在用宝塔管理服务器的朋友! Made with ❤️ by YouChuang Open Source Community · Powered by Linux Kernel

2赞
打赏

—— 评论区 ——

昵称
邮箱
网址
取消
人生倒计时