gh action 和 cf worker 这些平台的 secret 环境变量存在意义是什么

2023-05-23 10:55:07 +08:00
 Tyris

请教一下大家:

如果有坏人成功登录了我的账号,在设置界面看不到我 secret 里面的内容。 可是 secret 对脚本是透明的,别人随便加句打印语句不就知道了吗? 那用 secret 比用明文安全在哪里呢?

1167 次点击
所在节点    问与答
12 条回复
LxnChan
2023-05-23 10:57:04 +08:00
公开仓库是看不到的
Tyris
2023-05-23 11:04:32 +08:00
@LxnChan 是看不到,但,比如我有一个叫`MY_SEC`的 secret ,如果别人在我 workflow 里加一句 bash `echo $MY_SEC` ,在输出的 log 里不就看到了
julyclyde
2023-05-23 11:07:40 +08:00
@Tyris 为什么你的 workflow 可以被别人加呢?
krixaar
2023-05-23 11:26:48 +08:00
就安全在别人不盗你的号看不到,仅此而已。你号都能被盗了还谈什么安全。
caomingjun
2023-05-23 11:40:50 +08:00
@Tyris 直接 echo 是不行的,会变成星号,但是可以输出 base64 啥的
这个的设计的目的之一是,一些组织 /公司内部有专门的凭据管理人员,非凭据管理人员不应该看到凭据,即使他们可能有读取甚至读写仓库的权限。在这种情况下虽然开发可以进行你所说的攻击,但是显然是可以被追责的。在 GitHub 上还有一个目的,公开仓库是向所有人公开 Actions logs 的(不需要登陆仓库所有者的账号,所有人都能看到),可以对他们隐藏 secret 。
另外,即使是攻击者能够更改和运行 workflow ,他也会留下记录,凭据所有者可以比较及时地发现并重置凭据,而如果不用 secret 攻击者可以直接把凭据复制走,没有任何记录,可能引发了重大安全事故你才发现。
Tyris
2023-05-23 12:24:27 +08:00
@caomingjun 刚刚去试了一下,无论是 echo,xz,base64 或者 python -c "print (\"$MY_SEC\")"的输出都会打马。不过先写到文件,再 upload-artifact 传出来的密码是完整的。
caomingjun
2023-05-23 12:29:40 +08:00
@Tyris 哦 base64 也就不行了啊,我才知道。打星号的机制的目的本来就是防止你意外泄漏,对攻击是没办法的,只能靠日志去查。
不过鉴于 commit 不会记录进安全日志,攻击者是可以删掉 commit 记录和 action 运行记录的,只能说用 2FA 保护好你的账户了。
finab
2023-05-23 12:34:21 +08:00
我的一个 github 项目需要用 action 编译上传到商店。
过程中需要使用证书、秘钥之类的东西,不能直接放到仓库里,放到 secret 里正好合适
0o0O0o0O0o
2023-05-23 12:49:31 +08:00
为了不让别人可以修改运行你的 actions ,github actions 新增了很多限制,例如 https://github.com/<owner>/<repo>/settings/actions

- Actions permissions: 防止恶意 workflows 供应链攻击
- Fork pull request workflows from outside collaborators: 之前就出过这样的漏洞利用
- Workflow permissions: 缓解措施,就算是被黑了,让伤害尽量小
Trim21
2023-05-23 13:05:57 +08:00
不知道 cf worker 啥样,单说 gh action

secrets 的设计就不是在“坏人成功登录了我的账号”这个前提下工作的...

首先 PR 的 workflow run 是读不到你 repo 的 secrets ,能读到 secrets 的 workflow 必需在你仓库里。也就是说要么是你合并了别人的 PR ,要么是其他有写权限的人提交到你的仓库里。

一个简单地而例子,你的 actions 要推 docker 镜像到 docker hub ,你总不能把 docker hub 的 token 明文写在 workflow 里面吧。

这种时候用 secrets ,只要你自己不加 echo 语句,upload-artifact 之类的骚操作,不把泄漏 secrets 的 PR 合并进你的仓库,不给你不信任的人 write 权限,你的 docker hub token 就不会泄漏。
lambdaq
2023-05-23 14:09:44 +08:00
这个意义就是给直接复制粘贴增加一丁点门槛。
shyling
2023-05-23 14:15:32 +08:00
secret 是为了能看 build logs 的前提下保密,你账号都没了,咋样都泄露了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/942174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX