V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bwangel
V2EX  ›  程序员

建议大家弃用 Gitalk 和 Gitment 等权限过高的 Github OAuth App

  •  
  •   bwangel ·
    bwangelme · 2019-02-16 14:38:30 +08:00 · 9513 次点击
    这是一个创建于 2116 天前的主题,其中的信息可能已经有所发展或是发生改变。

    声明

    我和 Gitalk,Gitment 等软件的作者并不认识,也不存在任何利益关系。我之前使用过 Gtiment,这些软件的作者想出的这种评论方式极具创造性,让我有了更好的博客评论方式,我非常感激这些开源软件的创造者。

    原因

    这些 OAuth App 申请的权限太多了

    下面两张截图是我截取的 Gitment 和 Gitalk 的权限列表。它们能够 读写 授权者 所有的公共仓库 ,也就是说拿到你的授权 Token 的人,可以将你的 GitHub 公共仓库删空

    利用 GitHub 授权作恶的例子

    这是前两天隔壁楼发的帖子:

    我也是看到这个,才忍不住出来发帖提醒大家,已经有人利用 GitHub 的授权做坏事了。这次可能是个自动 follow 并 star 的小事情,下次可能就是删库跑路了。

    具体操作建议

    • 建议弃用 Gitalk 或 Gitment 等 OAuth App,并在 [ GitHub -> 右上角头像 -> Settings -> Applications -> Authorized OAuth Apps ] 中取消授权。
    17 条回复    2020-08-19 22:09:10 +08:00
    huangdayu
        1
    huangdayu  
       2019-02-16 14:45:50 +08:00
    开发者有保存 token 吗?
    bwangel
        2
    bwangel  
    OP
       2019-02-16 15:10:42 +08:00
    @huangdayu

    刚刚看了一下 Gitalk 的代码,开发者没有保存,它只是将 access_token 保存到了 localStorage 中。

    https://github.com/gitalk/gitalk/blob/master/src/gitalk.jsx#L156

    如果恶意攻击者想获取使用者的 AccessToken,只需要在上述代码中加上一个 ajax 请求即可。
    respect11
        3
    respect11  
       2019-02-16 15:44:22 +08:00
    OpenHub 呢?
    imswing
        4
    imswing  
       2019-02-16 16:17:44 +08:00 via iPhone
    同理第三方的 app 也不安全了
    lrz0lrz
        5
    lrz0lrz  
       2019-02-16 16:21:30 +08:00   ❤️ 1
    这个与黑客派那种恶意窃取不一样,好像是因为 github 的权限划分不够细,所以开发者不能只获取 issue 权限。

    想要获取 issue 权限,只能获取 read and write all public repository data 权限。
    lrz0lrz
        6
    lrz0lrz  
       2019-02-16 16:22:43 +08:00
    查了一下文档,果然如此:

    https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes

    没有比 public_repo 粒度更细的权限了。
    gclove
        7
    gclove  
       2019-02-16 23:14:57 +08:00
    这也是没办法的事情,详见

    https://github.com/gitalk/gitalk/issues/95
    bwangel
        8
    bwangel  
    OP
       2019-02-17 11:11:35 +08:00
    @lrz0lrz @gclove

    有的评论软件也是使用 GitHub 的 issue 作为评论,不过他们的是 GitHub App,所以他们的权限更细,只针对某个 GitHub 仓库拥有写权限。
    bwangel
        9
    bwangel  
    OP
       2019-02-17 11:13:49 +08:00   ❤️ 1
    @respect11

    openhub 我没用过,你可以在 https://github.com/settings/installations 中查看 openhub 的权限,想 Gitalk 这种 read and wirte all public repository data 是极度危险的。
    1217950746
        10
    1217950746  
       2019-02-17 15:08:42 +08:00
    之前就发现了,会莫名其妙 Star 和 Fork 一些项目
    abcbuzhiming
        11
    abcbuzhiming  
       2019-02-17 18:58:42 +08:00
    真奇怪,这算典型的设计漏洞啊,读权限还好说,为啥写权限会被拿到,github 自己设计这玩意的时候没考虑过吗
    deltacat
        12
    deltacat  
       2019-03-23 11:07:43 +08:00
    比较慌的是,用在静态网站的话,clientID/clientSecret 都是所有人可以看到的,随便什么人都可以拿到吧。
    bwangel
        13
    bwangel  
    OP
       2019-03-24 11:05:58 +08:00   ❤️ 1
    @deltacat https://github.com/utterance/utterances 是个 GitHub App,它的权限仅限于某个仓库。像 hugo hexo 这种静态页面类型的博客,clientID/clientSecret 泄露是不可避免的。我认为较好的解决方式是像 utteras 这种 GitHubApp,只有一个仓库的读写权限,将破坏降到最小。
    deltacat
        14
    deltacat  
       2019-03-25 11:01:26 +08:00
    @bwangel 静态博客使用第三方服务泄露 secret 的确无法避免,这样 OAuthApp 的安全性就更成问题了。
    bwangel
        15
    bwangel  
    OP
       2019-03-25 11:18:23 +08:00
    @deltacat 所以我发这个帖子啊?感觉这是一个很大的安全隐患,不过是目前没人利用这个做坏事罢了。
    laev
        16
    laev  
       2020-08-03 14:49:46 +08:00
    https://github.com/gitalk/gitalk/issues/150
    看完这个 issue 之后还是无法判断是否可以安全使用,如果攻击者想要得到 Authorization Code 容易吗?
    yanshenxian
        17
    yanshenxian  
       2020-08-19 22:09:10 +08:00   ❤️ 1
    @laev 不需要获取 Authorization Code,只需要拿到授权后的 Token 就行了。如果网站自行修改了 gitalk.js 脚本 或者反代了 github api,就很容易拿到你的 Token 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3655 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 04:37 · PVG 12:37 · LAX 20:37 · JFK 23:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.