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

漏洞利用效果:

Shell脚本,纯检测和防御用途,不含任何利用代码。
给运维同学的彩蛋:退出码 = 风险等级
脚本的退出码做了语义化设计,直接对齐 Nagios / Zabbix 这类监控系统的行业惯例:
| 退出码 | 含义 |
|---|---|
|| LOW(无风险或已缓解) |
|| MEDIUM(存在攻击面) |
|| 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 的朋友——这事每个公司都有份。 |
|