漏洞详情
包: actions / pypa/gh-action-pypi-publish (GitHub Actions)
受影响版本: < 1.13.0
已修复版本: 1.13.0
描述
概述
gh-action-pypi-publish 在可能被攻击者控制的上下文中使用了 GitHub Actions 表达式扩展(即 ${{ ... }})。根据调用 gh-action-pypi-publish 所使用的触发器,这可能允许攻击者在调用 gh-action-pypi-publish 的工作流步骤上下文中执行任意代码。
详情
gh-action-pypi-publish 包含一个复合动作步骤 set-repo-and-ref,该步骤使用了表达式扩展:
|
|
在正常的预期操作中,这些扩展用于为 ref 和 repo-id 等输出建立正确的优先级。
然而,这些扩展有一个副作用:因为它们是使用 ${{ ... }} 完成的,而不是使用 ${...}(即普通的 shell 插值),所以它们可以绕过普通的 shell 引用规则。特别是,如果 env.ACTION_REF 和 env.PR_REF 都评估为空字符串,那么表达式将回退到 github.ref_name,而 github.ref_name 可以通过分支或标签名被攻击者控制。
例如,如果攻击者能够将分支名称设置为类似 innocent;cat${IFS}/etc/passwd 的内容,那么 REF 行可能会扩展为:
|
|
这会将 REF 设置为 innocent,然后运行攻击者的代码。
关于危险扩展的更多信息可以在 zizmor 的模板注入规则文档中找到。
影响
此漏洞的影响非常低:在正常操作中,相关表达式不太可能被评估,因为 env.ACTION_REF 应该始终具有优先权。
具体来说,在许多流行配置中(即使用 pull_request、release 或 push: tags 事件来调用此动作的配置中),该动作不易受攻击。
参考
- GHSA-vxmw-7h4f-hqxh
- pypa/gh-action-pypi-publish@77db1b7
其他信息
严重程度: 低
CVSS v3 基础指标:
- 攻击向量: 网络
- 攻击复杂度: 低
- 所需权限: 无
- 用户交互: 无
- 范围: 未改变
- 机密性影响: 无
- 完整性影响: 无
- 可用性影响: 无
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N
弱点:
- CWE-77: 对命令中使用的特殊元素进行不当中和(命令注入)
GHSA ID: GHSA-vxmw-7h4f-hqxh
源代码: pypa/gh-action-pypi-publish
报告者: woodruffw