Docker Swarm 加密网络存在 VXLAN 注入漏洞怎么办

先核对 Linux 节点、Docker Engine 版本与加密 overlay,再滚动升级并用临时出站规则控制本地低权限用户风险

说明 CVE-2026-92542 的受影响条件,给出 Docker Swarm Linux 节点的只读取证、滚动升级、临时 iptables 缓解、验证和回退步骤。

Docker Swarm 加密网络存在 VXLAN 注入漏洞怎么办

先核对 Linux 节点、Docker Engine 版本与加密 overlay,再滚动升级并用临时出站规则控制本地低权限用户风险

直接答案:CVE-2026-92542 不是“只要用了 Docker 就能被远程入侵”。它影响使用 Docker Swarm 的 Linux 节点:节点运行受影响版本,业务接入启用了 --opt encrypted 的 overlay 网络,并且攻击者已经能以低权限用户身份在某个集群节点的宿主机网络命名空间发送数据包。满足这些条件时,攻击者可能让伪造的 VXLAN 以太网帧被加密后送入另一节点的加密 overlay,影响网络完整性和可用性。优先把 Docker Engine 升级到 29.8.2 或更高修复版本;仍在 25.x 维护分支时核对发行渠道是否提供 25.0.19,不要自行把版本号类推到其他分支。

开始前先保存节点、服务和网络清单,确认集群有足够副本承受逐节点维护。版本查询和网络检查本身不收费,也不改数据;升级可能重启 Docker 服务、重调度任务,并产生短时容量下降。单节点 Swarm 或只有一个副本的服务不能按“无停机”处理,应先安排维护窗口和可恢复备份。

先判断你的环境是否真正匹配

在管理节点执行以下只读命令。不要用公开漏洞样例发送伪造包来“验证”,生产排查只需要确认版本、节点系统和网络选项。

docker version --format 'server={{.Server.Version}}'
docker info --format 'state={{.Swarm.LocalNodeState}} node={{.Swarm.NodeID}} datapath={{.Swarm.Cluster.DataPathPort}}'
docker node ls
docker network ls --filter driver=overlay

state=active 表示本机已加入 Swarm。默认 data path 端口通常是 UDP 4789,但集群可以修改,所以后续命令必须读取实际值,不能写死。若 docker node ls 报权限错误,应换到管理节点或使用获得授权的管理员账号,不要为了排查扩大普通用户权限。

逐个检查业务 overlay 的选项,把网络名替换为真实值:

docker network inspect NETWORK_NAME --format 'driver={{.Driver}} scope={{.Scope}} encrypted={{index .Options "encrypted"}} vxlan={{index .Options "com.docker.network.driver.overlay.vxlanid_list"}}'

driver=overlay、scope=swarm 且 encrypted=true 才属于公告描述的加密 overlay。普通 bridge 网络、未启用 Swarm 的单机 Docker、Windows 节点或没有加密选项的 overlay,不应直接套用本文结论。Docker 官方还说明,Swarm 管理流量始终加密,但应用数据默认不加密;只有创建网络时启用 --opt encrypted 才使用 VXLAN 层 IPsec,因此“Swarm 已启用”和“业务 overlay 已加密”是两项不同判断。

哪些 Docker Engine 版本受影响

Moby 公告在 2026 年 10 月 1 日列出的 Docker Engine 影响范围为 25.0.18 及以下,以及 26.0.0 至 29.8.1;29.8.2 为修复版本。公告同时列出 25.0.19 和 Moby v2.0.0-beta.25 的对应修复。发行版仓库可能回移补丁而不完全采用上游版本字符串,所以 Ubuntu、Debian、RHEL 系列或云镜像自带包应同时查看发行商安全公告和包变更记录。不能因为版本字符串较旧就断言一定未修复,也不能因为客户端新版就忽略服务端版本。

风险还要求攻击者能从 Linux Swarm 节点的宿主机网络命名空间发包。普通容器内用户通常不等于宿主机本地用户;但使用 host 网络、过度特权容器、共享运维账号或可在宿主机执行程序的自动化,会扩大可利用面。检查这些权限属于访问控制审计,不要在文章或工单中记录真实账号、密钥和节点公网地址。

推荐修复:逐节点滚动升级

