Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/slauger/cve-2026-31431
权限提升容器安全漏洞分析漏洞利用云安全
GitHubslauger/cve-2026-31431

CVE-2026-31431

CVE-2026-31431 分析与缓解指南,涉及 Linux 内核 crypto algif_aead 子系统中的本地权限提升漏洞,包含对 RHEL 和 OpenShift 的影响评估,以及 seccomp 和 SCC 加固措施。

查看仓库
13个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-31431 — “Copy Fail”

Linux 内核 crypto algif_aead 子系统中的本地权限提升漏洞。

概述

CVE-2026-31431,代号“Copy Fail”,是 Linux 内核 authencesn 加密模板(algif_aead)中的一个逻辑缺陷。它允许非特权本地用户对任何可读文件的页缓存执行受控的 4 字节写入,从而可被利用来修改 setuid 二进制文件并获得 root 权限。

  • CVSS: 7.8(高危)
  • 受影响范围: 自 2017 年以来发布的所有主流 Linux 内核
  • 利用方式: 一个 732 字节的 Python 脚本——无需竞态条件,无需内核特定偏移量
  • 修复: 主线提交 a664bf3d603d

时间线

日期事件
2026-03-23报告给 Linux 内核安全团队
2026-04-01补丁提交至主线
2026-04-22分配 CVE 编号
2026-04-29公开披露

影响矩阵

该漏洞利用需要两个条件:一个 AF_ALG 套接字(所有 seccomp 配置文件中默认允许)和一个 setuid 二进制文件(例如 /usr/bin/su)。关键的缓解措施是 allowPrivilegeEscalation: false——这会通过 prctl(PR_SET_NO_NEW_PRIVS, 1) 设置 Linux 内核的 no_new_privs 标志,导致内核在 execve() 时忽略 setuid/setgid 位。由于该漏洞利用依赖于执行修改后的 setuid 二进制文件,因此这会阻止最终的提权步骤。

这并非 OpenShift 特有功能——它在原生 Kubernetes(Pod 安全标准 Restricted)、Docker(--security-opt no-new-privileges)和 Podman 上的工作方式相同。OpenShift 只是通过 restricted-v2 SCC 默认强制执行,而其他平台需要显式配置。

RHEL 8 / RHEL 9

RHEL 8 和 RHEL 9 附带的内核包含易受攻击的代码。具有 shell 访问权限的非特权本地用户可以利用此漏洞获取 root 权限。请立即修补。

root@kitploit:~
yum updateinfo list cves CVE-2026-31431
yum update kernel

OpenShift(4.x)

OpenShift 运行在 RHCOS 上,其附带的内核存在漏洞。实际影响取决于工作负载的安全上下文约束(SCC)。

使用默认 restricted-v2 SCC 的标准工作负载不可被利用,因为强制启用了 allowPrivilegeEscalation: false。

使用提升 SCC(anyuid、privileged 或允许 allowPrivilegeEscalation: true 的自定义 SCC)运行的 Pod 存在漏洞。这通常包括:

  • CI/CD 构建 Pod(Jenkins 代理、使用自定义 SCC 的 Tekton)
  • 需要 anyuid 的遗留应用程序
  • 基础设施 Pod(监控、日志、存储)

直接节点访问(例如通过 oc debug node/)始终存在漏洞——这是标准的本地权限提升,不涉及容器隔离。

测试

提供了一个测试 Pod,用于检查您的集群中是否满足漏洞利用的先决条件。它不会尝试利用该漏洞——仅检查:

  1. 是否可以创建 AF_ALG 套接字?(内核攻击面是否可达)
  2. 是否设置了 no_new_privs?(阻止 setuid 提权)
  3. 容器镜像中是否存在 setuid 二进制文件?
  4. 底层节点的内核版本

用法(Pod)

root@kitploit:~
oc apply -f test-pod.yaml
oc logs cve-2026-31431-check
oc delete -f test-pod.yaml

用法(Deployment)

使用 Deployment 变体,通过扩展副本数或使用 Pod 反亲和性在多个节点上进行测试:

root@kitploit:~
oc apply -f test-deployment.yaml
oc logs -l app=cve-2026-31431-check
oc delete -f test-deployment.yaml

退出码

代码含义
0不可利用——AF_ALG 套接字被 seccomp 阻止
1部分暴露——AF_ALG 可达,但 setuid 被 no_new_privs 阻止
2存在漏洞——所有漏洞利用先决条件均已满足

默认 OpenShift 上的预期结果

在具有 restricted-v2 SCC 的标准 OpenShift 集群上,您应该看到退出码 1(部分暴露):可以创建 AF_ALG 套接字(RuntimeDefault seccomp 不会阻止它),但 no_new_privs 阻止了 setuid 提权步骤。已发布的 PoC 将无法生效,但内核级漏洞仍然可达——建议进行修补。

