NVIDIA Container Toolkit 1.17.3及以下版本在处理CUDA前向兼容性时存在安全漏洞。当容器镜像内存在恶意构造的软链接文件时,libnvidia-container会错误地将主机目录以只读模式挂载到容器内部。攻击者可利用该漏洞绕过容器隔离机制,导致敏感信息窃取或主机权限提升。关于漏洞的详细信息,请参见NVIDIA Container Toolkit,请及时修复。
影响范围
集群版本低于1.32,且集群中GPU节点安装了版本为1.17.3及以下的NVIDIA Container Toolkit组件。
您可执行nvidia-container-cli --version
查看组件版本。
防范措施
启用安全策略管理中的ACKAllowedRepos策略,限制只能从可信的镜像仓库中拉取镜像。
基于最小化原则,使用自定义RBAC限制集群内资源操作,仅授权可信人员可执行镜像导入操作。
解决方案
新建GPU节点
对于2025年04月30日及之后新建的GPU节点,ACK Edge集群已在1.20及以上版本中集成了NVIDIA Container Toolkit v1.17.5,此版本已经修复相关漏洞。您可以直接新建GPU节点并正常使用。如果您的集群版本低于1.20,建议您及时升级集群。
存量GPU节点
对于2025年04月30日之前创建的云端和边缘侧的存量GPU节点,均需通过执行CVE修复脚本进行手动修复。
在修复过程中,请分批进行节点修复操作,避免同时修复所有节点,以确保系统稳定性。
云上存量GPU节点修复
云上存量GPU节点修复方式请参见存量GPU节点修复方案。
边缘存量GPU节点修复
1、节点排水
控制台
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点页面中勾选目标节点并单击最下方节点排水,在弹出框中单击确定。
kubectl
执行以下命令,设置指定的节点为不可调度状态。
kubectl cordon <NODE_NAME>
执行以下命令,进行节点排水操作。
kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true
2、在边缘GPU节点上执行修复脚本
在目标边缘GPU节点上执行以下命令,修复NVIDIA Container Toolkit漏洞。
export REGION="" INTERCONNECT_MODE=""; export INTERNAL=$( [ "$INTERCONNECT_MODE" = "private" ] && echo "-internal" || echo "" ); wget http://aliacs-k8s-${REGION}.oss-${REGION}${INTERNAL}.aliyuncs.com/public/pkg/edge/fix-cve-2025-23359.sh -O /tmp/fix-cve-2025-23359.sh && bash /tmp/fix-cve-2025-23359.sh;
参数说明:
参数 | 说明 | 示例值 |
| ACK Edge集群所在地域的Region ID,支持的地域及其Region ID,请参见开服地域。 | cn-hangzhou |
| 指定节点接入的网络类型。
| private |
若输出以下结果,表明当前节点环境不存在CVE漏洞,机器上未执行任何变更,无需处理。
The current version of Nvidia container toolkit is safe, no cve.
若输出以下结果,表明该GPU节点环境中存在NVIDIA Container Toolkit漏洞且已被修复。
2024-10-10/xxxxx INFO succeeded to fix nvidia container toolkit cve
3、节点设置为可调度(即将节点解除隔离)
控制台
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点页面中勾选目标节点并单击最下方设置调度状态,在弹出框选中设置为可调度,然后单击确定。
kubectl
执行以下命令,将节点解除隔离。
kubectl uncordon <NODE_NAME>
4、验证GPU节点(可选)
完成上述操作以后,建议参考如下文档中的示例YAML部署一个GPU应用,验证节点是否能够正常工作。
独占GPU:使用Kubernetes默认GPU调度。
共享GPU:运行共享GPU调度示例。