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

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

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

    声明

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

    原因

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

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

    利用 GitHub 授权作恶的例子

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

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

    具体操作建议

    • 建议弃用 Gitalk 或 Gitment 等 OAuth App,并在 [ GitHub -> 右上角头像 -> Settings -> Applications -> Authorized OAuth Apps ] 中取消授权。
    15 回复  |  直到 2019-03-25 11:18:23 +08:00
        1
    huangdayu   98 天前
    开发者有保存 token 吗?
        2
    bwangel   98 天前
    @huangdayu

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

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

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

    想要获取 issue 权限,只能获取 read and write all public repository data 权限。
        6
    lrz0lrz   98 天前
    查了一下文档,果然如此:

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

    没有比 public_repo 粒度更细的权限了。
        7
    gclove   97 天前
    这也是没办法的事情,详见

    https://github.com/gitalk/gitalk/issues/95
        8
    bwangel   97 天前
    @lrz0lrz @gclove

    有的评论软件也是使用 GitHub 的 issue 作为评论,不过他们的是 GitHub App,所以他们的权限更细,只针对某个 GitHub 仓库拥有写权限。
        9
    bwangel   97 天前   ♥ 1
    @respect11

    openhub 我没用过,你可以在 https://github.com/settings/installations 中查看 openhub 的权限,想 Gitalk 这种 read and wirte all public repository data 是极度危险的。
        10
    1217950746   97 天前
    之前就发现了,会莫名其妙 Star 和 Fork 一些项目
        11
    abcbuzhiming   96 天前
    真奇怪,这算典型的设计漏洞啊,读权限还好说,为啥写权限会被拿到,github 自己设计这玩意的时候没考虑过吗
        12
    deltacat   63 天前
    比较慌的是,用在静态网站的话,clientID/clientSecret 都是所有人可以看到的,随便什么人都可以拿到吧。
        13
    bwangel   62 天前   ♥ 1
    @deltacat https://github.com/utterance/utterances 是个 GitHub App,它的权限仅限于某个仓库。像 hugo hexo 这种静态页面类型的博客,clientID/clientSecret 泄露是不可避免的。我认为较好的解决方式是像 utteras 这种 GitHubApp,只有一个仓库的读写权限,将破坏降到最小。
        14
    deltacat   61 天前
    @bwangel 静态博客使用第三方服务泄露 secret 的确无法避免,这样 OAuthApp 的安全性就更成问题了。
        15
    bwangel   61 天前
    @deltacat 所以我发这个帖子啊?感觉这是一个很大的安全隐患,不过是目前没人利用这个做坏事罢了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2439 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 08:55 · PVG 16:55 · LAX 01:55 · JFK 04:55
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1