共计 3125 个字符,预计需要花费 8 分钟才能阅读完成。
文章目录[显示]
一、小李的故事
小李是一家三百人公司的 " 日志管理员 "。
他的工作很简单: 每天上午看一眼业务服务器的日志, 把异常告警转给对应的研发同事。公司 IT 给他开了一个 Linux 账号, 权限卡得很死——只能 ssh 上去、只能看 /var/log、不能装软件、不能改配置。
按 IT 老大的话说:" 他这个号就算被钓鱼盗了, 黑客顶多看看日志, 翻不出花来。"
直到这周, 内核圈爆出一个编号 CVE-2026-31431 的漏洞——小李这种 最小权限账号, 可以在几秒钟内拿到服务器最高权限 root。
代码、数据库密码、客户资料、SSH 私钥、备份文件……全部一览无余。
二、漏洞档案(三十秒看完版)
| 项 | 内容 |
|---|---|
| 漏洞编号 | CVE-2026-31431 |
| 影响组件 | Linux 内核 algif_aead(内核加密接口) |
| 危险等级 | 7.8 高危(CVSS v3.1,kernel.org 评定) |
| 缺陷类型 | CWE-669: 资源在不同信任域之间错误转移 |
| 触发条件 | 本地 + 一个普通账号 + 无需用户交互 |
| 直接后果 | 普通用户一步提权到 root |
| 影响范围 | 主流发行版当前线上内核(Ubuntu / Debian / RHEL / SUSE / 麒麟 / 统信) |
| 修复进度 | kernel.org 已合入补丁, 各发行版正陆续推送安全更新 |
| 临时缓解 | blacklist algif_aead(对绝大多数业务零影响) |
一句话记住:有一个普通账号能登, 就够了。
三、" 低权限账号 ≠ 安全边界 "
很多公司的安全模型是这么搭的:
- 给运维:root
- 给研发:sudo
- 给业务、客服、日志、外包、实习生:一个普通账号
潜台词是:普通账号就算丢了也没事。
这个假设在大部分时候成立——前提是 " 内核本身没有漏洞 "。
而 CVE-2026-31431 干的就是把这个前提捅破了。
四、漏洞原理: 一份 " 装错的外卖 "
不想看技术细节的读者, 可以先记住这一句话:
CVE-2026-31431 的本质, 就是 Linux 内核在打包外卖时手一抖, 把后厨的钥匙串塞进了你的外卖袋。
下面这个生活化的比方, 看完你就懂了——
想象你点了份外卖。
你下单告诉商家:" 帮我把这份食材加工一下, 做成蛋炒饭。" 商家拿到你的食材, 后厨炒好, 装袋送回。
这个流程,就对应你写的程序请求 Linux 内核帮你做加密。
为了出餐快, 这家店厨房做了个 " 优化 ":打包台和后厨工作台合用同一张桌子——你的食材进去、加工、装回袋, 全在这一张桌子上完成, 省下了来回搬运的时间。
听上去很聪明。问题来了——
桌子上不光有你的食材, 还堆着这家店的 内部物料 : 今天的进货清单、各家供应商的对账单、 后厨那串钥匙的备份……
打包时手一抖,这些后厨的内部材料, 被一起塞进了你的外卖袋。
你回家拆袋一看: 咦, 这是什么? 后厨的钥匙复印件、整家店的内部账本——
有了这些, 你不光能免费吃饭, 还能直接走进后厨, 自己当老板。
回到 Linux 内核, 这个比方一一对应:
| 比方里的角色 | 对应的技术名词 |
|---|---|
| 外卖店的后厨 | Linux 内核加密子系统 algif_aead |
| 你下的单 | 普通用户调用内核加密 API |
| 打包台与工作台共用一张桌子 | " 原地操作 "(in-place processing)优化 |
| 被错装进外卖袋的内部材料 | 应只属于内核的 " 关联数据 "(AD) |
| 拿到后厨钥匙、当上老板 | 普通用户提权到 root |
学术名字叫 CWE-669: 资源在不同信任域之间错误转移。
一句白话再总结一次:内核图省事, 把自己家的钥匙塞进了你的外卖袋。
这就是为什么 " 日志管理员 " 小李的账号也能闯出大祸——他什么都没做, 只是按厨房教的流程 " 点了个外卖 " 而已。
CVSS 评分 7.8 高危 , 本地触发, 只需一个普通用户账号, 无需任何用户操作——这就是为什么 " 日志管理员 " 这种岗位也必须当回事。
五、谁该立刻自查
只要你的服务器满足以下任何一条, 都属于高危:
- 多人共享的开发机、堡垒机: 研发、测试、外包同时登录
- 多租户的容器宿主机:Kubernetes 节点、Docker 主机、虚拟化平台
- 给非 IT 同事开了 Linux 账号: 日志管理员、数据分析师、外部审计、实习生
- CI/CD Runner: 跑各种来源代码的构建机
- 学校、研究机构的共享服务器: 学生账号、跨实验室共用
- VPS 提供商给客户登录的虚机: 典型的多租户场景
只要 " 有不止一个人能登上去 ", 这台机器就在风险面里。
六、马上要做的三件事
1. 看一眼内核版本
uname -r
对照你用的发行版的安全公告:
- Ubuntu:Ubuntu Security Notice (USN)
- Debian:Debian Security Advisory (DSA)
- RHEL / CentOS / Rocky / AlmaLinux:Red Hat Security Advisory (RHSA)
- SUSE:SUSE-SU
- 麒麟、统信: 登录对应厂商的安全中心
2. 临时缓解(还没法马上重启升级的)
绝大多数业务用不到 algif_aead 这个内核接口(它服务的是 AF_ALG 加密 socket, 占比不到 1%)。可以先把它加进黑名单:
echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/cve-2026-31431.conf
sudo modprobe -r algif_aead
立竿见影, 且对绝大多数业务零影响。
3. 收紧多用户账号策略
- 不必要的 shell 账号一律改
nologin - 容器加 seccomp, 屏蔽
socket(AF_ALG, ...) - 共享主机上跑的服务, 能切容器 / 虚机就切
七、写在最后
每隔一段时间,Linux 内核就会爆一个这种 " 普通用户一脚踹到 root" 的漏洞。
脏牛(Dirty COW)、PwnKit、Dirty Pipe……每一次都把 " 低权限账号是安全的 " 这个幻觉打碎一次。
这次 CVE-2026-31431 又来了。
如果你正在管理一台 多人能登的 Linux 机器, 今天就花十分钟, 把上面三件事做完。
别等出事的那天, 才发现公司的 " 最小权限 " 其实根本没起作用。
福利: 一键自检脚本
我整理了一份《CVE-2026-31431 一键自检 + 缓解脚本 》, 可以直接在你的服务器上跑。
它会做这几件事:
- 自动识别发行版 + 内核版本
- 检测
algif_aead模块当前状态(已加载? 已黑名单?) - 统计这台机器有几个可登录的普通账号
- 给出本机的风险等级 (LOW / MEDIUM / HIGH), 并直接给出 中文判语 和编号处置清单
- 一键应用官方推荐的临时缓解(黑名单 + 卸载模块)
- 输出一份给老板 /IT 看的 Markdown 报告
支持 Ubuntu / Debian / CentOS / Rocky / AlmaLinux / 麒麟 / 统信。
下图是脚本运行效果:

