漏洞概述
GHSA ID: GHSA-vxmw-7h4f-hqxh
严重性等级: 低
发布日期: 2025年9月4日
受影响版本: < 1.13.0
修复版本: 1.13.0
漏洞详情
gh-action-pypi-publish是一个GitHub Actions复合操作,用于向PyPI发布Python包。在该操作的set-repo-and-ref步骤中,存在潜在的表达式扩展注入漏洞。
漏洞代码分析
问题出现在以下代码段中(摘自action.yml):
|
|
漏洞原理
-
表达式扩展机制:
- 代码使用了GitHub Actions的表达式语法
${{ ... }},而不是Shell变量扩展语法${...} ${{ ... }}表达式在执行Shell命令之前由GitHub Actions运行器进行求值
- 代码使用了GitHub Actions的表达式语法
-
注入点分析:
- 在
REF=${{ env.ACTION_REF || env.PR_REF || github.ref_name }}这行代码中 - 如果
env.ACTION_REF和env.PR_REF都为空字符串,表达式将回退到github.ref_name github.ref_name可能包含攻击者控制的输入(如分支名或标签名)
- 在
-
攻击示例: 假设攻击者能够设置一个分支名为:
1innocent;cat${IFS}/etc/passwd经过表达式扩展后,代码将变为:
1REF=innocent;cat${IFS}/etc/passwd这会将
REF变量设置为innocent,然后执行攻击者的代码(cat /etc/passwd)
技术细节
- 绕过Shell引号规则:由于使用
${{ ... }}进行扩展发生在Shell解释之前,因此可以绕过正常的Shell引号机制 - 条件限制:该漏洞仅在特定条件下可被利用:
env.ACTION_REF必须为空(正常情况下应始终优先)- 工作流必须使用允许攻击者控制
github.ref_name的触发器
影响范围
该漏洞的影响非常低,原因如下:
-
正常操作中难以触发:
env.ACTION_REF在大多数情况下都会优先,阻止回退到github.ref_name- 在常见的配置中(如使用
pull_request、release或push: tags事件)不易受到攻击
-
需要特定条件:
- 只有在使用特定类型的事件触发器,且
ACTION_REF和PR_REF都为空时,漏洞才可能被利用
- 只有在使用特定类型的事件触发器,且
修复方案
版本1.13.0中已修复此漏洞。修复方法包括:
- 改进了表达式扩展的处理方式
- 添加了输入验证和安全措施
参考信息
- GitHub Advisory: GHSA-vxmw-7h4f-hqxh
- 修复提交: pypa/gh-action-pypi-publish@77db1b7
- 相关文档: zizmor的模板注入规则文档
CVSS评分
整体评分: 0.0/10 (低严重性)
CVSS v3.1向量: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N
基本指标:
- 攻击向量:网络
- 攻击复杂度:低
- 所需权限:无
- 用户交互:无
- 范围:未改变
- 机密性影响:无
- 完整性影响:无
- 可用性影响:无
CWE分类
CWE-77: 命令中使用的特殊元素的不当中和(命令注入)
- 产品使用来自上游组件的外部影响输入来构造命令的全部或部分,但在将命令发送到下游组件时,没有中和或错误地中和了可能修改预期命令的特殊元素。
致谢
该漏洞由 woodruffw 报告。