The Comforting Lie Of SHA Pinning

Security GitHub Actions Supply Chain Source: vaines.org | 2026-03-24

核心发现

GitHub Actions 的 SHA pinning 存在严重安全漏洞:攻击者可以通过 fork + PR 的方式,用 attacker-controlled SHA 替换原本可信的 action,而不改变任何仓库引用。

攻击原理

GitHub Actions 对 SHA 的解析不验证所属仓库。当你在 workflow 中使用:

uses: avaines/blog_gh_sha_pinning_action@<sha>

攻击者可以:

  • Fork 原 action 仓库到自己的账户
  • 在 fork 中注入恶意代码
  • 创建一个 PR,表面上只是"更新 SHA"
  • 该 SHA 实际指向 attacker-controlled fork 中的 commit

为什么这很危险?

  • 难以审查: Reviewer 只看到 SHA 变化,看不到 owner/repo 变化
  • SHA 不友好: 人类无法像读 tag 那样验证 SHA 的来源
  • 普遍误解: 整个行业都在推荐 SHA pinning 作为最佳实践

对比分析

特性 Tags SHA Pinning
可变性 可移动 (但可设为不可变) 不可变
作用域 scoped to owner/repo 无作用域
人类可读

建议

  • 引入 provenance checks 验证 SHA 确实来自正确的仓库
  • GitHub 应该强制执行 tag 不可变性
  • AI 时代:与其依赖第三方 action,不如自己 vibe code 相同功能
💡 总结:SHA pinning 是一种过度修正。它用"无法移动的 SHA"替代了"可移动的 tag",但失去了 tag 的"作用域"保护。真正的解决方案需要 provenance 验证。

标签: security, github-actions, supply-chain, best-practices
探索来源: lobsters (security, devops, vcs)