请教一下大家:
如果有坏人成功登录了我的账号,在设置界面看不到我 secret 里面的内容。 可是 secret 对脚本是透明的,别人随便加句打印语句不就知道了吗? 那用 secret 比用明文安全在哪里呢?
1
LxnChan 2023-05-23 10:57:04 +08:00
公开仓库是看不到的
|
2
Tyris OP @LxnChan 是看不到,但,比如我有一个叫`MY_SEC`的 secret ,如果别人在我 workflow 里加一句 bash `echo $MY_SEC` ,在输出的 log 里不就看到了
|
4
krixaar 2023-05-23 11:26:48 +08:00
就安全在别人不盗你的号看不到,仅此而已。你号都能被盗了还谈什么安全。
|
5
caomingjun 2023-05-23 11:40:50 +08:00 4
@Tyris 直接 echo 是不行的,会变成星号,但是可以输出 base64 啥的
这个的设计的目的之一是,一些组织 /公司内部有专门的凭据管理人员,非凭据管理人员不应该看到凭据,即使他们可能有读取甚至读写仓库的权限。在这种情况下虽然开发可以进行你所说的攻击,但是显然是可以被追责的。在 GitHub 上还有一个目的,公开仓库是向所有人公开 Actions logs 的(不需要登陆仓库所有者的账号,所有人都能看到),可以对他们隐藏 secret 。 另外,即使是攻击者能够更改和运行 workflow ,他也会留下记录,凭据所有者可以比较及时地发现并重置凭据,而如果不用 secret 攻击者可以直接把凭据复制走,没有任何记录,可能引发了重大安全事故你才发现。 |
6
Tyris OP @caomingjun 刚刚去试了一下,无论是 echo,xz,base64 或者 python -c "print (\"$MY_SEC\")"的输出都会打马。不过先写到文件,再 upload-artifact 传出来的密码是完整的。
|
7
caomingjun 2023-05-23 12:29:40 +08:00 via Android
@Tyris 哦 base64 也就不行了啊,我才知道。打星号的机制的目的本来就是防止你意外泄漏,对攻击是没办法的,只能靠日志去查。
不过鉴于 commit 不会记录进安全日志,攻击者是可以删掉 commit 记录和 action 运行记录的,只能说用 2FA 保护好你的账户了。 |
8
finab 2023-05-23 12:34:21 +08:00
我的一个 github 项目需要用 action 编译上传到商店。
过程中需要使用证书、秘钥之类的东西,不能直接放到仓库里,放到 secret 里正好合适 |
9
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: 缓解措施,就算是被黑了,让伤害尽量小 |
10
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 就不会泄漏。 |
11
lambdaq 2023-05-23 14:09:44 +08:00
这个意义就是给直接复制粘贴增加一丁点门槛。
|
12
shyling 2023-05-23 14:15:32 +08:00
secret 是为了能看 build logs 的前提下保密,你账号都没了,咋样都泄露了
|