知识库导读 · 约 2,482 字 · 预计推送 1 部分

Secure use reference(GitHub Actions 安全加固) 未开始

目录

题记与说明

这篇讲什么

GitHub 官方的 Actions 安全权威参考(reference 类型,非教程)。旧名 "Security hardening for GitHub Actions",现已重构为 "Secure use reference",是一切实践文章的源头出处。全文四大板块:工作流编写(secrets 与脚本注入)、不可信代码 checkout(pwn request)、第三方 action 的供应链风险、GitHub 内置安全特性(runner 加固、审计、依赖监控)。

核心观点

  1. Secrets 自动脱敏不保证可靠:脱敏靠精确字符串匹配,所以永远不要把 JSON/XML/YAML 整块存成 secret(会大幅降低脱敏成功率);secret 经 Base64/URL 编码或用于生成 JWT 后,要把变换结果也注册为 secret,否则日志照样泄露。
  2. 脚本注入的标准解法:优先用 action 而非 inline script;必须 inline 时,把 ${{ github.event.pull_request.title }} 这类不可信输入先塞进中间环境变量,让它只作为变量存在、绝不参与 shell 命令拼接。
  3. pull_request_target / workflow_run 是高危触发器:它们是特权工作流,一旦 checkout 不可信 PR 代码就可能被接管整个仓库。不必要就不用,必须用时严禁 checkout 不可信代码(可参考 GitHub Security Lab 的 "Preventing pwn requests")。
  4. 第三方 action 供应链:一个 action 被攻破 = 拿到你仓库全部 secrets + 可能的 GITHUB_TOKEN 写权限。最强防护是 lockfile(记录每个 action 的精确 commit、运行时校验源仓库身份,官方明确说它"取代 SHA pinning");用不了 lockfile 就 pin 全长 commit SHA(伪造需 SHA-1 碰撞),tag 只在信任作者时用,且无论如何都要审计源码。
  5. Self-hosted runner 几乎不该用于公开仓库:它不是一次性的干净 VM,可被 PR 恶意代码持久攻破;连私有仓库也要谨慎,因为任何有读权限的人都能 fork+PR。替代方案:REST API 创建 JIT 临时 runner(最多跑一个 job 就销毁)。

最值得记住的 2-3 个金句/数据

对我的启发

适合谁读

所有写 GitHub Actions workflow 的人(哪怕只写过一条);接受 fork PR 的开源维护者(风险最高人群);用 self-hosted runner 的团队;以及让 AI agent 自动生成/修改 CI 配置、需要一套审查底线的开发者。

← 资料库今日播报 →