漏洞概述
安全漏洞ID:GHSA-vxmw-7h4f-hqxh
漏洞类型:低危安全漏洞(Low severity)
影响范围:PyPI发布GitHub Actions(pypa/gh-action-pypi-publish)版本低于1.13.0
修复版本:1.13.0及以上
漏洞发现时间:2025年9月4日发布
漏洞详细描述
漏洞原理
gh-action-pypi-publish是一个用于将Python分发包上传到PyPI的GitHub Actions。该操作中的复合动作步骤set-repo-and-ref使用了GitHub Actions表达式扩展(即${{ ... }}),而这些表达式是在攻击者可能控制的上下文中使用的。
根据调用gh-action-pypi-publish的触发器类型,攻击者可能能够在调用该操作的工作流步骤中执行任意代码。
技术细节
存在漏洞的代码位于action.yml文件的第114-125行:
|
|
问题根源:
- 这些表达式使用
${{ ... }}语法,而不是${...}(即正常的shell插值) - 这可以绕过正常的shell引号规则
- 如果
env.ACTION_REF和env.PR_REF都评估为空字符串,则表达式会回退到github.ref_name,这可以是通过分支或标签名设置的攻击者控制的字符串
攻击示例
如果攻击者能够将分支名称设置为类似innocent;cat${IFS}/etc/passwd的内容,那么REF行可能扩展为:
|
|
这将把REF设置为innocent,然后运行攻击者的代码。
背景问题
漏洞影响分析
影响范围
该漏洞的影响非常低,因为在正常操作中,相关表达式不太可能被评估,因为env.ACTION_REF应该始终具有优先权。
特别是,该操作在许多流行配置中不易受攻击,例如:
- 使用
pull_request事件调用操作 - 使用
release事件调用操作 - 使用
push: tags事件调用操作
潜在风险
只有在特定条件下,攻击者才能利用此漏洞:
- 攻击者能够控制分支或标签名称
env.ACTION_REF和env.PR_REF都为空值- 工作流配置使得攻击者控制的值能够传递到漏洞代码中
CVSS评分
- CVSS总体评分:0.0/10(低危)
- CVSS v3基础指标:AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N
- 弱点分类:CWE-77(命令中使用的特殊元素的不当中和,即命令注入)
解决方案
修复版本
已发布修复版本1.13.0,用户应升级到此版本或更高版本。
临时缓解措施
如果无法立即升级,可以考虑以下缓解措施:
- 避免在可能受攻击者控制的上下文中使用此操作
- 审查工作流配置,确保不会将不受信任的输入传递给该操作
- 监控分支和标签名称的创建,防止恶意命名的分支/标签
开发者建议
- 在使用GitHub Actions表达式时,应注意其与普通shell插值的区别
- 避免在可能包含用户输入的上下文中使用
${{ ... }}表达式 - 对于需要处理潜在不受信任输入的场景,应考虑使用适当的输入验证和清理
相关资源
-
GitHub Advisory Database:GHSA-vxmw-7h4f-hqxh
-
模板注入规则文档:zizmor的template-injection规则文档提供了有关危险扩展的更多信息
总结
PyPI发布GitHub Actions中的这个表达式注入漏洞虽然技术评分较低,但它揭示了GitHub Actions工作流中一个重要的安全问题。开发者在设计自动化工作流时,需要特别注意如何处理可能受攻击者控制的输入,尤其是在使用表达式扩展和shell命令时。及时更新到修复版本1.13.0是保护工作流安全的关键步骤。