缓解措施

1. 修补内核(P0)

这是唯一完整的修复方案。更新所有节点上的内核并重启。

对于 OpenShift,请更新到包含该修复的 RHCOS 版本,并执行滚动节点重启。

2. 禁用 algif_aead 模块(临时变通方案)

如果 algif_aead 编译为可加载模块(CONFIG_CRYPTO_USER_API_AEAD=m):

root@kitploit:~
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true

如果 algif_aead 是内置的(=y),则此方法无效,而 RHCOS 正是这种情况。请使用以下命令检查:

root@kitploit:~
modinfo algif_aead 2>&1 | grep builtin
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)

3. 通过 seccomp 阻止 AF_ALG(OpenShift)

如果内核模块是内置的,那么在补丁发布前,针对容器的唯一缓解措施是通过自定义 seccomp 配置文件阻止 socket(AF_ALG, ...) 系统调用。

通过 MachineConfig 部署 seccomp 配置文件

创建 MachineConfig 以将配置文件放置在所有节点上(对于控制平面节点,重复使用 role: master):

root@kitploit:~
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 99-worker-seccomp-deny-af-alg
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - path: /var/lib/kubelet/seccomp/deny-af-alg.json
          mode: 0644
          contents:
            source: data:application/json;charset=utf-8;base64,ewogICJkZWZhdWx0QWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKICAic3lzY2FsbHMiOiBbCiAgICB7CiAgICAgICJuYW1lcyI6IFsic29ja2V0Il0sCiAgICAgICJhY3Rpb24iOiAiU0NNUF9BQ1RfRVJSTk8iLAogICAgICAiYXJncyI6IFsKICAgICAgICB7CiAgICAgICAgICAiaW5kZXgiOiAwLAogICAgICAgICAgInZhbHVlIjogMzgsCiAgICAgICAgICAib3AiOiAiU0NNUF9DTVBfRVEiCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXQp9

base64 内容解码后为:

root@kitploit:~
{
  "defaultAction": "SCMP_ACT_ALLOW",
  "syscalls": [
    {
      "names": ["socket"],
      "action": "SCMP_ACT_ERRNO",
      "args": [
        {
          "index": 0,
          "value": 38,
          "op": "SCMP_CMP_EQ"
        }
      ]
    }
  ]
}

注意: 应用 MachineConfig 会触发滚动节点重启。

在 Pod 规格中引用配置文件

root@kitploit:~
securityContext:
  seccompProfile:
    type: Localhost
    localhostProfile: deny-af-alg.json

集群范围的替代方案

为保护所有容器而无需修改 Pod 规格,可通过 MachineConfig 覆盖 CRI-O 默认 seccomp 配置文件(/etc/crio/seccomp.json),将 AF_ALG 过滤规则添加到现有配置文件中。

4. 审计您的 SCC

识别以提升权限运行的 Pod:

root@kitploit:~
# 查找未使用 restricted-v2 的 Pod
oc get pods -A -o json | jq -r '
  .items[] |
  select(.metadata.annotations["openshift.io/scc"] != "restricted-v2") |
  "\(.metadata.namespace)/\(.metadata.name) → \(.metadata.annotations["openshift.io/scc"])"
'

这些是完整漏洞利用链可以生效的 Pod。优先为运行这些工作负载的节点进行修补或 seccomp 缓解。

禁用 AF_ALG 的影响

阻止 AF_ALG 套接字对大多数工作负载的影响可忽略不计。以下内容不受影响:

  • dm-crypt / LUKS
  • kTLS
  • IPsec
  • OpenSSL / GnuTLS(标准构建)

只有显式配置为使用 OpenSSL afalg 引擎的应用程序才会受到影响。

参考

  • Copy Fail — 项目页面
  • Red Hat CVE-2026-31431
  • NVD — CVE-2026-31431
  • RuntimeDefault 不阻止 AF_ALG(juliet.sh)
  • Xint — Copy Fail 技术分析
  • The Register — Linux 加密代码缺陷
下载工具
环境allowPrivilegeEscalation容器 Root宿主机 Root风险
RHEL 8 / RHEL 9(本地用户)不适用不适用是严重
OpenShift 节点(shell 访问,例如 oc debug node/)不适用不适用是严重
OpenShift Pod — restricted-v2 SCC(默认)false否否低
OpenShift Pod — anyuid SCCtrue是否(命名空间隔离)高
OpenShift Pod — privileged SCCtrue是是(无隔离)严重
OpenShift Pod — 自定义 SCC取决于配置取决于配置取决于配置需审计
Kubernetes Pod — PSS Restrictedfalse否否低
Kubernetes Pod — PSS Baseline / 无策略true(默认)是否高
Docker / Podman — --security-opt no-new-privilegesfalse否否低
Docker / Podman — 默认true是否高