V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Tyris
V2EX  ›  问与答

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

  •  
  •   Tyris · 311 天前 · 921 次点击
    这是一个创建于 311 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一下大家:

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

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

    - Actions permissions: 防止恶意 workflows 供应链攻击
    - Fork pull request workflows from outside collaborators: 之前就出过这样的漏洞利用
    - Workflow permissions: 缓解措施,就算是被黑了,让伤害尽量小
    Trim21
        10
    Trim21  
       311 天前
    不知道 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
        11
    lambdaq  
       311 天前
    这个意义就是给直接复制粘贴增加一丁点门槛。
    shyling
        12
    shyling  
       311 天前
    secret 是为了能看 build logs 的前提下保密,你账号都没了,咋样都泄露了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3024 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:03 · PVG 19:03 · LAX 04:03 · JFK 07:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.