先升级一个工作节点,验证后再继续。实际包管理命令取决于发行版和你的 Docker 安装来源,发布前应从 Docker 官方仓库或系统发行商仓库确认候选版本,不要混用安装脚本和系统包。维护工作节点前先将其设为暂停接收新任务,再疏散现有任务:

docker node update --availability pause NODE
docker node update --availability drain NODE

把 NODE 替换为节点名或 ID。drain 会重调度服务任务,但不会自动迁移普通 docker run 容器,也不能保证有状态应用安全切换。确认副本在其他节点恢复后,按既有受控包源升级该节点并重启 Docker。完成后检查服务端版本,再恢复调度:

docker version --format 'server={{.Server.Version}}'
docker node update --availability active NODE

管理节点应保持法定人数,不能同时停掉多数 manager。三管理节点集群一次只维护一个;升级第一个 manager 前确认 docker node ls 中其余 manager 可用。若服务只有一个副本、使用节点本地卷或绑定节点标签,疏散可能造成停机或任务无法启动,应先备份数据并明确恢复路径。

暂时不能升级时如何降低风险

官方公告给出的临时措施是在每个受影响 Linux 节点阻止用户态进程向 Swarm 实际 data path 端口发送 UDP。下面规则会改动主机防火墙,可能与 nftables 后端、防火墙管理器或既有自动化冲突。应先在非关键工作节点执行,保持现有 SSH 管理会话,并准备撤销命令。

PORT="$(docker info --format '{{.Swarm.Cluster.DataPathPort}}')"
test -n "$PORT" || exit 2
iptables -I OUTPUT -p udp --dport "$PORT" -m owner --socket-exists -j DROP

这条规则针对有 socket 所有者的用户态 UDP,而内核产生的正常 VXLAN 数据报不应匹配该条件。它是临时缓解,不是升级替代品。不同系统的 iptables 实现和持久化方式不同;如果插入规则后节点间业务异常,立即用同样参数删除:

iptables -D OUTPUT -p udp --dport "$PORT" -m owner --socket-exists -j DROP

不要把端口固定为 4789,也不要只在云安全组关闭节点间 data path:安全组无法区分同一主机上的用户态伪造流量,完全关闭端口还会直接破坏 overlay 通信。规则是否跨重启保留取决于系统防火墙配置,升级完成后应明确移除临时规则,避免留下无人维护的策略。

如何验收修复而不发攻击流量

每完成一个节点,检查所有节点服务端版本、可用状态和服务副本。再从业务已有健康检查验证跨节点通信,而不是构造漏洞利用包:

docker node ls
docker service ls
docker service ps SERVICE_NAME --no-trunc
docker network inspect NETWORK_NAME --format '{{json .Peers}}'

节点应为 Ready,需要调度的节点应为 Active,服务的实际副本数应等于期望值。对临时规则还应查看计数和精确位置,确认没有宽泛 DROP:

iptables -L OUTPUT -n -v --line-numbers

健康检查通过只能证明当前服务可用,不能证明历史上从未被利用。若存在不可信宿主机账号、异常特权容器或未知本地进程,应按安全事件处理:保留系统日志、账号登录记录和变更时间线,隔离可疑节点,再由有权限的人员做取证。单凭 UDP 4789 开放、网络抖动或某个容器重启,不能得出已遭攻击的结论。

升级失败时怎样回退

某节点升级后异常时,先保持该节点 drain,停止升级其他节点,并确认集群法定人数和业务副本仍正常。使用原安装渠道支持的降级或快照回退流程恢复该节点;不要直接覆盖 /var/lib/docker,这可能破坏镜像、容器元数据或 Swarm 状态。回退到受影响版本只恢复服务,不等于风险关闭,必须继续保留已验证的临时缓解并安排新的升级窗口。

修复完成的标准是:所有相关 Linux Swarm 节点运行已确认包含补丁的版本;加密 overlay 的业务连通和服务副本正常;临时防火墙规则已按计划保留或移除;访问控制审计没有把宿主机执行权限错误授予普通用户。本文不涉及黑鲨云账户、价格、库存或交付承诺,本稿未发现需要补充确认的业务事实。

相关教程

官方与上游来源

云服务器教程Docker 拉取镜像时遇到 lease does not exist 怎么排查2026-10-15云服务器教程NGINX gRPC 上游空闲连接被 RST 重置怎么排查2026-10-14云服务器教程BuildKit prune 后 metadata_v2.db 还在变大怎么处理2026-10-13

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区