NVIDIA Container Toolkit 1.16.1及以下版本在使用默认配置时存在一个TOCTOU竞态条件攻击漏洞。该漏洞不会影响容器设备接口(CDI)的使用,但若被成功利用,可能导致容器逃逸,使攻击者能够在宿主机上执行任意命令或获取敏感信息。已知的攻击场景需要受害者使用恶意镜像,并在容器内通过NVIDIA Container Toolkit操作GPU资源。关于漏洞的详细信息,请参见NVIDIA Container Toolkit,建议您及时修复。
影响范围
同时满足以下条件,则会受到该漏洞影响。
ACK Edge集群中存在GPU节点。
集群中安装了NVIDIA Container Toolkit组件,且组件版本为1.16.1及以下。
解决方案
步骤一:节点排水
控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点页面中勾选目标节点并单击最下方节点排水,在弹出框中单击确定。
kubectl
执行以下命令,设置指定的节点为不可调度状态。
kubectl cordon <NODE_NAME>
执行以下命令,进行节点排水操作。
kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true
步骤二:节点上执行修复脚本
针对受影响的节点,需在节点上执行以下脚本。
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-nvidia-cve.sh -O /tmp/fix-nvidia-cve.sh && bash /tmp/fix-nvidia-cve.sh;
参数说明:
参数
说明
示例
REGION
指定集群所在地域的Region ID。
cn-hangzhou
ACK Edge集群支持的地域及其Region ID,请参见开服地域。
INTERCONNECT_MODE
指定节点接入的网络类型。
basic:公网接入。
private:专线接入。
basic
查看输出结果。
如果脚本输出如下内容,表明当前节点环境不存在CVE漏洞,机器上未执行任何变更,可忽略。
The current version of Nvidia container toolkit is safe, no cve.
如果脚本输出如下内容,那么表示该节点环境存在NVIDIA Container Toolkit漏洞且已被修复。
2024-10-10/xxxxx INFO succeeded to fix nvidia container toolkit cve
步骤三:节点上线
控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点页面中勾选目标节点并单击最下方设置调度状态,在弹出框选中设置为可调度,然后单击确定。
kubectl
执行以下命令,进行节点上线操作。
kubectl uncordon <NODE_NAME>
安全加固建议
使用启用安全策略管理中的ACKAllowedRepos策略,限制只使用可信仓库来源的镜像,同时基于最小化权限原则确保只有可信人员具有导入镜像的权限。