漏洞利用效果:

Shell 脚本,纯检测和防御用途, 不含任何利用代码。
给运维同学的彩蛋: 退出码 = 风险等级
脚本的退出码做了语义化设计, 直接对齐 Nagios / Zabbix 这类监控系统的行业惯例:
| 退出码 | 含义 |
|---|---|
0 |
LOW(无风险或已缓解) |
1 |
MEDIUM(存在攻击面) |
2 |
HIGH(在漏洞影响范围内, 需立即处置) |
这意味着——你不需要改一行代码, 就能把它接进现有体系:
Ansible 批量扫描:
- name: 巡检 CVE-2026-31431
script: cve-2026-31431-check.sh
register: r
failed_when: r.rc >= 2 # HIGH 直接红
Cron + 告警:
0 3 * * * /opt/cve-2026-31431-check.sh || \
curl -X POST https:// 你的告警网关 -d "host=$(hostname)&risk=$?"
Zabbix / Nagios 自定义检查 :exit code 直接映射到 OK / WARNING / CRITICAL, 零改造。
公司有几百台机器时, 不用一台台看输出——一次扫完,只盯返回值 ≥2 的那批就行。
关注公众号后台回复关键词 31431, 我把脚本和使用说明发给你。

也欢迎扩散给身边管 Linux 的朋友——这事每个公司都有份。